Duplicate URLs on Shopify, and how canonical tags handle them

Why one Shopify product can live at five URLs, what the canonical tag does about it, what Shopify already handles for you, and the few fixes that are still worth making.

The Next Sprout team · 7 min read

On a Shopify store, one product can be reached at several different addresses. That’s by design, and Shopify handles most of it well. But when themes, apps or your own links lean on the wrong version, search engines spend their time on copies, and the signals that should build up on one page get split across several.

Where duplicates come from

The same linen shirt might be served at all of these:

one product, many URLs
/products/linen-shirt
/collections/shirts/products/linen-shirt
/collections/sale/products/linen-shirt
/products/linen-shirt?variant=4211
/products/linen-shirt?utm_source=newsletter

Collections multiply in the same way:

  • Sorting: ?sort_by=price-ascending shows the same products in a different order.
  • Filters: ?filter.v.option.color=Beige and friends, which can combine endlessly.
  • Tag pages: /collections/shirts/linen, and combinations like /collections/shirts/linen+summer.
  • International versions: /en-ca/products/linen-shirt with Shopify Markets or extra languages.

What the canonical tag does

A canonical tag is a line in the page’s head that names the preferred URL for that content. Shopify themes output it from the canonical_url Liquid object, which points collection-scoped product URLs at the plain /products/ address.

<head> of /collections/shirts/products/linen-shirt
<link rel="canonical" href="https://yourstore.com/products/linen-shirt">

Google treats the tag as a strong hint, not a command. It also weighs which URL your internal links point to, which one is in your sitemap, and which one other sites link to. When those signals agree, the canonical sticks. When they disagree, Google may pick a different URL from the one you declared.

Check a URL

Paste any path from your store to see its canonical version, whether Shopify’s default robots.txt lets crawlers in, and why:

Shopify URL inspectorDuplicate URL
Canonical URL
https://yourstore.com/products/linen-shirt
Default robots.txt
Crawlable
Pass: ?variant= selects an option on the same product page, so it shares the product’s canonical.
Pass: utm_source is a tracking parameter. The canonical leaves it out.
Paste a path from your own store or pick an example. Results describe Shopify’s default behaviour; heavily customised themes and apps can change it, so confirm with URL Inspection in Search Console.

What actually needs fixing

  • Internal links to collection-scoped product URLs. Some themes, especially older ones, build product card links with Liquid’s within filter, so every collection page links to /collections/…/products/…. The canonical tag cleans up after it, but your strongest internal signal now points at the duplicate. Linking to product.url without within fixes it.
  • Thin tag pages. A single-tag page like /collections/shirts/linen is crawlable and usually canonical to itself. If it’s just a filtered grid with no copy of its own, it competes with the main collection without adding anything. Either give it a reason to exist or stop linking to it.
  • Campaign links pasted into your own site. UTM parameters belong on links from emails and ads, not in your navigation or blog posts.
  • Changed handles without redirects. Renaming a product handle creates a new URL. Keep Shopify’s “Create a URL redirect” option ticked so the old address and its links carry over.

How to verify in Search Console

  1. Run a product URL through URL Inspection and compare the “User-declared canonical” with the “Google-selected canonical”. They should match.
  2. In the Pages report, “Alternate page with proper canonical tag” is normal: Google found a duplicate and respected your canonical.
  3. “Duplicate, Google chose different canonical than user” is the one to investigate. It usually means your internal links or sitemap point somewhere other than your canonical tag.

For the crawling side of the same problem, see A plain-English guide to Shopify robots.txt.

  • Technical SEO
  • Canonical tags
  • Duplicate content
  • Shopify