Shopify duplicate content starts with a fact about the platform that surprises people: every product on your store has at least two working URLs. There is /products/handle, and there is /collections/some-collection/products/handle, one for every collection the product sits in. Both return 200. Neither redirects to the other.
I checked this again while writing, on a live Shopify store picked at random on 4 September 2026. The product URL and the collection-scoped URL both returned 200, and both carried the same canonical tag pointing at the short /products/ version. That is Shopify’s default behaviour working exactly as designed, and it is why most stores never think about this. It is also why the ones that do have a problem cannot see where it came from.
Does Shopify create duplicate content automatically?
It creates duplicate URLs automatically, which is not the same thing. The stock theme then declares a canonical to consolidate them.
Shopify’s Dawn theme, which is the default, emits the canonical on line 8 of layout/theme.liquid:
<link rel="canonical" href="{{ canonical_url }}">
Worth correcting something the top results still repeat. A lot of Shopify SEO writing blames the within filter, which generates collection-scoped product links, and tells you to strip it from your theme. I checked the current Dawn source on 4 September 2026 and there is no use of within in it at all. snippets/card-product.liquid links to products with a plain card_product.url. If your theme is generating collection-scoped links, that is your theme or an app doing it, not stock Dawn, and the fix is in the thing that generates them rather than in a file that no longer contains the problem.
Why does Google index my /collections/ product URL instead of /products/?
Because your canonical tag is a strong signal and not an instruction, and it can be outvoted.
Google’s canonicalization documentation ranks the signals it uses, “in order of how strongly they can influence canonicalization”. Redirects come first: “A strong signal that the target of the redirect should become canonical.” Then the tag: “A strong signal that the specified URL should become canonical.” Then, much weaker, “Sitemap inclusion: A weak signal that helps the URLs that are included in a sitemap become canonical.” Google adds that “these methods can stack and thus become more effective when combined.”
Stacking is the whole story on Shopify. Your theme declares the short URL. If every internal link on the store also points at the short URL, the signals agree and Google follows them. If your related-products slider, your recently-viewed widget, your review app, your Search and Discovery filter links and your email templates all point at collection-scoped URLs, you have thousands of internal links arguing against one tag on each page. Google weighs both.
Is “Alternate page with proper canonical tag” a problem on Shopify?
No, and this is the single most common false alarm I get asked about on Shopify stores.
Google’s wording for that status ends with: “This page correctly points to the canonical page, which is indexed, so there is nothing you need to do.” On a Shopify store with collections, that bucket filling up is the system working. Your collection-scoped URLs are being found, they are declaring the product URL, and Google is honouring it. Leave it alone. Alternate page with proper canonical tag has the longer explanation.
The status to actually read is the other one. Google defines it as: “Duplicate, Google chose different canonical than user. This page is marked as canonical for a set of pages, but Google thinks another URL makes a better canonical. Google has indexed the page that we consider canonical rather than this one.”
If that shows up on your /products/ URLs, Google has looked at your store and picked the collection-scoped version over the one you declared. That is the alarm, and it means the ranking URL is now one that only exists in the context of one collection. Duplicate, Google chose a different canonical covers the general case.
How do I check which URL Google picked?
URL Inspection, and specifically two fields next to each other. Inspect a product URL and compare User-declared canonical, which is what your theme said, against Google-selected canonical, which is what Google did. When those two agree, you have nothing to fix regardless of what the report totals look like. When they differ on a Shopify product URL, you have found the actual problem, and the report row is only the symptom.
Do it on a sample rather than the whole catalogue: five products from different collections tells you within minutes whether this is a store-wide pattern or three odd URLs.
Where it still breaks on a modern store
Stock Dawn is clean, so when a store does have this problem it comes from somewhere else. In audits it is almost always one of these.
Apps that link collection-scoped. Related products, recently viewed, upsell sliders and review widgets frequently build their links with the collection in the path. They are on every product page, so they generate the largest volume of internal links on the store, all voting for the wrong URL.
A second canonical tag. Some SEO apps inject their own <link rel="canonical"> without removing the theme’s. Two canonical tags on one page is not a stronger signal, it is a contradictory one, and Google’s guidance is explicit that you should not “specify different URLs as canonical for the same page using different canonicalization techniques”. Check the rendered source, not the theme file.
/collections/all. Every product in the store lives there as well, and with ?sort_by= on top it multiplies again. That is a crawl surface question more than a canonical one, and it belongs with the rest of your faceted navigation decisions.
Paginated collections. ?page=2 self-canonicalises by default, which is correct. A theme customisation that hard-canonicals page 2 back to page 1 hides every product that only appears deep in the collection, which is a much worse outcome than the duplication it was trying to fix.
Sitemaps disagreeing with the tag. Sitemap inclusion is a weak signal, but Google explicitly warns not to “specify one URL in a sitemap, but a different URL for that same page using rel=canonical”. Shopify generates its own sitemap correctly. Apps that generate a second one do not always.
The fix is internal links, not a better tag
There is no stronger canonical tag available to you. You already have the strongest form of it, on every page, pointing at the right URL. Adding it again, or adding it harder, changes nothing.
What you can change is the volume of evidence on the other side. Make every internal link on the store point at /products/handle: navigation, collection grids, app widgets, blog posts, email templates, the lot. Then re-inspect the same sample of products in a fortnight and watch the Google-selected canonical field flip. That is the loop, and the field is the scoreboard.
What this looks like on a real account
The longest-running Shopify work on my desk is a skincare brand selling the same catalogue across seven country storefronts, under monthly review since 2024. Seven stores means seven separate canonical situations over one product catalogue, and it is where I learned to check the Google-selected canonical field rather than trusting the report totals, because the same product can resolve differently in two markets while both properties look identical in the Page indexing report.
The routine that account runs is dull and it works: pull the URLs, classify each by exact status, fix the links rather than the tags, recheck monthly. New products keep arriving, and each one arrives with its own set of collection-scoped twins. If your products are not getting indexed in the first place, that is a different problem with a different fix, and the guide on getting Shopify products indexed is the place to start.
Sources
- Google Search Central, how to specify a canonical URL, for the ranked list of canonicalization signals, the strong and weak wording, the note that methods stack, and the warning against declaring different URLs by different methods, checked 4 September 2026
- Google Search Console Help, Page indexing report, for the verbatim definitions of “Alternate page with proper canonical tag” and “Duplicate, Google chose different canonical than user”, checked 4 September 2026
- Shopify, Dawn theme source,
layout/theme.liquid, for the canonical tag on line 8, andsnippets/card-product.liquidfor product links built without thewithinfilter, checked 4 September 2026 - Shopify.dev, the
canonical_urlLiquid object and thewithinfilter, checked 4 September 2026 - First-hand: a live Shopify storefront tested on 4 September 2026, confirming that both
/products/handleand/collections/c/products/handlereturn 200 and both declare the short product URL as canonical; and the skincare brand case study on this site for the seven-storefront account
