Where do the duplicate URLs come from?
Shopify builds product URLs in four ways. Here is what each looked like on a live public Shopify store we tested on October 14, 2026:
| URL | Example | Canonical tag points to |
|---|---|---|
| Clean product URL | /products/mens-dasher-nz-anthracite | itself |
| Inside a collection | /collections/mens/products/mens-dasher-nz-anthracite | /products/mens-dasher-nz-anthracite |
| A variant | /products/mens-dasher-nz-anthracite?variant=123 | /products/mens-dasher-nz-anthracite |
| Collection with a filter or sort | /collections/mens?sort_by=price-ascending | /collections/mens |
A product in 6 collections therefore has at least 7 URLs, and more with variants. That is the "duplicate content" every Shopify SEO audit tool flags.
Is this hurting my rankings?
On its own, usually not. Google's guidance is that a canonical tag is a strong signal for which URL to show when pages are duplicates (Google). Shopify sets it correctly by default. In Search Console you will see many of these under Indexing > Pages > "Alternate page with proper canonical tag". That status means it worked. It is not an error.
It does hurt in two cases:
- Your theme links to the collection path. If every product card in every collection links to /collections/x/products/y, most of your internal links point at URLs you have asked Google not to index. Google has to crawl all those copies to read the canonical, and the clean URL gets fewer direct links from your own site.
- Your theme or an app broke the canonical. Some customized themes and old SEO apps output their own canonical, or none. Then Google picks for itself, and it may pick the collection copy.
How to check your store in 3 minutes
- Open any product from inside a collection page on your store. Look at the address bar. If it shows /collections/.../products/..., your theme uses collection-scoped links.
- On that page, right-click and choose View page source. Search (Ctrl+F or Cmd+F) for
canonical. It should show https://yourstore.com/products/handle. - In Search Console, go to Indexing > Pages and open "Duplicate, Google chose different canonical than user". If you see collection-path product URLs here, Google is ignoring your canonical for those pages, and you should look at your links and content first.
The fix: change one filter in your theme
Most themes build product card links in a snippet. In Dawn-style themes it is snippets/card-product.liquid. Others use names like product-card.liquid or product-grid-item.liquid.
- Go to Online Store > Themes, click the three dots on your live theme and choose Duplicate. Work on the copy.
- On the copy, click the three dots and choose Edit code.
- Search the code for
within:. - Change
{{ product.url | within: collection }}to{{ product.url }}. Do the same forcard_product.url | within: collectionif your theme uses that name. - Preview the copy, click a few products from collection pages, and confirm the address bar now shows /products/handle.
- Publish the copy.
Breadcrumbs that say "Home > Men > Dasher NZ" can still work: many themes read the collection from the page the shopper came from, not from the URL. Check yours after the change.
What you do NOT need to fix
- Variant URLs (?variant=). They canonicalize to the product. Leave them, unless you sell truly different items as variants of one product. Then split them into separate products so each can rank on its own.
- Filter and sort URLs. They canonicalize to the base collection, and Shopify's default robots.txt blocks sort_by and URLs with two or more filters. Nothing to do.
- Paginated collections (?page=2). These should keep their own canonical. Google says not to point page 2 at page 1 (Google). Shopify does this right by default. If an app changed it, undo that.
The duplicates that DO need work
The pages that cause real problems on Shopify are not product copies. They are pages that point their canonical at themselves, so Google can index them as separate thin pages:
- Tag pages like /collections/shoes/red
- Vendor pages like /collections/vendors?q=Northwind
- Product type pages like /collections/types?q=Socks
- /collections/all, a list of every product with no text
For each, decide: turn it into a real collection with its own title and intro text, or noindex it. Our guide on how to noindex a page in Shopify has the Liquid snippets, and the full checklist has a row for each.
Two products, one search
There is one more kind of duplicate canonicals cannot fix: two different products (or a product and a collection) that target the same search. For example, a fictional store, northwind-outdoors.com, sells "Trail Pack 20L" as a single product and again inside a "Trail Pack Bundle". Both rank on page 2 for "20l hiking daypack" and swap places week to week. In Search Console, open Performance, filter by the query, and click the Pages tab. If two of your URLs show up for the same query, pick one to target it, and rewrite the other's title and description for a different search.
How to use this with an AI assistant
Connect SEOmatic at https://seomatic.ai/mcp and ask: "Use check_site on mystore.com and tell me whether my product pages have the right canonical tag. Then, after I connect Search Console, use gsc_indexing (action batch_inspect) on my top product URLs and tell me which ones Google indexed under a different canonical." check_site is free and needs no sign-in.
More from the Shopify SEO checklist
- The checklistSEO for Shopify: the 2026 checklist, with the exact admin path for every fix
- GuideHow to noindex a page in Shopify
- GuideShopify URL redirect not working? Start here
- GuideShopify tag pages and SEO: which to keep, which to kill
- GuideShopify robots.txt: what the default file blocks and when to edit it
- GuideHow to change your Shopify home page SEO title and meta description
- GuideWhat to do with a deleted Shopify product's URL


