Faceted navigation — the filters down the side of a results page — looks like a front-end feature and is almost entirely a data problem. A "form: powder / capsules / liquid" filter is trivial to render and impossible to trust unless every product carries a clean, consistent value for that attribute. On a single store that is a tidy-up job. On a multi-vendor catalogue, where six vendors describe the same concept six different ways, it is the whole job. This is how we make facets that convert: build them from enriched, normalized attributes, let usage decide which survive, and control how they interact with search engines.
Filters are only as good as the attributes behind them
A facet is a promise: check this box and every product shown will have this property. The promise breaks the moment the underlying attribute is inconsistent, missing or guessed. If some products record "capsules", others "caps" and others leave the field blank, a "form" facet will silently hide products that belong in the results — and a shopper who filters to "capsules" and sees three items assumes you stock three, not thirty. So the work starts in the catalogue, not the component. Facets should be generated from attributes that enrichment has normalized to a canonical value, drawn from a deliberate product taxonomy rather than from whatever free text the vendor happened to supply.
This shared dependency is why investing in the catalogue pays twice: the same normalized attribute that powers a trustworthy facet also improves search recall and the quality of any AI feature that reasons over the data. Clean attributes are infrastructure, and facets are just the most visible thing standing on them.
The multi-vendor normalization problem
The hard part of marketplace facets is that no two vendors agree on vocabulary, units or structure. One vendor's "flavour" is another's "taste"; one records weight in grams, another in kilograms; one splits a product into variants where another uses a single listing. A facet cannot span that without a normalization layer that maps every vendor's raw attribute onto one shared field with one set of allowed values.
Our "form" facet — powder, capsules, tablets, liquid — exists because enrichment normalizes that field to a canonical value across all six vendors, none of whom expressed it the same way. The facet is not something we render on top of vendor data; it is something we manufacture underneath it. A filter that spans a multi-vendor catalogue is a normalization project wearing a checkbox.
Normalization is also where you decide the vocabulary the shopper sees, which is a merchandising choice, not a data-cleaning one. "Powder", "powdered" and the local-language equivalent should collapse to one label — but which label, in which language, is a decision about how your customers think, not about which vendor supplied the most rows. Make it deliberately, and make it once, so the facet reads as one store's voice rather than six vendors' spreadsheets.
Which facets earn a place
More facets is not better. Every filter you add costs vertical space, adds decision load, and risks a low-value dimension crowding out a high-value one. Let usage decide. Instrument which facets are actually applied — the search and interaction data tells you — and keep the ones shoppers use, kill the ones they ignore, and never show a facet whose values are unreliable.
| Facet | Keep if… | Kill if… |
|---|---|---|
| Price | Always, with honest ranges | — |
| Form (powder / caps) | Normalized and applied | Values inconsistent across vendors |
| Brand | Catalogue has many brands | One brand dominates the results |
| Flavour | Bounded set, used | Hundreds of one-off values |
| Diet (vegan / gluten-free) | Backed by a real data tag | Guessed or derived |
| Vendor | Shoppers filter by it | Usage says they don't |
Match the facet type to the attribute
Not every attribute wants the same control, and getting the type wrong is a quiet source of friction:
- Single-select for mutually exclusive properties where picking two values makes no sense.
- Multi-select for properties where a shopper legitimately wants several values at once — three flavours, two brands — usually OR within the facet and AND across facets.
- Ranges for continuous values like price or weight, with sensible buckets rather than a raw slider that lands on empty bands.
- Hierarchical for taxonomy-shaped attributes where a parent value implies its children.
The AND-across, OR-within convention is worth stating explicitly because shoppers assume it, and a store that ANDs within a multi-select facet — requiring a product to be vanilla and chocolate at once — produces baffling empty results that read as a broken store rather than a logical choice.
Facet SEO: control the crawl
Facets multiply URLs. Every combination of filters can generate a distinct address, and left unmanaged that produces millions of thin, near-duplicate pages that dilute your crawl budget and confuse indexing. The discipline has three parts. Decide which facet pages deserve to be indexable — usually a small set of high-demand single-facet combinations that match real search demand — and let those be crawlable with their own canonical. Point the long tail of multi-facet combinations back to a canonical parent so they are not indexed as duplicates. And keep filter interactions that should never be indexed (sort order, pagination beyond a point, session parameters) out of the crawl entirely. This is part of the broader marketplace SEO problem of a catalogue whose URLs churn as products and vendors change.
The UX details that decide trust
Once the data is clean and the crawl is controlled, a few interface choices decide whether facets feel trustworthy. Show result counts next to each value so shoppers know what they will get before they click, and update those counts as other filters are applied. Suppress facet values that would lead to zero results rather than letting a shopper filter their way into an empty page — an unproductive dead end erodes confidence as much as a bad no-results page does. Order facet values sensibly (by count or by a natural order, not alphabetically by accident). And be careful with price: a price facet is fine, but any "was / now" or discount framing inside it must obey the same substantiated-prior-price rules as the rest of the store, so price filtering never becomes an accidental Omnibus problem.
Key takeaways
- Facets are a data problem — a filter is only as trustworthy as the normalized attribute behind it, so the work starts in the catalogue, not the component.
- Normalize every vendor's vocabulary onto one shared field — a multi-vendor facet like "form" is a normalization project, not a checkbox.
- Let usage decide which facets survive; kill the ones shoppers ignore and never show a facet whose values are unreliable.
- Control facet SEO: index a small set of high-demand facet pages, canonicalise the long tail, and keep sort and pagination out of the crawl.
- Show live result counts and suppress zero-result values so shoppers never filter themselves into an empty page.
- Keep price-facet framing honest — discount language inside filters obeys the same prior-price rules as everywhere else.
Frequently asked questions
What is faceted navigation in ecommerce?
Why do my filters show wrong or missing products?
How do facets affect SEO?
Which facets should an ecommerce store show?
Filters shoppers can trust.
Facets built from normalized, enriched attributes across every vendor are part of the marketplace we run on sites that already have traffic.
Request early access Filter the live catalogue →