A store sells one fleece in six colours and four sizes. The platform creates a URL for every combination, so Google finds a couple of dozen pages that say the same thing with one word changed, and it has to decide which one to keep. Left to itself it picks, and it may not pick the one you link from your homepage. Variants stay manageable when you decide which pages deserve to exist on their own and point every other URL at its parent.
How Google handles pages that are nearly the same
Google's documentation on consolidating duplicate URLs describes what it does with near-identical pages: it groups them, chooses one as the canonical, shows that one, and credits it with the signals from the whole group. There is no penalty for having duplicates, as that documentation makes clear; the costs are quieter. Crawl time goes to copies instead of new products. The version Google keeps may be the size-medium URL rather than the parent. And when copies differ just enough that Google does not group them, links and signals split between pages competing for the same search.
You can tell Google which version is the canonical. The same documentation ranks the methods: a redirect is the strongest signal, a rel="canonical" link in the page head is also strong, and a sitemap entry is weak. All are signals rather than commands; Google chooses a different canonical when it judges yours wrong.
Decide which variants deserve a page
The question is whether anyone searches for the variant by name. "Navy fleece" is a search; "fleece size medium" almost never is. A colour that buyers search for, a material, a capacity: those can earn a page of their own. A size, a quantity, a gift-wrap option: those belong on the parent page as a selector.
Google's documentation on URL structure for ecommerce sites supplies the plumbing. Identify variants with a path segment (/fleece/navy) or a query parameter (/fleece?colour=navy), never a fragment (/fleece#navy), because Google does not use fragments when indexing and treats every fragment URL as the same page. Where an optional query parameter identifies a variant, it recommends the URL without the parameter as the canonical, which tells Google the variants are one product.
Google's product variants structured data documentation describes the two layouts that follow from this:
- One page per product. Every variant lives on the parent URL, a query parameter preselects each one so Google can still reach it, and the canonical is the parent. The Product markup becomes a ProductGroup with a
hasVariantlist and avariesByproperty naming the attributes (colour, size) that differ. - One page per variant. Each variant has its own URL, its own Product markup and a canonical pointing to itself.
Most stores want the first layout, with deliberate exceptions in the second for the variants buyers search for by name. Product schema and rich results covers the markup itself.
Make the page agree with its canonical
A canonical is a claim that two pages are the same thing, and Google checks the claim. Its documentation says Google selects what it judges the best version, so a variant page that points its canonical at the parent while carrying a different title, heading and text is asking Google to ignore the tag. When variant pages are canonicalised to a parent, keep them near-identical and let the parent carry the distinct title and description.
Three mistakes undo the tag:
- A variant that should stand alone, the navy fleece buyers search for, is canonicalised to the parent, so the page that could rank for "navy fleece" is folded into one that can't.
- A page carries both a canonical pointing elsewhere and a
noindex, two instructions pulling in different directions. Choose one. - The sitemap lists every variant URL, a weak signal that each is its own canonical, while the pages say otherwise. List only canonicals.
Your platform adds its own duplicates on top of variants: product URLs nested under every collection they belong to, tag pages, tracking parameters. Those are the subject of Duplicate URLs and canonicals.
Near-identical products are a different problem
Some "products" are variants wearing separate listings: the same phone case listed once per phone model, the same candle in three scents as three products. If buyers search by the model or the scent, separate pages are the right call, but then the pages must genuinely differ: the compatibility stated in the title and the first paragraph, photos of that model, the specifics only that page can have. Template pages that swap one word are the thin variations Google's index drops, the "Crawled, currently not indexed" outcome described in How Google ranks a page.
If buyers don't search by the difference, merge them: one page, one selector, one canonical, and a redirect from each old URL to the merged page so the links they earned follow. Filters that spawn their own URLs are a related trap, covered in Faceted navigation and filters.
What to take away
- Google groups near-identical pages, keeps one, and credits it with the group's signals; duplicates cost crawl time and control, not a penalty.
- A variant earns its own page only when buyers search for it by name; everything else belongs on the parent as a selector, with the parent as canonical.
- Identify variants with a path or a query parameter, never a fragment, and canonicalise parameter URLs to the base URL, as Google's ecommerce URL guidance recommends.
- A canonical is a claim Google checks, so canonicalised variants must stay near-identical, and the sitemap should list only canonicals.
Next
That closes product pages. The next chapter turns your blog into a source of buyers, starting with Buying guides that sell.