Technical SEO

Shopify Canonical Tag Problems — How to Find and Fix Duplicate Content Issues

By Reviewed by Hawrry Bhattarai
August 27, 2026 11 min read
Contents
TL;DR — the short answer

Shopify creates canonical tag problems with collections and product pages by design. Here is exactly how to identify and fix them before they hurt your rankings.

13 min read · Technical SEO · Last updated July 2026

Quick answer: Shopify generates two URLs for every product — one standalone (/products/red-shoes) and one within each collection it belongs to (/collections/mens/products/red-shoes). Both are accessible, but Shopify adds a canonical to the standalone URL. Google generally respects this, but crawl budget, link equity, and rendering issues mean the problem is real and worth fixing systematically.

Introduction

Shopify powers over 4.4 million live stores. A significant proportion of them are bleeding crawl budget and link equity through a structural problem baked into Shopify’s URL architecture — one that the platform’s own documentation consistently underplays.

The issue is not obscure. It appears in virtually every technical SEO audit of a Shopify store with more than 50 products and multiple collections. Canonical tags are present, but canonical tags being present and canonical tags working correctly are not the same thing.

What makes this particularly insidious: your store probably looks fine in Google Search Console. Coverage errors may be zero. Impressions may be climbing. But your crawl budget is being consumed on URLs that should never be crawled, your internal link equity is fragmenting across competing product URLs, and in some cases Google is ignoring your canonical declarations and indexing the wrong URL.

In this post you will learn:
– Exactly how Shopify’s URL structure creates canonical problems
– Why Google sometimes ignores Shopify’s canonical declarations
– How to audit your store to find the scale of the problem
– Specific code fixes for Liquid templates
– When canonical issues are hurting revenue and when they are theoretical


Table of Contents

  1. How Shopify’s URL architecture works
  2. The three canonical problems Shopify creates
  3. How to audit your store for canonical issues
  4. Why Google ignores canonical tags (and what to do about it)
  5. Fixing canonical issues in Shopify Liquid
  6. Collection URL SEO strategy
  7. Pagination and faceted filtering canonicals
  8. FAQ

1. How Shopify’s URL Architecture Works

Every Shopify product has a canonical URL at /products/[handle]. When you add a product to a collection, Shopify makes it accessible at a second URL: /collections/[collection-handle]/products/[product-handle].

Here is the structure:

Canonical (primary) URL:
/products/mens-running-shoes-red

Collection-scoped URLs (also accessible):
/collections/mens-shoes/products/mens-running-shoes-red
/collections/running-shoes/products/mens-running-shoes-red
/collections/sale/products/mens-running-shoes-red
/collections/new-arrivals/products/mens-running-shoes-red

A product in four collections generates five accessible, crawlable URLs for the same page. Shopify adds a rel="canonical" pointing to the /products/ URL on all five pages. The HTML is identical on all five URLs — same title, same body content, same description.

Shopify also creates:
/collections/all — an auto-generated page listing every product in the store (often the largest single source of duplicate content in a Shopify store)
– Variant URLs — ?variant=39258724352 appended to product URLs for each size/colour variant
– Sort order URLs — /collections/mens-shoes?sort_by=price-ascending
– Pagination — /collections/mens-shoes?page=2

A mid-sized Shopify store with 500 products, an average of 3 collections per product, 6 variants per product, and 3 sort options will have approximately 12,000+ accessible product-related URLs. The number of pages you actually want indexed: around 500.


2. The Three Canonical Problems Shopify Creates

This is the most impactful problem and the least discussed. When a customer visits your collection page and clicks a product, Shopify’s default theme code generates a link to /collections/[collection]/products/[product] — not to the canonical /products/[product] URL.

Why this matters: PageRank (link equity) flows through internal links. If 95% of your internal links point to collection-scoped product URLs, and your canonical points elsewhere, you are splitting link equity between a URL Google should not index and the URL you want to rank. Google’s John Mueller has explicitly stated that internal links passing equity to a non-canonical URL means that equity does not fully transfer to the canonical.

Problem 2: /collections/all Is Almost Always a Problem

Shopify auto-creates /collections/all that shows every product in your store. For a 2,000-product store, this is a single page listing 2,000 products — an enormous thin content page with a generic <h1> and no unique content.

Worse: many themes internally link to /collections/all from navigation menus, passing significant link equity to a page with zero ranking potential.

Problem 3: Variant URLs and Sort Parameters Exhaust Crawl Budget

Variant URLs like ?variant=39258724352 are technically given canonical tags pointing to the base product URL. But these URLs are still crawlable — and Googlebot still visits them. For a store with 500 products × 8 variants each, that is 4,000 URLs consuming crawl budget that should go to your actual content pages.


3. How to Audit Your Store for Canonical Issues


4. Why Google Sometimes Ignores Shopify’s Canonical Declarations

Canonical tags are hints, not directives. Google’s documentation explicitly states that canonicals are advisory. Google will override a canonical declaration and choose its own “canonical” URL when it disagrees with your signal.

The specific conditions that cause Google to ignore Shopify canonicals:

1. The non-canonical URL has more inbound links. If your blog posts and navigation menus consistently link to /collections/mens/products/red-shoes rather than /products/red-shoes, Google may decide the collection URL is “more canonical” despite your tag — because link equity signals content importance.

2. Content signals differ between URLs. If your Shopify theme renders slightly different breadcrumbs, H1 text, or structured data on collection-scoped product pages versus standalone product pages, Google may treat them as meaningfully different pages.

3. The canonical URL returns a different status code. This happens after site migrations or theme changes. If /products/red-shoes ever returned a 404 or redirect temporarily, Google may have switched to treating the collection URL as canonical and not reversed that decision.

4. Crawl frequency imbalance. If Google crawls /collections/mens/products/red-shoes more frequently than /products/red-shoes (because of internal links), it may freshness-rank the collection URL higher.


5. Fixing Canonical Issues in Shopify Liquid

In your theme’s product card template (typically snippets/product-card.liquid or snippets/card-product.liquid), find the product link:

{% comment %}
BEFORE (default Shopify behaviour — links to collection-scoped URL):
{% endcomment %}
<a href="{{ product.url | within: collection }}">

{% comment %}
AFTER (links to canonical /products/ URL):
{% endcomment %}
<a href="{{ product.url }}">

The | within: collection filter is what creates the /collections/[x]/products/[y] URL. Removing it causes all product card links to point to the canonical /products/ URL. Apply this fix in every file that outputs product links: collection templates, featured product sections, search results, and recommendation widgets.

Fix 2: Confirm Canonical Tag in theme.liquid

Verify your theme.liquid outputs the correct canonical. Most Shopify themes handle this correctly, but verify:

{% comment %} In your <head> section of theme.liquid: {% endcomment %}
<link rel="canonical" href="{{ canonical_url }}" />

Shopify’s canonical_url variable automatically resolves to /products/[handle] for products and /collections/[handle] for collection index pages. Do not hardcode canonical URLs — use the variable.

Fix 3: Block /collections/all From Indexing

Add this to your robots.txt (accessible via Shopify Admin → Online Store → Themes → Actions → Edit code → config/robots.txt.liquid):

{% if robots_txt %}
  {{ robots_txt.default_groups }}

  User-agent: *
  Disallow: /collections/all

{% endif %}

Or better — add a noindex meta tag to the /collections/all template specifically.

Fix 4: Handle Variant URL Parameters

Add this to your robots.txt.liquid to prevent crawling of variant parameters:

User-agent: *
Disallow: /*?variant=

Alternatively, ensure all variant page canonical tags point to the base product URL (Shopify does this by default with {{ canonical_url }}).

Key takeaway: The highest-impact fix in most Shopify stores is removing | within: collection from product card link templates — this single change redirects internal link equity to canonical URLs and typically shows measurable ranking improvement within 4–8 weeks.


6. Collection URL SEO Strategy

Collection pages are not the enemy — they are legitimate indexable pages with strong commercial intent keywords (“mens running shoes”, “blue dresses under $50”). The problem is not collections existing; it is the collection-scoped product URL duplication they create.

Your collection pages should:
– Have unique, keyword-rich <h1> tags (not just the collection name)
– Include 150–300 words of unique introductory text above the product grid
– Have unique meta descriptions targeting collection-level keywords
– Link internally from relevant blog content

A collection page for “Merino Wool Socks” should rank for “merino wool socks” — that is high commercial intent, low position on the funnel. Individual product pages should rank for specific product queries (“Darn Tough Hiker Boot Sock Heavyweight”).

The collection SEO checklist:
– Do not create collections you will not write unique content for
– Delete or noindex empty collections (0–3 products)
– Ensure collection pagination (/collections/mens?page=2) has canonical to page 1 (or use rel=next/prev for paginated series)
– Review /collections/all — in most cases, noindex or disallow it


7. Pagination and Faceted Filtering Canonicals

Shopify collections support pagination (?page=2) and sort ordering (?sort_by=price-ascending). Both create additional URLs that need canonical treatment.

Pagination: Shopify automatically adds <link rel="canonical"> to paginated collection pages pointing to the first page. This is generally correct for collection pages that do not have unique content on page 2. However, if your paginated pages have unique featured content on each page, consider evaluating whether individual page canonicals make more sense.

Sort parameters: URLs like /collections/mens?sort_by=price-ascending are all canonicalised to the base /collections/mens URL. Shopify handles this automatically. The problem is these URLs are still crawlable — robots.txt disallow rules for sort parameters reduce crawl waste:

User-agent: *
Disallow: /*?sort_by=

Faceted filters: If you use a third-party filtering app (Boost Commerce, Searchie, Shoplooks), it may generate additional filtered URLs that bypass Shopify’s canonical logic. Audit these separately — most filtering apps have their own canonical settings that must be configured.


FAQ

Q: Should I use the canonical tag or robots.txt to handle collection-scoped product URLs?
A: Both. Canonical tags tell Google which URL to treat as primary. Robots.txt disallow prevents crawling of specific URL patterns entirely. For the highest-impact result, use canonical tags on all pages AND disallow clearly wasteful URL patterns (like ?variant=, ?sort_by=, /collections/all) in robots.txt.

Q: How do I check if Google is ignoring my canonical tags?
A: Run a site:yourstore.com search and filter to /collections/ URLs that contain /products/. If you see collection-scoped product URLs in Google’s index, your canonicals are being overridden. Also check GSC Coverage → Excluded → “Alternate page with proper canonical tag” — these are the pages where Google accepted your canonical.

Q: Will removing | within: collection break my collection breadcrumbs?
A: No — breadcrumbs are separate from the product card link. Breadcrumbs in Shopify are typically rendered from the breadcrumb object which is independent of how the product link is built in the card template.

Q: Is the /products/ URL or the collection-scoped URL better for ranking?
A: The /products/ URL is canonicalised and should be the one that ranks. Use the calculator above to see how much internal link equity is currently flowing to the wrong URL format.

Q: Do Shopify apps create additional canonical problems?
A: Yes. Product review apps, recently viewed apps, and wishlist apps sometimes create their own URL variants. Audit after installing any app that modifies product URLs.

Q: How many products is too many to fix manually?
A: Above 100 products, manual link fixing is impractical. Use find-and-replace in your theme code files to remove | within: collection from all templates at once — this is a 5-minute fix that applies to all products instantly.


Conclusion

Shopify’s canonical architecture is one of the most consistent sources of technical SEO debt for e-commerce stores. The platform makes reasonable choices — canonical tags are present, Google mostly respects them — but “mostly” is not good enough when crawl budget and link equity fragmentation compound over time.

The three fixes with the highest impact:
1. Remove | within: collection from all product card link templates
2. Noindex or disallow /collections/all
3. Disallow ?variant= and ?sort_by= parameters in robots.txt

These changes take under two hours to implement and typically produce measurable crawl efficiency improvements within 30 days.

Running a Shopify store in Australia, Nepal, UAE, or any of our markets? Ignited Nepal’s technical SEO audits include a full Shopify canonical analysis with a prioritised fix list and estimated impact per change.

Book a Shopify SEO Audit → ignitednepal.com


Written by the Ignited Nepal team. ignitednepal.com

NR

Article by

Niraj Raut

Head of Search at Ignited Nepal. Drove 340% organic traffic growth for EzyDog (Australia), 4× revenue for The Turf Man (Australia), and 120% month-on-month traffic growth for ThemeGrill (Nepal). Keynote speaker at WordCamp Nepal 2023 and verified WordPress.org open-source contributor.