Product discovery (2025)
Over the years, I have been struggling quite a bit to do optimal product discovery concerning WordPress/WooCommerce sites with large amounts of products. This is not a matter of just getting the product_cat
and attribute taxonomies right, but also about landing pages, SEO and in the end: Revenue and profit. This article is the 2025 installment concerning this endeavour, and I think I got some major new insights.
Some synonyms for product discovery in English: Catalog navigation, roduct navigation, Product structuring, Product accessibility and Product organisation. In Dutch: Assortment optimization, Product-ontsluiting and Assortiment-presentatie.
Context
- This article is based on experiences with a series of WordPress/WooCommerce sites, with about 17,000 technical aftermarket products each
- These products are all very similar, making discoverability exceptionally challenging: Offering more than a handful of alternatives to a visitor, will make it challenging to make a choice
- The primary site is Dutch, focused on the Netherlands, abbreviated
nl_nl
(orvoorbeeld.nl
). Derivatives include the German site in German, abbreviatedde_de
, the English site for Germany asde_en
(orexample.de
), etc. As of Jan. 2025, we operate about 22 of these sites.
Terminology
product_cat
is the build-in WooCommerce hierarchical product taxonomy. It's real name is Categories (EN) or Categorieën (NL)- Attributes, Features or Kenmerken is the other major WooCommerce product taxonomy. It's non-hierarchical
- Tags is the third major WordPress taxonomy - Not further used here
- The shop page of a WooCommerce site, is the page with all products displayed in the main pane of the page, and filters (if any) on the side pane.
Example sites
Site | Notes |
---|---|
dataio.nl | Exceptionally well designed product structure. I think they especially found a good balance between using product_cat and attribute taxonomies, without overdoing anything |
tweakers.net/pricewatch | Although not build in WordPress, its an excellent case study how to do discoverability for a very large amount of heterogeneous products:
|
Review: product_cat vs. Attributes
Both product_cat
and Attributes taxonomies, do their magic at the shop page - This is pretty much the only way that these taxonomies perform a function to visitors.
A traditional comparison between the product_cat
and Attributes taxonomies:
product_cat
- There is only one
product_cat
taxonomy at any WordPress/WooCommerce site - A serious limitation for me - Can be hierarchical
- Comes automatically with SEF URLs
- With corresponding breadcrumb trail - And maybe with some other functionalities
- Shop pages become very resource-heavy, when widgets are included, that display hierarchical
product_cat
data - Other kinds of widgets, are not that resource-heavy.
Attributes
- Non-hierarchical: Attribute taxonomies have only one layer (that can have as many taxons as desired)
- There can be as many attribute taxonomies as desired. E.g: Color, size, material, etc., etc.
- They don't have SEF URLs: Pages are generated dynamically and have parameter URLs, which Google doesn't like. Example: dataio.nl/sandisk-extreme-micro-sd-met-adapter/?attribute_pa_opslagcapaciteiten=32-gb
Review: product_cat & hierarchy
Just because product_cat
can be hierarchical, doesn't mean that it has to be used that way, especially since it brings some serious complications with it. Let's have a closer look at it:
Because of biology
For me, the archetypical hierarchical taxonomy is concerning biological classification. It's obviously hierarchical because there is a causal connection between the various species (like humans decending from monkeys). I think I can easily take this analogy too far, and apply hierarchical taxonomies to situations where there isn't such an obvious connection.
Pro: Divide and conquer
I suspect that one reason why hierarchical taxonomies are appealing, is the promise of devide and conquer: Start with the most significant differentiator, and from there descend into trees of progessively smaller differentiatiors, until all products (or elements, or whatever) have found their place.
Con: But only if it fits the mold
Unfortunately, there often isn't such a straightforward tree. E.g.:
- Later on, additional taxons need to be inserted at various places
- Some products don't seem to fit anywhere
- Some products could fit at multiple places
- For some products, information is missing to know where they would fit.
Pro: Natural breadcrumb path
With a hierarchical taxonomy, you descend from general to special - That nicely fits with a breadcrumb path.
Pro: Rich URLs
With hierarchical taxonomies, you automatically get information-rich URLs. E.g.:
example.com/cars/red/daf/truttenschudder/jarretelaandrijving
That's probably a bit of work to duplicate with attribute taxonomies.
Con: When there isn't a natural devision
Maybe the core of the problem: How about when there isn't a natural way to devide products into an hierarchical tree?
Some examples:
- The stupid analogy of a hierarchical taxonomy to the floorplan of a large clothes store: Man, woman, children - But how about plain white t-shirts: Where do they fit? Or at all three?
- The parts website I worked on: Brand » Device » Device-ID » Device-sub-ID - But what about parts for certain devices (bow trusters, for example), that are not associated with a brand?
- How about first searching by device, and than by brand?
- How about searching by color? Oh, that's not included?
Maybe, these problems all stem fromt he absence of a natural hierarchy - And maybe this is what I keep overlooking when marvelling a the beauty of biological classification, while being baffled by how unworkable hierarchical classifications are for other areas of life.
Con: Your stuck with it
Mostly a repetition of the previous paragraphs: Once I defined a certain hierarchy, I can't change that, and I can't work out it.
As an example: Let's say that I defined a hierarchy Brand » Device, but I really want to see all drill machines, regardless of brand. As far as I know, there is no way of doing this. Or at least, no way of doing this using only the product_cat
taxonomy.
Con: Only one hierarchical taxonomy
To make stuff just a bit worse: There can be only one hierarchical taxonomy, and this really compounds the issues mentioned before. As discussed at great lenght (in Dutch) at Attributes vs. categories (WooCommerce), there is no way to fix the lack of flexibility when there is only one taxonomy. It just sucks.
Required
All products are required to be part of at least one product_cat taxon.
Review: Attributes
Pro: Multi-dimensional filtering
This is the the opposite of the problem with the inflexibility of a hierarchical structure: When there are multiple attributes, that are indepedent of eachother, attributes might be better:
Better for products with multiple properties: If a product belongs to different logical groups (e.g., "Red Cotton T-shirt" → Red (Color), Cotton (Material), T-shirt (Type)), attributes allow for easy filtering across multiple dimensions.
Pro: As many taxonomies as you want
You can define as many attributes as needed (e.g., color, size, brand, material) and apply them to products without a rigid hierarchy.
Pro: Resource-light
They take less resources than product_cat does under specific conditions (like displaying hierarchical info in a widget on a shop page).
Con: No SEO-friendly URLs by default
WooCommerce encodes attributes as URL parameters (?filter_color=red), which is bad for SEO. You’d need to rewrite URLs to something like shop/color/red/, but this isn't native to WooCommerce.
However: Plugins like FacetWP might be able to kinda fix this.
Con: All kinds of limitations
Attribute taxonomies have a bunch of additional limitations, compaired to product_cat - But I don't think they matter much.
Design - 2025.02
Like always, I reserve the right to contradict myself, etc. :)
product_cat
- Don't use hierarchy
- Use product_cat opportunistically - When there is a clear need for a certain broad category. I think dataio does that very well, and I heard from P. that this is a best practice. E.g., a category offers could easily emerge like that.
Evaluate plugins like FacetWP
- Use a plugin like FacetWP to create static URLs for important combinations of filters and to alluviate other limitations of attributes
Attributes
Use attributes for most of the things for which I tended to use product_cat
Use landing pages
- Create custom landing pages for all important keywords
- These products are highly homogenous (they don't differ much from eachother), so use landing pages and buttonbar pages to lead visitors to shop pages with as few products as possible.
Canonicalisation
Use canonicalisation to avoid cannibalisation.