Product discovery (2025)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

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 (or voorbeeld.nl). Derivatives include the German site in German, abbreviated de_de, the English site for Germany as de_en (or example.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:
  • They basically have a bunch of separate product portfolios, each with its own shop page - Excellent way to manage complexities
  • When you drill down to any one of these shopping pages, you're likely to eventually find some 'loose attributes', that where incorporated as an afterthought. This is unavoidable and not meant as criticism

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

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.

See also

Sources