Skip to main content
Variants — size, colour, material — are where Shopify SEO most often goes quietly wrong. The same product appears at multiple URLs with near-identical content, or variants are invisible because they exist only behind a picker.

When a variant deserves its own URL

Give a variant its own indexable URL when people search for it specifically and it has distinguishing content. The test: would this variant page have anything unique to say? If not, it is a duplicate, and duplicates dilute rather than add.

Shopify’s variant URLs

Shopify exposes variants as query parameters:
By default these are canonicalised to the parent product URL. That is usually correct — but it also means variant pages are not independently indexable, so a variant people search for specifically will not have its own page. Where a variant genuinely warrants targeting, the usual approach is a separate product with a canonical relationship managed deliberately, not a parameter.

Marking up variants

Where a page presents several variants at different prices, do not mark up a single arbitrary price. Options: Use AggregateOffer for a price range:
Or use ProductGroup with hasVariant entries, which describes the relationship explicitly and is preferred where variants have distinct GTINs and prices. The rule that matters: markup must match what the page displays. Marking up the lowest variant price while the page shows the highest is a violation.

Avoiding variant duplicate content

  • Ensure canonicals point to the intended URL, consistently
  • Do not generate a separate indexable page per size
  • Do not let variant parameters accumulate crawlable combinations — see faceted navigation
  • Check Search Console for “Duplicate, Google chose different canonical”

Out-of-stock variants

An out-of-stock variant should not make the whole product look unavailable. Mark availability at the level it actually applies, and keep the product page live while any variant is purchasable.