Skip to main content
Technical SEO · URLs · canonicals

Shopify duplicate product URLs: collection paths and canonicals

The canonical tells Google which product URL to keep. Your theme's links decide how often Google meets the other one. Here is how to check your store and fix it without breaking navigation.

Diagram: a collection page links to /collections/x/products/y which canonicalises to /products/y; the fix links to /products/y directly
Collection-aware links create a second URL for every product; linking to /products/ directly removes it.

01Where the duplicate URL comes from

A Shopify product can be reached at two addresses:

  • /products/handle, the product's own URL;
  • /collections/collection-handle/products/handle, a "collection-aware" URL.

The second form appears when a collection page links to products with the collection in the path. Themes usually do this with the Liquid within filter, so the product page knows which collection the shopper came from.

SignalWhat it tells GoogleWhat it does not do
Canonical on the collection URL pointing to /products/handleWhich URL you want indexedStop Google from crawling the collection URL
Product cards linking to the collection URLThat this URL matters. Every collection page repeats the signalRespect your canonical. Links and canonical now disagree
Sitemap listing /products/handleYour preferred URL, once moreOutweigh hundreds of internal links to the other form

The canonical protects you. The internal links decide how often Google meets the duplicate. Fix the links, and keep the canonical.

02What we saw on four live stores

On October 14, 2026 we requested a collection-path product URL on four Shopify stores, including our own ShopXN.net.

StoreLinks on the collection gridRequesting /collections/all/products/…
ShopXN.netPlain /products/ links301 redirect to /products/handle
A coffee brandPlain /products/ links301 redirect to /products/handle
A fashion retailer698 collection-path links on one collection page200, canonical pointing to /products/handle
An apparel brandPlain /products/ links404, with a canonical pointing to itself

The fashion retailer is protected by its canonical, but every collection page sends Google hundreds of links to URLs it has been told not to index. The apparel brand's 404 is harmless only if nothing links to those URLs. You cannot assume which group your store is in, because themes, apps and custom code change the behavior. Test your own store.

03Check your store in ten minutes

1. Read a collection page's links

Open a collection page, view the source and search for /collections/ followed by /products/ inside link URLs. If product cards use that form, the theme generates collection-aware links.

2. Request one collection-path URL

Use curl -I or the browser's network panel, and note whether it returns 200, 301 or 404.

3. If it returns 200, read the canonical

It must be the full /products/handle URL, not the collection version.

4. Look in Search Console

In Page indexing, open "Alternate page with proper canonical tag" and "Duplicate, Google chose different canonical than user". Count how many sample URLs contain /collections/…/products/.

5. Check the sitemap

Shopify's generated product sitemap lists /products/ URLs. If collection-path URLs appear in any sitemap, an app or custom sitemap is adding them.

Worked example: a store with 40 collections showing 24 products each has up to 960 collection-aware product links on first pages alone. On a store with 300 products, each in three collections, there are up to 900 duplicate URL variants for 300 products. Removing the within filter from one snippet removes all of those links at once.

04How to fix it, and what to leave alone

SituationDoDon't
Cards link to collection pathsRemove | within: collection from the product card link, so it uses product.urlRemove products from collections. Membership is not the problem
Collection-path URLs return 200Keep the canonical to /products/handleLet an app overwrite it with a self-referencing canonical
Many collection paths in Search ConsoleFix links first, then wait for recrawlBlock /collections/*/products/ in robots.txt. Google could no longer see the canonical
Collection-path URLs return 404Redirect any that external sites link toLeave linked URLs broken
Breadcrumbs depend on collection contextTest breadcrumbs and "back to collection" after the changeShip the change without checking product page navigation

Related duplicates that are separate problems

05Copy this developer ticket and fill in the brackets

Theme ticket: product cards link to canonical product URLs

Problem: product cards on collection pages link to /collections/[handle]/products/[handle]
Evidence: [n] such links on /collections/[example]; Search Console shows [n] alternate/duplicate rows
Change: in [snippets/card-product.liquid or equivalent], link with product.url (remove "| within: collection")
Keep: canonical on collection-path URLs = https://[domain]/products/[handle]
Test after change:
  - collection grid source contains no /collections/*/products/ links
  - product page breadcrumb / back link still works: [yes/no]
  - /collections/[handle]/products/[handle] returns [200 + canonical | 301]
Do not: add robots.txt rules for collection product paths
Recheck: Search Console Page indexing on [date + 4 weeks]

06Questions

Does Shopify create duplicate content automatically?

It can create two URLs for the same product, depending on how the theme links products. The canonical usually tells Google which one to keep. The theme's links decide how often Google meets the duplicate.

Should I remove products from extra collections?

No. Belong to as many collections as helps shoppers. The duplicate comes from the link format, not from membership.

Will fixing this increase rankings?

It removes wasted crawling and conflicting signals. It does not create demand. Expect cleaner Page indexing reports, not an immediate traffic jump.

Why does Search Console say "Google chose different canonical than user"?

Google found strong signals for another URL, often internal links or a redirect pointing elsewhere. Compare the declared canonical with where your links actually point.

Sources and what still needs a direct check

  1. ShopXN public requests to four Shopify stores on October 14, 2026. Status codes, canonical tags and grid links. Other stores anonymised.
  2. Shopify Help Center, Finding and submitting your sitemap. Product sitemap contents.
  3. Google Search Console Page indexing report status names.

Still to check yourself

  • The exact snippet your theme uses for product cards. Names differ between themes.
  • Whether any app (filters, search, recommendations) builds its own product links.
  • Whether external sites link to collection-path URLs you are about to change.

Next: run the five checks and continue with the technical SEO audit checklist, where URL identity is checks 05–08. To have the change made and verified across templates, our SEO audit records each finding with evidence and a fix order.