Faceted navigation: which filter pages deserve to be indexed
Filters can turn one category into thousands of URLs. How to decide which facet pages earn a place in the index, and how to keep the rest out of the crawl.
Filters are essential for shoppers and risky for SEO. Every colour, size, brand and price option can create a new URL, and the combinations multiply faster than most teams expect. The answer isn’t to index everything or block everything: give a few facets proper landing pages, and keep the rest out of the crawl by rule.
Why filters become an SEO problem
Take a sofa category with four filters: colour (12 options), material (6), size (8) and price band (5). If shoppers pick one value per filter, or leave it blank, that’s 13 × 7 × 9 × 6 = 4,914 possible listings from one category. Allow multi-select and the count passes two billion, before you add sort orders and pagination.
Three problems follow:
- Crawl waste. Googlebot spends its visits on near-identical listings instead of new products. Google has said faceted navigation is by far the most common source of the overcrawling issues site owners report to it.
- Thin and duplicate pages. Most combinations show the same products as their parent, or one or two items, or nothing at all.
- Split signals. Links and relevance spread across many versions of the same listing instead of strengthening one page.
Google says crawl budget is mainly a concern for very large sites, but faceted navigation is how a store with a few thousand products becomes a very large site in URL terms. The symptoms show up in Search Console: statuses such as “Duplicate without user-selected canonical” and “Crawled – currently not indexed” in the Page indexing report, and parameter URLs throughout the examples in the Crawl stats report.
Which facets earn an indexable page
A facet deserves its own indexable page when it passes three tests:
- Real search demand. People search for the combination, such as “black leather sofa” or “waterproof walking boots”. Check keyword tools and Search Console queries rather than internal assumptions.
- Enough products. The page shows a meaningful selection, and keeps doing so as stock changes. A filtered page with two products is thin, however good its title.
- Unique value. It’s distinct enough from the parent category that you’d happily link to it from your main navigation.
Deciding what to do with each facet
- DemandDo people search for this filter or combination?
- DepthEnough products for a useful page, now and later
- ValueClearly different from the parent category
- BuildStatic URL, own copy, internal links
- ControlEverything else gets a rule, not a page
Facets that pass become proper landing pages: a clean, static URL such as /sofas/black-leather/ rather than ?colour=black&material=leather, a unique title and H1, a short introduction written for that selection, a self-referencing canonical, a place in the XML sitemap, and links from the parent category and relevant buying guides. Treat them like any other category page you want to rank.
When you have hundreds of filter values, plotting the candidates helps. Demand and depth do most of the sorting:
Which facets earn a landing page
High demand with thin stock is a merchandising question: grow the range, then build the page. Useful filters that nobody searches for stay as filters for shoppers, without indexable URLs.
Treatments for everything else
Every facet that fails the tests still needs a rule. These are the tools, and their limits:
- Canonical to the parent. Fine for near-duplicates such as sort orders. But
rel="canonical"is a hint, not a directive: Google can choose a different canonical (Search Console reports this as “Duplicate, Google chose different canonical than user”), and it still has to crawl the URL to see the tag. - robots.txt disallow for parameters that create endless combinations: multi-select, price sliders, sort and view options. Unlike canonicals and noindex, it actually stops crawling. But a blocked URL can still be indexed, without its content, if it’s linked, and Google can’t see a canonical or noindex on a URL it isn’t allowed to fetch.
- noindex keeps a page out of the index, but only if Google can crawl the page and see the tag. Never combine it with a robots.txt block on the same URL.
- Don’t expose worthless combinations as links. Google follows
<a>elements with anhref. If a combination shouldn’t be crawled, don’t render it as a crawlable link: apply it with a button or form, or keep the filter state in the URL fragment (after the #), which Google generally ignores.
Facet type and treatment
| Facet type | Treatment | Rule |
|---|---|---|
| Demand, depth and unique value (“black leather sofa”) | Static landing page with its own copy, self-canonical, in the sitemap and linked from the category | Index |
| Useful filter with little search demand (size, in stock) | Keep it for shoppers: noindex, or canonical to the parent when the listing barely changes | Consolidate |
| Sort order, view mode, items per page | Canonical to the default view, or keep the state out of the URL | Consolidate |
| Multi-select, price sliders, stacked filters | Disallow the parameters in robots.txt and don’t render them as crawlable links | Block |
| A combination with no products | Return a 404 at that URL, not an empty page or a redirect | 404 |
Housekeeping that saves crawl
- Empty results return a 404. Google’s guidance on faceted navigation asks for a 404 at the URL itself when a combination has no products, rather than an empty page with a 200 status or a redirect to a generic error page.
- One parameter order.
?colour=black&material=leatherand?material=leather&colour=blackare two different URLs to a crawler. Generate parameters in a fixed order, use the standard&separator, and never repeat a filter. - No URL Parameters tool. Search Console’s URL Parameters tool has been removed, so there’s nowhere to tell Google how to treat parameters. All the control has to live on the site: links, robots.txt, canonicals and status codes.
Then watch the Crawl stats and Page indexing reports, ideally alongside your server logs, to confirm that crawling shifts towards products and the landing pages you chose.
Changing filter URLs on a live store is a migration in miniature: map the old indexed URLs to the new ones with 301 redirects, as you would when redesigning or migrating a website. And because filters are interactions, test them for responsiveness too: a filter click that freezes the grid is a classic case for finding and fixing slow interactions. Our technical SEO and e-commerce SEO work starts with this rule set, and our e-commerce organic revenue playbook shows where it fits.
Filters multiplying faster than your products? Request a free SEO audit and we’ll show you where your crawl is really going.