← Back to blogseo

The duplicate content Shopify creates for you

4 min read

Shopify creates duplicate URLs for you, automatically, without asking. Not a bug and not something you did wrong; it is a consequence of how the platform structures product URLs. Most stores never notice, and for most stores it causes no visible harm. It is still worth knowing where the copies are, because when it does bite, it is confusing to diagnose.

WHAT SHOPIFY HANDLES, AND WHAT IT DOES NOT /collections/shirts/products/linen-shirt canonical, handled /products/linen-shirt?variant=123456 canonical, handled /collections/shirts/linen · /collections/shirts/summer · … not canonicalled /collections/all your call to make
The defaults cover the common cases. Tag pages are where it multiplies unattended.

The one everybody has

A product in a collection is reachable at two URLs:

Same product, same content, two addresses. Shopify handles this correctly out of the box: the collection-scoped version carries a canonical tag pointing at the /products/ version, so search engines consolidate them. This is the default and it works.

Where it breaks is a theme that has been edited. If someone removed or hardcoded the canonical tag in theme.liquid, you now genuinely have duplicates competing. Check by viewing source on a collection-scoped product URL and looking for rel="canonical". If it points at itself rather than the /products/ URL, that is the problem.

The /collections/all page

Every store has one, and it lists every product. It frequently ends up indexed alongside your real collection pages, competing for the same broad queries with a page that has no text, no focus and no reason to win.

It is also reachable with sort parameters, which multiplies it: /collections/all?sort_by=price-ascending and so on. Shopify canonicals the sorted versions back to the unsorted one, so that part is handled. The unsorted page itself is the question, and for most stores the answer is that it should not be a search entry point. Either give it real content and treat it as a legitimate catalogue page, or exclude it and let your curated collections do the work.

Tag pages, the actual multiplier

This is the one that gets out of hand. Filtering a collection by tag produces a URL like /collections/shirts/linen, and with several tags across several collections you get combinatorial growth. A store with 8 collections and 12 tags can generate a few hundred thin, near-identical listing pages.

Shopify does not canonical these to the parent collection. They are genuinely separate URLs with genuinely overlapping content, and a handful of them may be worth having if a tag maps to a real search phrase. The other ninety percent are crawl budget spent on nothing.

The practical handling: pick the few tag pages that match phrases people actually search, and add a noindex for the rest via a theme condition. That requires editing theme.liquid, which means it belongs on a duplicate of your theme first.

Variants and the ?variant= parameter

Selecting a variant appends ?variant=123456789. These are canonicalled to the base product URL by default, so they are usually fine. Worth checking only if you have installed something that rewrites URLs, since apps in that category occasionally break the canonical.

What is worth your time

In order:

  1. Confirm the product canonical is intact in your theme. Five minutes, and it is the one that matters.
  2. Decide what /collections/all is for, then either populate it or exclude it.
  3. Look at how many tag URLs exist. If it is a handful, ignore this entirely. If it is hundreds, prune.

What is not worth your time: worrying about a duplicate-content penalty. There is no such penalty for this. The cost is diluted signals and wasted crawling, which is real but slow, not a cliff.

Frequently asked questions

Will Shopify duplicate URLs get my store penalised?

No. Google handles duplication by picking one version, not by penalising. The cost is that it may not pick the one you wanted.

Should I block /collections/all in robots.txt?

Prefer noindex over a robots block. Blocking crawling stops Google seeing the noindex, which can leave the URL indexed with no snippet, the worst of both.

How do I find how many tag pages I have?

Search Console under Pages, or a crawl of your own site. Both will show the /collections/x/tag pattern volume quickly.

Can I edit robots.txt on Shopify?

Yes, via a robots.txt.liquid template. It is editable now, which was not always true, and it is easy to break, so change one thing at a time.

Do I need an app for this?

No. The default canonicals cover most of it, and the rest is a theme edit and a decision about tags.

Check the one thing

If you do nothing else, view source on a collection-scoped product URL and confirm the canonical points where it should. That single check catches the version of this problem that actually costs rankings.

technical seocanonicalshopify

Want SEO blog posts like this for your own Shopify store? Try SEO Bison.