Faceted navigation lets users filter category pages by attributes, brand, size, color, price, rating. Each filter combination can create a unique URL. On a large site, this can generate millions of URLs, most of which are noise. Handled wrong, it wrecks SEO.
A category with 4 brands × 6 sizes × 8 colors × 5 price ranges = 960 possible filter combinations per category. Across 100 categories, that's 96,000 URLs. Most are duplicates of each other with trivial differences; all get crawled by Google at the expense of important pages.
Decide per filter combination:
If yes to all three: let it be indexed.
If no: noindex it or block it.
Block crawling of specific parameter patterns:
Disallow: /*?sort=
Disallow: /*?view=
Disallow: /*?size=
Pro: simple. Con: Google still sees links to these URLs from internal nav; they might still be indexed if externally linked.
Add <meta name="robots" content="noindex, follow"> to filter-result pages you don't want indexed. Google crawls them, sees noindex, drops from index.
Pro: clean signal. Con: uses crawl budget.
Filter URLs canonical to the unfiltered category. Signals to Google "this is a variation; consolidate to the parent."
Pro: preserves link equity. Con: Google sometimes ignores canonicals it doesn't buy.
Filters update content via JS without changing URL. No crawl issue because no new URLs exist. But: users can't share specific filtered views, and rankings don't attach to specific filter combos.
Often best. Brand + major category filters change URL + are indexable. Size/color/price/sort use JS without URL change.
For each filter on your site:
Common setup: brand filter is indexable (/shoes/nike), size filter isn't (/shoes/nike/size-10 canonical to /shoes/nike).
Be careful that:
/shoes/nike/size-10/trail) canonical correctlyHistorically GSC had a "URL Parameters" tool for telling Google how to treat each parameter. Deprecated in 2022. Google now figures this out from canonical + noindex + internal linking signals.
Only include indexable URLs in your sitemap. Canonical-consolidated + noindexed URLs stay out.