Overview

E-commerce SEO has three page types (product, category, search), each with its own schema, intent, and crawl rules. Two failures recur: faceted-navigation crawl traps that burn crawl budget, and variant or out-of-stock handling that splits or destroys a product’s ranking URL.

Emit one Product JSON-LD block per product page

Google’s product snippet requires name plus at least one of offers, review, or aggregateRating. Drop offers and the price annotation goes; drop ratings and the stars go. brand, sku, and identifiers such as gtin are recommended and help merchant listings. Field-level examples are in schema-markup-deep.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Acme Trail Runner 3",
  "sku": "TR3-BLK-10",
  "brand": { "@type": "Brand", "name": "Acme" },
  "image": ["https://example.com/img/tr3-black.jpg"],
  "offers": {
    "@type": "Offer",
    "price": "129.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/products/trail-runner-3"
  }
}

Mark up only real reviews

Mark up reviews only if real customers wrote them and the page shows them.

  • Use Review entries with an author Person, reviewBody, and datePublished.
  • Keep aggregateRating consistent with the reviews shown; do not pad the count or score.
  • Never reuse a generic “5 stars, great product” snippet across a catalog. That is fabricated review content and invites a manual action.

Keep the product URL while out of stock; retire it by case

Return the right status for the product’s actual state.

  • Temporary out-of-stock: keep the URL indexable, set availability to OutOfStock, and add a notify-me form. Setting noindex drops the page and forces a recrawl after restock.
  • Discontinued with a replacement: 301 to the replacement.
  • Discontinued with no replacement: return 404 or 410. Google treats all 4xx the same and removes the URL as it recrawls. Redirect to the parent category only when it is a close match, since irrelevant redirects can read as soft 404s.

Put variants on one canonical URL

Color, size, and material are options on one product page, not separate pages.

  • Use ProductGroup with hasVariant for variants. Google requires only name on the group and recommends productGroupID, variesBy, and hasVariant.
  • On a single-page product, canonicalize to the URL without variant selectors (/coat, not /coat?size=small&color=green), while keeping each variant preselectable through a distinct query-parameter URL so Google can read its price and availability.
  • Index a variant separately only when it is a distinct purchase decision with its own demand.

Control faceted navigation at the crawl layer

Facets multiply URLs (brand x color x size x price), and most combinations have no search demand. Google’s faceted-navigation guidance lists these options in order:

  1. robots.txt Disallow for facet URL patterns. Google calls this the most effective, because crawling filtered items rarely pays off.
  2. URL fragments (#) for filters, which Google does not crawl.
  3. rel="canonical" to the unfiltered page. It reduces crawling over time but is less effective than the first two.
  4. rel="nofollow" on every internal link to the filter URL.

Return 404 for combinations that do not exist, and keep filter order consistent. noindex,follow controls indexing but not crawling, since Google must fetch a page to read the tag. Do not combine Disallow and noindex on the same URL: the block hides the tag. Index only facets with proven query demand (size-12-trail-runners, not size-12-trail-runners-blue-129-to-149-usd). Google’s URL Parameters tool was retired in 2022, so handle parameters on the site. Details are in pagination-and-facets.

Serve both intents on category pages

Category pages compete for informational (“best trail runners”) and transactional (“buy trail runners”) queries.

  • Put the product grid first and a short buying guide, comparison, or sizing note below it.
  • Use one H1 matching the category name and H2s for the editorial sections.
  • Link category to subcategories, and each subcategory to its products; if a category lacks direct links to all products, Googlebot may not find them by crawling. See internal-linking.

Avoid these e-commerce errors

  • Variant URL explosion with no canonical, which splits ranking across dozens of URLs.
  • A 404 on every discontinued product when a replacement exists.
  • aggregateRating with no reviews visible on the page.
  • Crawlable facet combinations with no query demand.
  • A category page that is only a product grid.