Ecommerce SEO
Faceted navigation — the filter sidebar every store needs — is simultaneously ecommerce UX's best feature and technical SEO's biggest catastrophe generator: every filter combination mints a URL, combinations multiply combinatorially, and an unmanaged facet system can turn a 2,000-product store into a ten-million-URL crawl swamp of near-duplicates. It's the problem the crawl-budget literature was written about. The fix is a policy, applied in layers — here it is.
First: classify your facets by search demand
The policy starts from one question per facet: does anyone search this filtered view as a query? Run the attribute × category check from the research method: "waterproof hiking boots" has real demand (facet worth indexing as a page); "hiking boots under $80 in size 11, blue" has none (facet worth hiding completely). Three buckets result: index-worthy combinations (single high-demand attribute + category, typically), crawlable-but-canonicalised (useful to users, no distinct demand), and blocked entirely (multi-facet stacks, sorts, price sliders, session junk).
The layered controls, matched to bucket
- Blocked tier — robots.txt patterns: disallow the parameter patterns that mint infinite space (Disallow: /*?*sort=, multi-facet separators, price ranges). This is the bleeding stopped: crawlers never fetch the swamp. Corollary: never internally link what you block — filter UI should apply facets via parameters you've blocked or via JavaScript state, not crawlable href-chains into the void.
- Canonicalised tier — rel=canonical to the base category: single-facet views users share and revisit stay reachable, consolidating signals upward. Remember the mechanics: canonicals require crawling to be seen, so this tier stays unblocked — the classic self-defeating combo is blocking canonicalised URLs, per the robots guide's warning.
- Index-worthy tier — promote to real pages: the demand-validated combinations become proper subcategory pages: clean static URLs (/hiking-boots/waterproof/ not ?filter=waterproof), self-canonical, unique title/intro content, linked from the parent's nav — a page, not a parameter. This tier is where facet management turns from defence into offence: each promotion is a new ranking surface competitors' unmanaged facets can't match.
- Pagination within it all: handled per the pagination rules — facets and pagination interact multiplicatively, so page-2+ of filtered views inherits the filter's tier treatment.
Verifying it works
Three instruments, quarterly per the store audit: Search Console's page-indexing report (parameter URLs in "indexed" = leaks; the excluded-by-canonical counts should carry the tier-two load), crawl stats / log analysis at scale (what share of Googlebot hits land on parameters — the log-file join is this problem's native instrument), and a crawler run configured to follow parameters, diffed against policy. The success state: crawl activity concentrated on categories, promoted facets and products — the pages that pay — with the swamp dark.
Frequently asked questions
We already have millions of parameter URLs indexed. How do we unwind?
In order: canonicalise/noindex the indexed junk first (it must be crawlable to process out — blocking first freezes it in the index), let the index drain over weeks-to-months, then apply the robots blocks to prevent regeneration. Patience over force: the drain is recrawl-paced, and Search Console's counts are the progress bar.
Do noindex tags work instead of canonicals for facet views?
They exclude rather than consolidate — right for views that are genuinely junk-but-reachable, wrong for filtered views whose signals should flow to the category (noindex throws that value away, per the decision grid). Most stores want canonical for tier two; noindex is the narrow tool.
Which facets most commonly deserve promotion to real pages?
The pattern across audits: brand-within-category ("[brand] running shoes"), one dominant spec (material, waterproofing, size-class like "petite/big-and-tall"), and use-case facets ("for beginners", "for travel") — each validated by demand, not guessed. Every promotion then competes like any page: content, routing, and the authority story behind the domain (we write that part).