shopify duplicate content
Shopify duplicate content: which Search Console warnings matter and how to fix them
Shopify creates several URLs for the same product. Which duplicate warnings in Search Console are normal, which cost you rankings, and the theme fixes for each.
Key takeaways
- Most Shopify duplicate warnings are normal. "Alternate page with proper canonical tag" means the canonical is working, and Google says there's nothing to do.
- The one worth fixing first is internal links to /collections/…/products/… URLs, usually from an old theme's within: collection filter.
- "Duplicate, Google chose different canonical than user" on a page you care about usually means two pages are too similar. Make them different or merge them.
- Shopify's default robots.txt already blocks sorted and multi-tag collection URLs, so don't add blanket rules on top without a reason.
Why Shopify creates duplicate URLs
Open Google Search Console on almost any Shopify store and the Page indexing report shows hundreds of URLs "not indexed" for duplicate reasons. That looks alarming. Most of it is Shopify working as designed, and only a few patterns cost you rankings. The job is to tell them apart.
A single product on Shopify is reachable at several addresses:
/products/linen-throw, the main product URL/collections/bedroom/products/linen-throw, the same page reached through a collection/products/linen-throw?variant=4412…, one URL per variant
Collections multiply in the same way: ?page=2, ?sort_by=price-ascending, filter parameters such as ?filter.v.availability=1, and tag URLs such as /collections/bedroom/linen.
Shopify handles most of this with a canonical tag. Every product URL variant points at /products/linen-throw, so Google knows which one to index. Shopify's default robots.txt also blocks the noisiest patterns. Here are the relevant default lines, taken from a live store:
Disallow: /collections/*sort_by*Disallow: /collections/*+*Disallow: */collections/*filter*&*filter*Disallow: /search
So sorted collections, multi-tag combinations, combined filters and internal search results are never crawled in the first place.
Read the report: three statuses, three meanings
Google's Page indexing documentation defines each status. On a Shopify store they map to specific causes:
| Status | What Google says | Typical Shopify cause | Action |
|---|---|---|---|
| Alternate page with proper canonical tag | Points correctly to the indexed canonical, "nothing you need to do" | Variant URLs, collection-path product URLs | None |
| Duplicate without user-selected canonical | A duplicate with no declared canonical. Google picked another page; "not an error" | Filtered or tagged collection URLs, URLs with tracking parameters | Check a sample, usually fine |
| Duplicate, Google chose different canonical than user | Google disagrees with your canonical and indexed another URL | Near-identical products or collections | Fix if the page matters |
One status that sits nearby but isn't about duplication: "Crawled – currently not indexed". Google read the page and chose not to index it, for now. Google's guidance is that there's no need to resubmit the URL. If it's an important product, improve the page itself: a real description, more internal links to it, and stock that isn't permanently sold out.
To check any URL, paste it into the URL Inspection bar. Under Page indexing you'll see "User-declared canonical" and "Google-selected canonical". If they match, you're done. If they don't, the rest of this guide applies.
Fix 1: stop linking to collection-path product URLs
This is the most common real problem, and it comes from the theme. Older themes (Debut, Brooklyn and many premium themes built on them) render product links with a Liquid filter:
{{ product.url | within: collection }}
That turns every product card in a collection into a link to /collections/bedroom/products/linen-throw. The canonical still points at /products/linen-throw, but every internal link points somewhere else. Google has to consolidate thousands of internal links across URLs, and it sometimes indexes the wrong one.
How to check: open a collection page, right-click a product card and copy the link. If it contains /collections/, you're affected.
The fix: in Online Store → Themes → … → Edit code, search the theme for within: collection. You'll usually find it in a product card snippet such as product-card.liquid or product-grid-item.liquid. Change {{ product.url | within: collection }} to {{ product.url }}. Duplicate the theme first and test the copy. Breadcrumbs that depended on the collection path will show the default instead, which most stores won't notice.
Current Shopify themes such as Dawn link to /products/… directly, so if you're on a recent theme this is already done.
Fix 2: decide what tag and filter pages are for
Single-tag collection URLs (/collections/bedroom/linen) and single filters aren't blocked by default. They self-canonicalize, so Google treats each as its own page. Usually that's thin duplication: the same products, a different subset, and the same title and description as the parent collection.
You have two honest options:
- Make them real landing pages if people search for them ("linen bedding"). That means a dedicated collection with its own title, description and products. A tag URL can't get its own content without theme work.
- Keep them out of the index if they're only navigation. Add this to the
<head>intheme.liquid:{% if current_tags %}<meta name="robots" content="noindex, follow">{% endif %}
The page still works for shoppers, and links on it are still followed.
Leave pagination alone. ?page=2 lists different products from page 1 and should keep its own canonical. Pointing it at page 1 can hide products that only appear deeper in a collection.
Fix 3: near-identical products and collections
When Google picks a different canonical than yours, it's saying two pages are effectively the same. On Shopify that usually means one of these:
- The same product listed twice, for example "Linen throw – sage" and "Linen throw – sand" as separate products with copied descriptions. Merge them into one product with a Color option, or rewrite each description so it's genuinely about that colour (photography, use, what it pairs with). Our product exporter pulls a public catalog into a CSV, so you can sort by description and find the copies quickly.
- Supplier descriptions used word for word by many stores. Google picks one version across the web, and it may not be yours. Rewrite the first paragraph and the spec list, at least for your best sellers.
- Two collections with the same products, such as "Sale" and "Clearance". Keep one and add a URL redirect from the other. Type "URL redirects" into the admin search bar to find the page, since Shopify has moved it between menus.
Don't try to fix this with canonical tags alone. If the pages are truly different, make them look different. If they aren't, merge them.
A monthly check that takes ten minutes
- In Search Console, open Indexing → Pages and note the counts for the three duplicate statuses. Watch the trend, not the absolute number.
- Click each status and inspect five sample URLs. Variant and collection-path URLs under "Alternate page" are fine.
- Under "Duplicate, Google chose different canonical than user", list any product or collection that earns revenue. These are the ones to fix.
- Check a product card link on one collection page, to make sure a theme update didn't bring
within: collectionback. - If a count jumps suddenly, look for new URL parameters, usually from a filter, reviews or tracking app.
- Run a key product page through the Shopify SEO check to confirm the canonical, robots tags and product schema agree with each other.
Shopify questions
Do /collections/…/products/… URLs hurt my Shopify SEO?
Not by themselves. They carry a canonical tag pointing at /products/…, so Google indexes one version. The cost comes when your theme links to them everywhere, which spreads link signals across URLs Google has to consolidate.
Should paginated collection pages canonicalize to page 1?
No. Page 2 lists different products than page 1, so it should keep its own canonical. Pointing it at page 1 can stop Google from reaching the products that only appear deeper in the collection.
Can I edit canonical tags on Shopify?
Yes, in theme.liquid. Shopify outputs {{ canonical_url }} in the head and you can wrap it in conditions. Change it only for a specific reason, because the default is right for almost every page.
How many 'Alternate page with proper canonical tag' URLs is too many?
There's no limit to worry about. The number grows with variants, collections and pagination. Read the trend: if it climbs much faster than your catalog, look for a new source of URLs such as a filter app or a tracking parameter.