What faceted navigation is, in SEO terms
Faceted navigation is the filter-and-sort surface most large catalogue sites expose to users — pick a colour, a size, a brand, a price range, a rating, a sort order, and the catalogue narrows. From a user's perspective it is one page that updates as they pick. From a search engine's perspective it can be thousands or millions of distinct URLs, one for every combination of filters and sorts. Each combination is either a chance to rank for a more specific query, or a wasted crawl on a near-empty page that competes with itself.
Faceted navigation is the single largest source of indexation problems we see on ecommerce audits. The symptoms are recognizable: hundreds of thousands of "Crawled — currently not indexed" entries in Search Console, crawl-budget warnings, the same product appearing under dozens of nearly identical filter URLs, and category pages that should rank trapped behind a wall of low-quality variants.
The crawl trap: how facets eat budget
The math gets bad fast. A category page with five facets (colour, size, brand, price range, rating) and conservative cardinalities (10, 8, 30, 5, 5) produces 10 × 8 × 30 × 5 × 5 = 60,000 unique combinations per category. Multiply by 200 categories and you have 12 million faceted URLs for a catalogue that may only contain 100,000 actual products. Add sort order and pagination and the number doubles or triples.
A 100,000-product catalogue should have a few thousand indexable URLs, not twelve million. The faceted-navigation decision is what determines which of those two outcomes you ship.
Google does not have to crawl all of them, but if your internal links expose them, it will discover them, and a sizeable fraction of crawl budget will be spent fetching pages that should never rank. Worse, the ones that do get indexed compete with each other and with the canonical category page for the same ranking signal.
The 'index, canonical, or block' decision tree
Every facet (and every meaningful facet combination) gets one of three treatments. The decision is driven by search demand and inventory differentiation:
| Treatment | When to use | Implementation |
|---|---|---|
| Index | Genuine search demand AND inventory meaningfully different from parent | Path-based URL, self-referencing rel=canonical, included in sitemap, internal-linked from category page, optimized title/H1/copy |
| Canonical to parent | Some search demand OR meaningful inventory but not both | Parameter-based URL, rel=canonical to clean parent category URL, NOT in sitemap, may or may not be internal-linked |
| Block from crawl | No search demand AND inventory not meaningfully different (most combinations) | robots.txt Disallow on the parameter pattern OR JavaScript-only filter that does not produce a URL |
The mistake we see most often is treating every facet combination identically — either indexing them all (catastrophic crawl bloat) or blocking them all (no chance to rank for the specific queries that do exist). Three different treatments require three different mental models, but the runtime cost is the same.
Choosing the facets worth indexing
The right way to decide what to index is keyword research, not engineering convenience. For each candidate facet combination, check whether anyone actually searches for it.
- Single-attribute facets within high-traffic categories'Red running shoes', 'leather sofas', 'three-bedroom houses Toronto'. Often have meaningful search demand. Index.
- Brand within category'Nike running shoes', 'Bosch dishwashers'. Almost always has search demand. Index.
- Price-range facetsGenerally do not. 'Running shoes under C$100' has some demand; 'running shoes between C$87 and C$93' has none. Index sparingly, only the round-number ranges that match real queries.
- Two-attribute combinationsSometimes. 'Red Nike running shoes' has demand; 'red Nike running shoes size 10' usually does not. Audit before indexing.
- Three or more attribute combinationsAlmost never have search demand. Default to canonicalize or block.
- Sort orders (newest, price low-to-high)Never index. Sort facets do not change inventory; they change presentation. Always rel=canonical to the unsorted variant.
- PaginationEach paginated page self-canonicalizes (page 2 is its own URL); only page 1 of indexed facet combinations belongs in the sitemap.
- Out-of-stock filtersAlmost never. 'In stock only' is a UX feature, not a query; canonicalize to the unfiltered variant.
Implementation: parameters, paths and pre-render
Indexable facets get clean URL paths (/category/red-shoes/). Non-indexable filters are query parameters (?size=10&sort=newest). The URL form telegraphs the SEO intent.
Each indexed facet URL declares rel=canonical pointing at itself, with parameter order normalized.
?size=10&sort=newest declares rel=canonical pointing at the clean /category/ URL.
An indexable facet that only exists after JS execution is invisible to AI crawlers and risky for Google. SSR or pre-render the canonical facet pages.
Sitemap contains only the canonical facet URLs you actively want indexed. Never include filtered variants, sort orders, or pagination beyond page 1 of indexed facets.
Indexed facets get prominent internal links from the category page (sub-navigation, related-filter widgets). Non-indexed filters do not get crawlable internal links — link them via JS-only handlers if needed.
Available for legacy sites. Declare which parameters change content versus do not. Useful as a fallback signal; not a substitute for canonicalization.
Even non-indexed faceted URLs that get fetched should serve a useful response, with a clear canonical declaration. Soft 404s on faceted URLs are an indexation drag.
If '/red-shoes/' is indexed in English and '/chaussures-rouges/' in French, both get reciprocal hreflang declarations.
A faceted-navigation audit you can run today
- Step 1 — Crawl the site with parameter handling enabledUse Screaming Frog or Sitebulb. Crawl with respect for parameters so faceted URLs are discovered and counted.
- Step 2 — Pull the Search Console 'Crawled — currently not indexed' exportFilter for URLs containing facet parameters. Count by category. The categories with the largest counts are your worst crawl-budget bleeds.
- Step 3 — Check rel=canonical on a sample of faceted URLs from each categoryFor non-indexable variants, confirm rel=canonical points at the clean parent. For indexable facets, confirm self-referencing canonical.
- Step 4 — Verify sitemap hygienePull every URL from your category sitemap. Confirm no faceted variants beyond intentionally indexed combinations.
- Step 5 — Run Google Trends or your keyword tool on your top 10 facet combinationsConfirm there is genuine search demand for each indexed facet. Demote ones that have none.
- Step 6 — Check internal-link counts on indexable facetsIndexable facet pages should have meaningful internal links from at least the parent category page and ideally from related-filter widgets. Orphaned indexable facets do not rank.
- Step 7 — Decide and ship the fix per facet groupFor each facet group, decide index/canonical/block. Update the templates. Re-crawl and re-submit the canonical sitemap. Track Search Console valid-indexed counts over the following 60 days.
The honest summary
Faceted navigation is a feature for users and a problem for search if shipped naively. The fix is not to turn off filtering; it is to make a deliberate decision per facet about whether the filtered URL deserves to rank, deserves to consolidate, or deserves to be invisible. Most sites discover that fewer than 5% of facet combinations have any search demand at all — and the SEO upside of indexing those few well, while quietly canonicalizing or blocking the rest, is one of the largest single interventions available to a large catalogue site.
Frequently Asked Questions
The faceted-navigation questions we get asked most often during ecommerce SEO audits.
