E-commerce and faceted navigation SEO
Category and product page patterns, controlling faceted URL explosion, pagination and canonical decisions, out-of-stock handling, and product markup that survives a catalogue change.
Category and product pages
| Page | Targets | Must contain |
|---|---|---|
| Category | A commercial head term | Unique copy, sorted and filtered product links, internal links to related categories |
| Subcategory | A more specific commercial term | The same, narrower, plus a link back to the parent |
| Product | Brand plus model, and the product name | Price, availability, specifications, delivery, reviews, images |
| Brand page | Brand plus product type | All products from that brand, plus brand context |
| Guide or buying page | Informational research terms | Comparison, selection advice, links to the products |
<!-- the product page needs the offer, the identifiers and the condition -->
<!-- inside a script element with type application/ld+json -->
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Acme 204 replacement filter pack",
"sku": "FIL-204",
"gtin13": "5012345678900",
"mpn": "FIL-204",
"brand": { "@type": "Brand", "name": "Acme" },
"offers": {
"@type": "Offer",
"url": "https://example.com/p/acme-204-filter-pack",
"priceCurrency": "GBP",
"price": "18.99",
"itemCondition": "https://schema.org/NewCondition",
"availability": "https://schema.org/InStock",
"shippingDetails": { "@type": "OfferShippingDetails", "shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "GBP" } }
}
}Faceted URLs without an explosion
A catalogue with six filters of five options each has more than fifteen thousand combinations. Allowing every combination to be crawled and indexed wastes crawl budget, splits signals across near-identical pages and produces endless duplicate content. The decision to make is which facets deserve their own indexable URL.
| Facet | Index it? | Reason |
|---|---|---|
| Category and subcategory | Yes | Real search demand and a clear shopping intent |
| Brand within a category | Sometimes | Index when the brand plus category is actually searched |
| Colour, size, material | No | Low demand, high combination count |
| Price range | No | Unstable URLs and no stable query demand |
| Sort order | No | Never indexable; canonicalise to the unsorted URL |
| Session or tracking parameters | No | Not content; strip or canonicalise |
Practical implementation
robots.txt disallow the combinatorial space you never want crawled
Disallow: /*?*colour=
Disallow: /*?*size=
Disallow: /*?*sort=
Disallow: /*?*page=*
on indexable filter pages
<link rel="canonical" href="the canonical URL for that facet landing page" />
and keep the facet links crawlable only from that landing page
pagination
self-canonical each page (do not canonical page 2 to page 1)
keep the links crawlable (do not hide them behind a script)
give the sequence a stable order (never randomise)- Canonicalising every filtered page to the unfiltered category removes the filter pages from the index and is often the right call - but be consistent, because mixing canonicals and robots blocks produces contradictory signals.
robots.txtblocks crawling, not indexing. A blocked URL can still be indexed from links, with no content. Combine the block with a canonical or anoindexwhere possible.- Never put
noindexon a page that is also disallowed inrobots.txt- the directive will never be seen.
Stock, variants and closure
| Situation | Page treatment | Markup |
|---|---|---|
| Temporarily out of stock | Keep the URL, show the expected date | OutOfStock |
| Permanently discontinued | Keep the URL, link to replacements | Discontinued, remove the offer |
| Product replaced by a new model | 301 to the new product if it is the same item | New product's markup on the target |
| Variant differs by size or colour | One page with variants where possible | Product plus hasVariant |
| Category emptied | Keep the page with related products | No change |
| Wholesale URL change | 301 the old path to the new | New markup on the target |
- Keep sold-out product URLs alive. They usually have links, reviews and history that a new URL will not rebuild.
- Offer an alternative or a notify-me action on the page rather than letting it become a dead end.
- Only redirect a discontinued product when a true replacement exists. Redirecting to a category page is a soft 404 and loses the accumulated value.
- Remove the offer from the markup when the product cannot be bought, or you are reporting a price that no longer exists.
💡
In e-commerce, revenue came from pages that already rank. Before building the next category, check the products sitting on positions four to ten - a better specification table, real photography and a stock status that is accurate usually beats another twelve new pages.
FAQ
Should paginated pages be canonicalised to page one?
No. Each page has different products, so self-canonical is correct. Canonicalising page two to page one tells an engine to drop those products, and they will not be found through that path.
How do I handle a catalogue of 100,000 products?
Index the pages that have demand and a unique description, and keep the long tail out of the index but reachable through internal search and category browsing. Crawl budget is finite and mostly wasted on near-duplicates.
Related
Structured data and rich results Technical SEO and measuring it
Last refreshed 2026-09-18.