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.
How Google handles pages that are nearly the same
Google's documentation on consolidating duplicate URLs describes the process. It groups near-identical pages, chooses one as the canonical, shows that one, and credits it with the signals from the whole group. It also makes clear that having duplicates carries no penalty. 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 doesn't group them, links and signals split between pages competing for the same search.
You can tell Google which version you want. 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 of them are signals, not commands. If Google judges your choice wrong, it picks a different canonical.
Decide which variants deserve a page
Ask whether anyone searches for the variant by name. "Navy fleece" is a search. "Fleece size medium" almost never is. A colour buyers look for, a material or a capacity can earn its own page. A size, a quantity or a gift-wrap option belongs 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). Google doesn't use fragments when indexing, so every fragment URL counts as the same page. Where an optional query parameter identifies a variant, the documentation recommends the URL without the parameter as the canonical. That tells Google the variants are one product.
Google's product variants structured data documentation describes the two layouts that follow:
- 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 that differ, such as colour and size. - 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 from the second for variants buyers search for by name. Product schema and rich results covers the markup itself.
Make the page agree with its canonical
A canonical claims that two pages are the same thing, and Google checks the claim. Suppose a variant page points its canonical at the parent but carries a different title, heading and text. Google sees two pages that aren't the same and may ignore the tag. So keep canonicalised variants near-identical and let the parent carry the distinct title and description.
Three mistakes undo the tag:
- A variant that should stand alone, like the navy fleece buyers search for, is canonicalised to the parent. The page that could rank for "navy fleece" gets folded into one that can't.
- A page carries both a canonical pointing elsewhere and a
noindex. Those two instructions pull in different directions, so choose one. - The sitemap lists every variant URL, which weakly signals that each is its own canonical, while the pages say otherwise. List only canonicals.
Your platform adds duplicates of its own on top of variants. Products get nested under every collection they belong to, tag pages multiply, and tracking parameters spawn copies. Duplicate URLs and canonicals deals with those.
Near-identical products are a different problem
Some "products" are really variants wearing separate listings: the same phone case listed once per phone model, or 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 the pages then have to genuinely differ. Put the compatibility in the title and the first paragraph, show photos of that model, and add the specifics only that page can have. Template pages that swap one word are the thin variations Google's index drops. You'll see them as "Crawled, currently not indexed", an outcome described in How Google ranks a page.
If buyers don't search by the difference, merge the listings. Use one page, one selector and one canonical, and redirect each old URL to the merged page so the links it earned follow. Filters that spawn their own URLs are a related trap, covered in Faceted navigation and filters.
Frequently asked questions
Is duplicate content bad for SEO?
Not in the sense most people fear. Google's documentation says there's no penalty for having duplicates. The harm is indirect: crawl time spent on copies, the wrong version kept as the canonical, and signals split across pages that compete for the same search.
Why is having duplicate content an issue for SEO?
Google wants one page per piece of content, so it groups copies and picks one to show. If you haven't said which one you prefer, it chooses for you, and it may choose a size-medium URL over your parent page. When copies differ just enough to escape grouping, links and ranking signals split between them.
Does Google punish duplicate content?
No. Google groups the pages, keeps one and credits it with the signals from the whole group. What looks like punishment is usually the wrong page ranking, or thin template pages being dropped from the index because they add nothing the parent doesn't already say.
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. Start with Buying guides that sell.