Duplicate content on Shopify: where it comes from and what to do
Shopify generates several near-duplicate URLs by design. Two of them matter, and the rest are usually already handled.
7 min read · SEO ·
Shopify generates several near-duplicate URLs by design. Most are handled correctly by default and cause no problem. Two genuinely matter, and they're the ones nobody looks at.
Worth saying first: duplicate content on your own site is not a penalty. It's a dilution problem — signals split across several URLs instead of accumulating on one — and a crawl budget problem on large catalogues.
1. Products inside collections — usually fine
Shopify serves a product at both /products/handle and /collections/x/products/handle. Themes canonicalise the second to the first, and Shopify's own themes do this correctly.
Check yours does. View source on a product reached from a collection and look at the canonical tag. If it points at the collection-scoped URL, that's a theme bug worth fixing — it's the one item here that a bad theme genuinely gets wrong.
2. Variant URLs — fine by default
/products/handle?variant=123 canonicalises to the base product. Correct, and nothing to do.
3. Filtered collection URLs — this one matters
The real problem. Filters generate parameters, and a catalogue with six filters can produce thousands of thin, near-identical URLs.
Left alone, crawlers waste budget on combinations nobody searches for, and the signals that should accumulate on the collection scatter across them.
The approach:
- The unfiltered collection is canonical. Filtered views point back to it.
- Don't link to filtered URLs from navigation or sitemaps.
- Promote genuine demand into real collections. If people search "oak dining chairs", make it a proper collection with its own title, description and content — not a parameter.
Covered from the merchandising side in collection pages and filtering.
4. Tag pages — this one also matters
Some themes expose tag-filtered collection URLs as browsable pages. That can multiply your indexable pages enormously with content that's a subset of a collection you already have.
Decide deliberately: either a tag view is a real page worth ranking — in which case it should be a collection with content — or it isn't, and it should canonicalise to the parent collection.
5. Pagination — usually fine
Page 2 of a collection is not a duplicate; it's a different set of products. Let it be indexable, make sure each page is reachable, and don't canonicalise page 2 to page 1 — that hides products.
The failure mode is the opposite: infinite scroll with no paginated URLs underneath, where deep products are never discovered at all.
6. International versions — needs hreflang
Multiple language or country versions are legitimate duplicates handled by hreflang. Shopify generates it with Markets — verify it works. Missing or wrong hreflang is the most common technical SEO failure on multi-market stores, and near-identical English-language versions for different countries competing with each other is the usual symptom.
7. Product descriptions copied from a manufacturer
Not a technical duplicate, and the most damaging one. If your description is identical to fifty other retailers', search engines choose between fifty identical pages and rarely choose you.
The fix is writing, not configuration — product page SEO.
8. Two stores with the same catalogue
If you run separate stores for different countries with near-identical English content, they compete with each other. Either differentiate them properly or consider whether one store with Markets was the right answer.
What to actually check
A twenty-minute audit:
- Canonical on a product reached from a collection — should be
/products/handle. - Canonical on a filtered collection URL — should be the unfiltered collection.
- Whether tag URLs are indexable, and whether you want them to be.
- Hreflang, if you're multi-market.
- How many URLs Search Console reports as indexed versus how many products and collections you have. A large gap means something is generating pages you didn't intend.
Point five is the fastest diagnostic and it takes two minutes — part of a technical SEO audit.
Shopify's defaults handle most of this. The two that bite are filtered URLs on a large catalogue and descriptions copied from a supplier — one technical, one editorial, and the editorial one costs more.
Is this the problem you’re looking at?
Send me the link to your store and a line about what is going wrong. You get a straight answer within one business day — no pitch, no obligation.
[email protected]Or see what I do around Shopify: services, work beyond the theme, selected work.