A product variant is one specific version of a product that differs from the others only by an option such as size, colour, material or capacity. A T-shirt in navy, size medium, is one variant of that T-shirt. Each variant usually has its own SKU, its own stock level, and sometimes its own price, image and barcode.
How product variants work
Ecommerce platforms store a parent product, which holds the shared title, description and most images, and a set of variants that hold option values and the details that differ. Shopify calls them variants and options; WooCommerce uses variable products with attributes. On the product page, the shopper picks options from selectors, and the page should update the price, image and stock message to match.
There are two common URL patterns. Either all variants share one URL, with a parameter such as ?variant= that changes which option is selected, or each variant has its own URL. Which suits you depends on whether people search for the variant itself.
Other systems need to know the variants belong together. In a product feed, each variant is a separate item with its own ID, price and availability, linked to its siblings by a shared item_group_id and described with attributes such as colour and size. For clothing and shoes sold in the UK, the size system should be set to UK so shoppers see sizes they recognise. In structured data, Google supports describing a product group and its variants, and in GA4 the item_variant parameter records which option was viewed or bought.
Why it matters
Handled badly, variants create search problems. A shop that publishes every size and colour as its own indexable page, each with the same description, produces dozens of near-identical pages that compete with each other and dilute signals. That is a common source of duplicate content on ecommerce sites, and the usual fix is a canonical tag pointing variant URLs to the main product page.
Some variants, though, are searched for in their own right. Furniture shoppers search “green velvet sofa” and “grey velvet sofa” separately, and a page for each colour can earn its place if it has its own images and copy. The decision should follow how people search, not how the platform happens to store the data.
Shopping ads add another layer. If the feed sends the navy variant at £25 but the link opens the page showing the black variant at £28, Merchant Center sees a price mismatch and may disapprove the item.
Common mistakes
- Every size and colour indexable on its own URL with identical copy and no canonical.
- Variant links in the feed that open the default variant rather than the one advertised.
- Missing item_group_id, so Google treats variants as unrelated products.
- Images that do not change when a colour is selected.
- Out-of-stock variants that can still be selected, with the problem revealed only at the basket.
- Variant options generated by filters creating crawlable URLs, which overlaps with faceted navigation.
How to act on it
Decide, product type by product type, which variants deserve their own page. Check search demand for colour or material versions; sizes almost never need separate pages. For variants that share a page, make sure the URL parameter version carries a canonical to the main URL, and that the page updates price, image and stock when an option is chosen.
Then check the feed: each variant listed separately, linked by item_group_id, with a link that opens that exact variant selected. Show unavailable options as greyed out with a back-in-stock option rather than hiding them.
Variant URLs, canonicals and crawl control are core technical SEO work, which is where I sort them out on online shops.
