Open any Shopify store and the same product is reachable at two addresses: /products/thing and /collections/whatever/products/thing. On a store with twenty collections, one product can have twenty-one URLs.
This gets discovered in a crawl, panic follows, and somebody proposes a project. In most cases no project is needed, and I would rather explain why than sell one.
Shopify already handles it
The /collections/…/products/… version carries a canonical tag pointing at the clean /products/… URL. That is the default behaviour, it has been for years, and it is the correct configuration. Google consolidates the duplicates and indexes the one you want.
Which puts Shopify ahead of most of the web on this. HTTP Archive’s 2025 Web Almanac found a canonical tag on only 67% of mobile pages, so a third of the web has none at all. A platform that ships correct canonicals on a duplication pattern it created itself is not the problem you should be spending the quarter on.
When it does become a problem
Three ways, and they are worth checking because each is real.
A theme or app broke the canonical. Custom themes edit theme.liquid, and the canonical line is in there. I have seen it removed, hard-coded to the home page, and left pointing at a staging domain. Check the raw source of a product page reached through a collection and confirm the canonical points at the clean product URL. Two minutes.
Your internal links all point at the long version. This is the common one. Collection templates often link products as /collections/x/products/y, so every internal link on the site points at a URL that is not the canonical. Google follows those links, crawls the duplicate, reads the canonical, and consolidates. It works, but you are spending crawl on the wrong address and passing your internal links to a page that is explicitly not the one you want ranking.
Search and filter parameters on top. Sort orders and filters stack onto collection paths and multiply. That one is a separate decision per facet and it is the version of this that actually generates volume.
What I would actually do
- Confirm the canonical is intact on a product page reached through a collection. If it is, you are done with the duplication question.
- Change the collection template to link products at the clean URL. One template edit. It does not change what a customer sees and it stops the whole site voting for the wrong address.
- Do not add a robots.txt block on
/collections/. It is tempting and it is the wrong instrument. A blocked URL cannot be read, so Google never sees the canonical, and the consolidation you were relying on stops happening. You would also be blocking the path to products only reachable through a collection. - Do not try to remove the pattern. You cannot, and that is fine.
The number that is worth worrying about instead
On one Shopify store I audited, Search Console showed 479 pages indexed and 6,540 not indexed. The duplicate product URLs were a rounding error in that. What filled it was tag pages, filter combinations and a theme setting nobody had revisited. 659 tag pages alone, none of which anybody had decided to create.
That is the shape of nearly every Shopify audit I do. The alarming-looking duplication is handled by the platform. The unhandled part is everything the platform generates when you tag a product or add a filter, and it does not announce itself.
Which is worth knowing given how many stores this describes. HTTP Archive’s 2025 Web Almanac found ecommerce software on 19.2% of mobile sites, with Shopify accounting for 25.3% of those. Roughly one site in twenty on the mobile web is a Shopify store running these same defaults, so if this pattern were as damaging as it looks in a crawl, a very large slice of the web would be in trouble. It is not.
The short version
- Two URLs per product is Shopify’s default and the canonical already handles it.
- A third of the web has no canonical at all. Shopify shipping one correctly is not your problem.
- Check the canonical survived your theme. Two minutes, occasionally alarming.
- Fix the internal links to use the clean URL. One template edit, whole catalogue.
- Never block
/collections/in robots.txt. It stops the canonical being read. - The volume problem is tags and filters, not the product path.
If a site should be ranking and it isn’t, that’s the work I do. Shopify SEO covers the platform’s own quirks. If you’re not sure which of several plausible problems is costing you, that’s what an SEO audit is for.

