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

PageTargetsMust contain
CategoryA commercial head termUnique copy, sorted and filtered product links, internal links to related categories
SubcategoryA more specific commercial termThe same, narrower, plus a link back to the parent
ProductBrand plus model, and the product namePrice, availability, specifications, delivery, reviews, images
Brand pageBrand plus product typeAll products from that brand, plus brand context
Guide or buying pageInformational research termsComparison, 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.

FacetIndex it?Reason
Category and subcategoryYesReal search demand and a clear shopping intent
Brand within a categorySometimesIndex when the brand plus category is actually searched
Colour, size, materialNoLow demand, high combination count
Price rangeNoUnstable URLs and no stable query demand
Sort orderNoNever indexable; canonicalise to the unsorted URL
Session or tracking parametersNoNot 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.txt blocks crawling, not indexing. A blocked URL can still be indexed from links, with no content. Combine the block with a canonical or a noindex where possible.
  • Never put noindex on a page that is also disallowed in robots.txt - the directive will never be seen.

Stock, variants and closure

SituationPage treatmentMarkup
Temporarily out of stockKeep the URL, show the expected dateOutOfStock
Permanently discontinuedKeep the URL, link to replacementsDiscontinued, remove the offer
Product replaced by a new model301 to the new product if it is the same itemNew product's markup on the target
Variant differs by size or colourOne page with variants where possibleProduct plus hasVariant
Category emptiedKeep the page with related productsNo change
Wholesale URL change301 the old path to the newNew markup on the target
  1. Keep sold-out product URLs alive. They usually have links, reviews and history that a new URL will not rebuild.
  2. Offer an alternative or a notify-me action on the page rather than letting it become a dead end.
  3. Only redirect a discontinued product when a true replacement exists. Redirecting to a category page is a soft 404 and loses the accumulated value.
  4. 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.

Structured data and rich results Technical SEO and measuring it

Last refreshed 2026-09-18.