Faceted navigation is the single biggest source of "quietly broken" ecommerce SEO at scale. Every filter combination spins up a near-duplicate URL. Multiply by color × size × material × price and you can have a 200-product store generating 40,000 crawlable pages — most of them thin, identical and competing with your real collection pages.

Why this matters on Shopify specifically

Shopify implements filters through query parameters on collection URLs (e.g. ?filter.v.option.color=red). Without intervention, these are crawlable and can be indexed. Google's crawl budget is finite — every junk URL it crawls is one of your money pages it didn't.

Step 1 — Decide which facets actually deserve to rank

Start with intent. A facet should only be indexable if there is real, recurring search demand for it AND the resulting page has unique, valuable content.

  • Index: facets matching commercial intent (e.g. "men's leather jackets", "stainless steel cookware") with their own keyword and unique copy.
  • Canonicalize: facets that don't have unique demand but are useful for shoppers (e.g. "color: red") — point them at the parent collection.
  • Block / noindex: combinations no one searches for (e.g. "price 47–52, size XS, in stock"). These should be uncrawlable.

Step 2 — Build canonical rules

On Shopify, the cleanest pattern is: filtered collection pages set rel="canonical" back to the unfiltered collection unless they are explicitly part of your indexable-facet list. This is theme-level work; most stock themes don't do it correctly out of the box.

Step 3 — Make your indexable facets real pages

A facet you want to rank should not just be a filter — it should be a curated collection page with its own title, meta, intro copy and ideally its own URL slug (Shopify supports manual collections that target the same product set). This turns "color: red" filter noise into a real ranking page for "red [product]".

Step 4 — Control what gets crawled

Use robots.txt rules to disallow obvious junk filter combinations, and avoid linking to them internally. Internal links signal importance — if your site links to ?filter.size=XS&color=red&price=47-52 from every category page, expect Google to crawl it.

Step 5 — Pagination & sort parameters

Sort parameters (?sort_by=price-ascending) should always be canonical to the default. Pagination should expose page=2+ with proper self-referencing canonicals so deeper pages can be crawled but the first page wins the rank.

Common mistakes to avoid

  • Noindex'ing all filtered URLs blindly — you can lose facets that have real search demand.
  • Letting JavaScript handle filtering without updating URLs or canonicals.
  • Internal-linking to every filter from category pages "because UX".
  • Ignoring the problem until the index has 30,000+ thin pages.

The practical 1-week win

If you're starting today, ship these three things this week:

  1. List your top 10 indexable-facet candidates by search demand.
  2. Add canonical-to-parent rules for every other filtered URL.
  3. Pull internal links to non-indexable filter combinations off your category and product templates.

That alone usually cuts crawl waste 50%+ within a month. The deeper work — turning indexable facets into proper landing pages and growing their authority — is what our Technical Ecommerce SEO and Category & Product Page SEO services are built for.

← Back to all articles