Shopify duplicate product URLs: what to fix, what to leave alone
Diagnose /products/ and /collections/.../products/ URLs without breaking navigation. Align canonical tags, internal links and your Shopify sitemap.
- PUBLISHED
- FILED UNDER
- SEO
- READING TIME
- 3 minutes
- WORDS BY
- Shopify GEO SEO Agency

You find /products/trail-pack and /collections/daypacks/products/trail-pack in a crawl. Both load the same bag. That is a diagnostic starting point, not proof that Shopify is costing you rankings. The question is whether your store consistently identifies one preferred page and whether Google accepts that choice.
Compare three versions of one real product
- Open the product directly and record its canonical URL from the page head.
- Open it through two different collection grids. Compare the canonical, main content and product identifier.
- Open a variant-specific URL and confirm it selects the correct variant. Do not classify a useful selection parameter as disposable before checking its purpose.
- Inspect the main URL in Search Console and compare user-declared and Google-selected canonicals. Record the inspection date.
Shopify exposes a canonical_url Liquid object for themes. Check the rendered output of your actual theme: a custom app or head snippet can still add a second, conflicting canonical. Shopify: canonical_url Liquid object ↗
Make the signals agree
For a product that belongs to several collections, the direct product URL is often the sensible preferred destination. Link product cards and recommendations to that URL where it fits your navigation. Keep category context through breadcrumbs or an explicit back-to-collection link rather than relying on several competing canonical declarations.
Google recommends linking internally to the canonical URL and using consistent canonical signals. A sitemap can indicate preference, but it is weaker than a canonical link or redirect. Do not put a different preferred URL in each of those places. Google: consolidating duplicate URLs ↗
| Observation | Next step |
|---|---|
| Alternative URL has the intended canonical | Check indexing and internal-link consistency; no automatic emergency |
| Two canonical tags disagree | Identify and remove the conflicting theme or app output |
| Canonical points to a missing product | Correct the destination and the underlying product mapping |
| Variant URL selects the wrong item | Repair variant selection before changing canonical strategy |
Why a redirect is not always the answer
Shopify's built-in redirects apply to broken paths, not paths that still serve an active page. Adding a redirect entry for an existing collection-product route may therefore do nothing. Verify the HTTP response instead of assuming the saved redirect is active. Shopify: creating and managing URL redirects ↗
Do not introduce JavaScript redirects merely to make a crawl report look tidy. They can disrupt shoppers and hide the underlying template issue. Likewise, blocking an alternative URL in robots.txt can prevent a crawler from reading the canonical on that page. Choose a control for its actual job.
Filter combinations need a different decision process. Read Shopify faceted navigation: collections versus filters.
Verify the change without losing context
Test cards in search results, collection grids, recommendations and recently viewed sections. Test a product in more than one collection and a variant with a different price. Make sure cart selection, breadcrumbs and language or market routing still behave as intended. One successful click on the homepage does not cover these paths.
After release, recrawl the same sample and compare the canonical values. Watch Search Console over subsequent crawls for changes in selected canonicals and indexed URLs. Alternative-page exclusions can be the correct outcome. Your objective is a clear preferred product page, not an index containing every possible route to it.
Put this into practice with Shopify SEO and Shopify GEO.