Faceted navigation and parameter URLs: which filter pages to index
Faceted navigation is great for shoppers and dangerous for crawling. Decide which filter combinations match real searches, give those clean indexable URLs, and keep the rest out of the crawl.

Faceted navigation lets shoppers narrow a category by attributes: size, colour, brand, price, material, rating. Each click usually adds a parameter to the URL. That is wonderful for users and, left unmanaged, one of the fastest ways to generate millions of near-duplicate pages. A store with 300 categories and a dozen filters each can expose more crawlable URLs than the rest of the web pays attention to, and search engines spend their time on ?colour=blue&size=9&sort=newest&page=3 instead of your new products.
The fix is not "block all filters" or "index all filters". It is deciding, combination by combination, which ones deserve to exist as landing pages.
Why facets explode
The arithmetic is brutal. Take a hypothetical shoe store category with these facets:
| Facet | Values |
|---|---|
| Brand | 25 |
| Size | 18 |
| Colour | 14 |
| Width | 3 |
| Price band | 5 |
| Sort order | 6 |
With single-select facets, that is 25 × 18 × 14 × 3 × 5 × 6, or well over two million combinations for one category, before multi-select and pagination. If parameters can appear in any order (?size=9&colour=red and ?colour=red&size=9), double it again. Almost none of these pages has a search audience, and most of them show the same twenty products in a slightly different order.
Step 1: find the facets people actually search for
Some filter combinations match real queries. "Wide fit running shoes", "red leather sofa", "women's waterproof hiking boots" are all searches with clear commercial intent, and a filtered page is exactly the right answer. Others are pure navigation: nobody searches for "running shoes sorted by newest under $80 size 9".
Build a short list with three sources:
- Keyword research on category + attribute patterns. Look for modifiers that appear repeatedly across categories: colour, material, gender, use case, brand.
- Your internal site search logs. What people type into your search box is a direct list of the combinations they want.
- Search Console queries for existing category pages. Queries containing an attribute the page does not target are candidates for a dedicated facet page.
As a rough rule, a facet combination deserves an indexable page if it has meaningful search demand, shows a materially different set of products, and has enough products (say, at least five or six) to be a useful page.
Step 2: sort every facet into one of three buckets
| Bucket | Examples | Treatment |
|---|---|---|
| Index | Brand, primary colour, material, gender, key use case — usually one facet at a time, occasionally two | Clean static-looking URL, self-referencing canonical, unique title and H1, listed in the XML sitemap, linked from the category |
| Crawl but do not index | Rare combinations that users share or bookmark | Canonical to the nearest indexable parent, or noindex,follow. Use sparingly |
| Do not crawl | Sort order, view mode, price sliders, size, stock filters, any combination of three or more facets | Disallow the parameter pattern in robots.txt, avoid crawlable links to it, or apply filters without changing the URL |
Size is a good example of a filter that feels important but rarely deserves indexing. People do search "size 13 shoes", but stock per size changes daily, so the page constantly empties and refills. For most stores it belongs in the "do not crawl" bucket.

Step 3: build the URLs properly
Indexable facet pages should look and behave like normal category pages.
- Use a fixed, readable path or a fixed parameter order.
/hiking-boots/waterproof/or/hiking-boots?feature=waterproofare both fine; what matters is that one combination always produces exactly one URL. Normalise parameter order on the server and redirect variants. - Write a unique title, H1 and short intro for each indexable facet page. "Waterproof Hiking Boots" with two sentences on what makes a boot waterproof is enough to make it a real page rather than a filtered list.
- Link to them with plain
<a href>links from the parent category, so crawlers can find them. Facets you want crawled must not depend on a click handler. - Keep the canonical self-referencing. A common error is canonicalising every filtered page to the unfiltered category, including the ones you want to rank. See the canonical tags guide for the general rules.
For the non-indexable facets, the strongest approach is to never generate crawlable links to them. Render those filters as checkboxes or buttons that update the product list with JavaScript, and either do not change the URL or change it only in the fragment (#) part, which crawlers ignore. Users can still filter; crawlers never see the combinations.
Step 4: block the patterns you cannot avoid
Real sites have legacy links, marketing parameters and third-party widgets that will generate filter URLs anyway. A robots.txt block on the patterns is the safety net:
User-agent: *
Disallow: /*?*sort=
Disallow: /*?*view=
Disallow: /*?*price_min=
Disallow: /*?*size=
Two cautions. First, a disallowed URL can still be indexed if many links point to it, showing a bare URL with no description. That is rare for filter URLs and usually acceptable. Second, test every pattern against your indexable facet URLs before deploying. A rule like Disallow: /*? blocks every parameter URL, including the facet pages you just built if they use parameters. The robots.txt mistakes guide lists the patterns that most often over-match.
Search Console's old URL Parameters tool, which let you tell Google how to treat each parameter, was retired in 2022. Robots.txt, canonicals and your own link structure are the remaining levers.
Pagination inside facets
An indexable facet page with 140 products will paginate. Treat its pages the same way as category pagination: each page self-canonical, plain links between pages, and no canonical from page 2 back to page 1. The pagination guide covers this in detail. Non-indexable facet combinations should not have crawlable pagination at all.
Mistakes that keep coming back
- Indexable pages that go empty. A facet page for "orange trail shoes" with one product in spring and none in autumn becomes a soft 404 half the year. Either set a minimum product count below which the page is noindexed and dropped from the sitemap, or only index facets whose inventory is stable.
- Facet links in the main navigation. A mega-menu that links to "Red", "Blue" and "Green" under every category sends every crawler into colour combinations from every page of the site. Navigation should link to indexable facet pages only.
- Multi-select creating unbounded stacks. Letting users pick several brands at once is great for shoppers; letting each selection add a crawlable link is not. If multi-select exists, make the second and later selections script-only.
- Tracking parameters mixed into facet URLs. Campaign tags such as
utm_sourceshould never appear in internal links. When they do, every internal click creates a new URL variant. Keep them for external links only and canonicalise them away. - Different templates for the same facet. A brand filter inside a category and a separate brand landing page can target the same query with nearly identical product lists. Choose one and redirect or canonicalise the other, or you end up with cannibalisation between your own pages.
- Forgetting other search engines and AI crawlers. Bing, and the crawlers behind AI assistants, follow the same links and often obey robots.txt more literally than Google. A filter maze wastes their requests too, and a few of them crawl far less patiently than Googlebot.
Checking the result
- Crawl the site from the home page with a desktop crawler and count URLs containing each filter parameter. Facets in the "do not crawl" bucket should be close to zero.
- In Search Console's Page indexing report, inspect samples from "Alternate page with proper canonical tag" and "Duplicate without user-selected canonical". Large numbers of facet URLs there mean crawlers are still finding them.
- In server logs, measure the share of Googlebot requests going to parameter URLs before and after. This is the number that shows whether the change worked; the log analysis guide shows how.
- Check that each indexable facet page appears in the sitemap, returns 200, has a self canonical and a unique title. Running the SEO checker on a handful of them catches canonical and title problems quickly.
Expect the crawl share to shift over several weeks, not days. Search engines keep revisiting URLs they already know about for a while, even after links to them disappear.
Questions
Should I canonicalise all filter pages to the main category?
Only for filters nobody searches for. If people search for "waterproof hiking boots" and you have a filter for it, canonicalising that page to "hiking boots" throws away a page that could rank. Canonicals also do not stop crawling, so they do not solve the URL explosion on their own.
Is it better to use robots.txt or noindex for filter URLs?
For combinations that should never be crawled, such as sort orders, price sliders and multi-select stacks, robots.txt prevents the crawl. noindex still requires every URL to be fetched. Many sites use both: robots.txt for patterns, noindex for a few edge cases that must stay crawlable.
Do AJAX filters that do not change the URL avoid the problem?
They avoid the crawl explosion, but they also make it impossible to index any filtered view. The usual best practice is a hybrid: crawlable links for the handful of valuable facets and script-driven filtering without new URLs for the rest.
Keep reading

Crawl budget: when it matters and how to stop wasting it
Crawl budget is a real constraint for large or fast-changing sites and a distraction for almost everyone else. Here is how to tell which gr…

E-commerce category pages that rank
For most online shops, category pages bring more search revenue than product pages. They rank when they match the query's intent, show a st…

Canonical tags: how to set them and the mistakes that cost rankings
One correct line in the head consolidates duplicate URLs; one wrong line can deindex a whole section. The rules, the classic mistakes, and…