Technical SEO for Ecommerce: Faceted Nav, Pagination & Duplicate URLs

Technical SEO for Ecommerce: Faceted Nav, Pagination & Duplicate URLs


Faceted navigation, pagination and parameter URLs quietly waste crawl budget on ecommerce sites. Here’s how to keep large catalogs crawlable and indexable.

Ecommerce sites have technical SEO problems that don’t exist on smaller, simpler sites. A catalogue with 5,000 products and a filtering system that generates parameters for size, colour, and price can produce tens of thousands of unique URLs overnight — most of them duplicates, thin variations, or pages that should never be indexed. Google’s crawler has a finite budget for each site; if it’s spending that budget on filter combinations nobody searches for, the category and product pages that actually earn revenue don’t get crawled efficiently.

This playbook covers the three areas that cause the most crawl and indexation problems on ecommerce sites: faceted navigation, pagination, and duplicate product URLs.

The Short Version

  • Faceted navigation can multiply a catalog’s crawlable URLs by 50-100x — canonicalize or noindex filter combinations that have no search demand.
  • Never canonicalize every paginated page back to page 1 — that removes page 2+ products from the index entirely.
  • Product variants need a decision, not a default: canonicalize variants with no distinct search demand, index the ones searchers actually look for by name.
  • Crawl budget only matters once a site passes roughly 10,000 indexable URLs — below that, Google typically crawls everything regardless.

Faceted navigation: the biggest crawl budget drain

Faceted navigation — the filter system that lets shoppers sort by size, colour, brand, price range — is essential for usability. For SEO, it’s a significant risk unless it’s handled correctly. Each filter combination generates a URL. A category with 10 size options, 8 colours, and 5 brands can produce over 400 unique filter-combination URLs from a single category page. Multiplied across hundreds of categories, this can generate hundreds of thousands of indexable URLs, almost none of which searchers look for directly.

The standard approaches to managing this, in order of how aggressively they restrict crawling:

ApproachWhat it doesBest for
Canonical to base categoryConsolidates ranking signals from filter URLs to the unfiltered category page; filter URL stays crawlableFilter combinations with no independent search demand
Noindex the combinationRemoves the page from the index entirely while leaving it crawlableThin or near-duplicate filter pages you never want to surface in search
Disallow in robots.txtBlocks crawling outright, saving crawl budget but losing any consolidation of signalSession IDs, tracking parameters, sort options — never worth crawling
Index as its own pageTreats the filter combination as a real landing page with unique contentFacets with validated search demand (e.g., “blue resistance bands”)

Pagination: making multi-page catalogs work

Category pages with more products than fit on one page create a pagination chain — page 1, page 2, page 3. The SEO question is which of these pages should be indexed, and how they should signal their relationship to each other.

Google deprecated the rel=”next”/rel=”prev” link hints in 2019. The current best practice is simpler: ensure every paginated page is crawlable and indexable, and let Google figure out the relationship through internal links and the sitemap. Each paginated page should have its own unique title tag that differentiates it (e.g., “Trail Running Shoes — Page 2 | Brand”). Avoid canonicalising all paginated pages to page 1 — this tells Google page 1 is the only version worth indexing, which removes all subsequent pages from the index and makes it harder for Google to discover products listed only on later pages.

Infinite scroll presents a specific problem: content loaded dynamically via JavaScript may not be crawled by Google even if it’s visible to users. If products below the fold are rendered via JavaScript, Google needs to be able to render the JavaScript to see them — and this isn’t guaranteed. Providing paginated fallback URLs remains good practice for large catalogues with infinite scroll implementations.


Duplicate product URLs: variants and platform defaults

Product variants — different sizes, colours, and configurations of the same base product — often generate separate URLs. A running shoe available in 6 colours creates 6 product pages, each with near-identical content. Without canonical tags, Google sees six versions of the same page and has to guess which one to index and rank.

The solution depends on how distinct the variants are:

  • Variants with no distinct search demand (e.g., size variants): canonical all to the main product URL. Shoppers don’t search for “Nike Pegasus size 10” — they search for the product name and select size on the page.
  • Variants with distinct search demand (e.g., colour variants where searchers look for “blue resistance bands” specifically): treat each colour variant as a separate indexable page with unique content, title, and description.

Platform-specific duplicate issues: Shopify creates both /products/slug and /collections/collection-name/products/slug URLs for every product. Shopify applies canonicals automatically, but verify this is working correctly — the canonical on the collection-path URL should point to the /products/ version. WooCommerce on WordPress can generate similar issues through product taxonomies.

For the full technical SEO audit framework that covers all of these issues and more, see the SEO audit checklist.


How much crawl budget is actually at stake

It’s easy to treat faceted navigation as a theoretical risk. In practice, the multiplication effect is large enough to measure directly in Search Console once you know what to look for.

Typical scale of the problem

50-100x
URL multiplication from facets
A few hundred real category and product pages can generate tens of thousands of crawlable filter-combination URLs.
10,000+
URLs before crawl budget matters
Below this rough threshold, Google typically crawls a site thoroughly regardless of facet sprawl.
2 reports
All you need to diagnose it
Crawl Stats (pages crawled/day) compared against Indexing → Pages (pages actually indexed) reveals the gap.

A worked example: a 6,000-SKU apparel catalog

An apparel retailer with 6,000 products and a typical filter setup (size, colour, fit, price band) had roughly 340 category and product page templates — but Search Console’s Crawl Stats showed Googlebot requesting over 280,000 unique URLs per month, while only 9,200 pages were actually indexed. The gap was almost entirely filter-combination URLs: size and fit facets that nobody searches for, generated dynamically by the storefront’s filter widget and linked directly in the page HTML.

The fix didn’t require touching the storefront’s filtering logic at all. The team added canonical tags pointing every size- and fit-only filter combination back to the base category, kept colour-filtered URLs indexable where keyword data showed real demand, and disallowed sort and session parameters in robots.txt. Within six weeks, Crawl Stats showed Googlebot requests drop to roughly 60,000 URLs per month — and indexed pages for the categories that mattered increased, because crawl budget that had been wasted on filter combinations was now reaching new product pages instead.


Frequently asked questions

Crawl budget matters most for large sites — typically those with more than 10,000 indexable URLs. For smaller ecommerce sites, Google usually crawls everything regardless of faceted navigation. The signal to look for: in Search Console, go to Settings → Crawl Stats and check the average pages crawled per day. If that number is high but the number of indexed pages (Indexing → Pages) is substantially lower, crawl budget is likely being wasted on non-canonical or parameter URLs. Also check the “Not indexed” reasons — “Crawled, currently not indexed” and “Discovered, currently not indexed” both indicate indexation problems that may be crawl-budget related.

Yes — but not long blocks of text at the bottom of the product grid that nobody reads. Useful category page content is above or alongside the product grid: 100–200 words that clarify what the category contains, who it’s for, and what distinguishes it. This helps Google understand the topical relevance of the page and provides searchers with context when they land from a SERP. The template copy that agencies add to every category page (“Shop our range of [category]…”) provides no SEO value and can be a quality signal issue if it’s templated across hundreds of category pages with only the category name swapped out.

Usually through internal links. If the navigation, product filters, or sort buttons generate parameter URLs and those URLs are in the site’s HTML as crawlable links (not JavaScript-only), Googlebot follows them and treats them as distinct pages. External links that include parameter URLs also introduce them. Once parameter URLs are crawled and found to be indexable (no noindex, no canonical pointing elsewhere), Google may index them — particularly if they return 200 status codes with content that differs from the base URL. The fix is always at the root: prevent the parameters from being crawlable or mark them as non-canonical before they accumulate in the index.

Yes — Product schema on product pages enables rich results that display price, availability, and review ratings directly in the SERP, significantly improving CTR. ItemList schema on category pages can also earn enhanced display. The practical impact: a product page with rich results showing a 4.8-star rating and “In stock — £49” visible in the search snippet will outperform an identical product page without that markup, simply because the snippet is more compelling. WooCommerce and Shopify themes often include basic Product schema by default, but verify it’s correctly implemented — missing required fields (price, availability, currency) prevent the rich results from appearing.

No — if anything it typically helps, because it consolidates ranking signals onto the base category page rather than splitting them across hundreds of near-duplicate variants. The exception is if you noindex a facet combination that genuinely has its own search demand and inbound links; in that case you’ve removed a page that could have ranked on its own. That’s why the recommendation is always to validate facet-level search demand with keyword data first, rather than applying a blanket noindex rule to every filter parameter.

Crawl Stats typically shift within 2–6 weeks as Google re-crawls and adjusts its allocation based on the new canonical and robots signals. Indexation improvements for previously crawl-starved pages can take a bit longer — often 4–8 weeks — since Google needs to both discover and decide to index the freed-up capacity. Ranking improvements, if any, follow after that and depend on the quality of the pages that are now being crawled more frequently, not just the crawl fix itself.


Get the crawlable foundation right first

Technical SEO for ecommerce isn’t glamorous. It’s crawl logs, canonical audits, and parameter reviews — work that happens before any content strategy or link building. But it’s the foundation everything else depends on. A catalogue that Google can’t crawl efficiently won’t rank well regardless of how good the copy is.

If you’re running a large ecommerce catalogue and want to understand where your crawl budget is going and what’s blocking indexation, get in touch or see how we approach ecommerce technical SEO.

Similar Posts