Overview

A product URL has a lifecycle: it launches, goes in and out of stock, sprouts variants, and eventually gets discontinued. Each stage is a chance to lose the ranking the page has built, either by removing a URL that should have stayed or by splitting one product across many near-duplicate URLs. This page covers the two decisions that most often go wrong: what status code a product URL returns as availability changes, and how variants share one canonical URL. For product schema, reviews, facets, and category pages, see ecommerce-seo.

Keep the page on temporary out-of-stock; return 410 only for permanently gone

Out-of-stock handling is a frequent e-commerce SEO mistake. The right answer depends on whether the product comes back.

  • Temporary out-of-stock: keep the URL, set availability: "OutOfStock" in the Offer, and surface a “notify me” form on the page. The ranking and the indexed page persist; conversion resumes on restock.
  • Discontinued, no replacement: return 410 (Gone) or 404. Google treats both as removal signals and drops the URL as it recrawls; 410 states the intent more explicitly.
  • Discontinued, has a replacement product: 301 to the replacement. Signal transfers; the old URL retires.
  • Discontinued with no replacement but inbound links worth keeping: 301 to the parent category. Less ideal than a replacement but better than a 410 if the equity matters.

See redirects for the status-code reference.

Variants live on one canonical URL with options, not separate URLs

Color, size, and material variants are options on a single canonical product page. Splitting each variant onto its own URL forces a canonical war that the crawler resolves badly.

  • One structured data block per canonical page. Google’s product variant markup uses a ProductGroup whose hasVariant lists each variant Product; see schema-markup-deep.
  • The canonical URL is the parent product. Variant query strings (?color=black) point at the canonical via <link rel="canonical">.
  • Indexable variants only when the variant is a distinct purchase decision with distinct demand (one-off colorways with their own marketing, for example).
  • Schema’s Offer array lists each in-stock variant with its own price and SKU; the canonical absorbs the ranking signal.

This pattern keeps the ranking weight on one URL and lets the page rank for the broad query and the variant-specific query at once.