Adfinite
Shopify AppsReady-to-use solutions
Custom AppsTailored for your needs
AutomationStreamline your workflows
Store AuditOptimize your store
PartnershipCareerBlogContact
Free Store Audit
Adfinite
Shopify AppsCustom AppsAutomationStore Audit
PartnershipCareerBlogContact
Free Store Audit

Growth Insights for Founders

Join founders scaling to $10M+. Battle-tested, purely technical scaling advice.

Adfinite

Intelligent apps and automation for high-growth Shopify brands. We turn complex problems into simple, revenue-generating solutions.

Shopify PartnerLinkedInInstagramXFacebook

Product

  • Storebeep
  • Sonic Speed
  • DailyBrief

Company

  • Blog
  • Glossary
  • Careers
  • Free Store Audit
  • Contact

Legal

  • Privacy Policy
  • Terms and Condition
Adfinite

Intelligent apps and automation for high-growth Shopify brands. We turn complex problems into simple, revenue-generating solutions.

Shopify PartnerLinkedInInstagramXFacebook

Product

  • Storebeep
  • Sonic Speed
  • DailyBrief

Company

  • Blog
  • Glossary
  • Careers
  • Free Store Audit
  • Contact

Legal

  • Privacy Policy
  • Terms and Condition

© 2026 Adfinite Solutions LLP. All rights reserved.

Make today amazing ✨
All systems operational
Adfinite
Shopify AppsReady-to-use solutions
Custom AppsTailored for your needs
AutomationStreamline your workflows
Store AuditOptimize your store
PartnershipCareerBlogContact
Free Store Audit
Adfinite
Shopify AppsCustom AppsAutomationStore Audit
PartnershipCareerBlogContact
Free Store Audit

Growth Insights for Founders

Join founders scaling to $10M+. Battle-tested, purely technical scaling advice.

Adfinite

Intelligent apps and automation for high-growth Shopify brands. We turn complex problems into simple, revenue-generating solutions.

Shopify PartnerLinkedInInstagramXFacebook

Product

  • Storebeep
  • Sonic Speed
  • DailyBrief

Company

  • Blog
  • Glossary
  • Careers
  • Free Store Audit
  • Contact

Legal

  • Privacy Policy
  • Terms and Condition
Adfinite

Intelligent apps and automation for high-growth Shopify brands. We turn complex problems into simple, revenue-generating solutions.

Shopify PartnerLinkedInInstagramXFacebook

Product

  • Storebeep
  • Sonic Speed
  • DailyBrief

Company

  • Blog
  • Glossary
  • Careers
  • Free Store Audit
  • Contact

Legal

  • Privacy Policy
  • Terms and Condition

© 2026 Adfinite Solutions LLP. All rights reserved.

Make today amazing ✨
All systems operational
Adfinite
Shopify AppsReady-to-use solutions
Custom AppsTailored for your needs
AutomationStreamline your workflows
Store AuditOptimize your store
PartnershipCareerBlogContact
Free Store Audit
Adfinite
Shopify AppsCustom AppsAutomationStore Audit
PartnershipCareerBlogContact
Free Store Audit
/Blog/eCommerce

Fix Shopify Duplicate Content (Why Google Indexes the Wrong Product URLs)

Updated On Feb 24, 20269 min read
Akash Radadiya

Written By

Akash Radadiya
Akash Radadiya

Written By

Akash Radadiya

Akash Radadiya is a key contributor to the Adfinite blog.

LinkedIn
Free Site Audit

Unlock Your Store's Hidden Revenue

Get a comprehensive 30-point expert audit. Identify growth blockers, UX gaps, and speed issues.

Speed
SEO
CRO
Free Shopify Store Audit

Your Shopify store probably has more duplicate pages than you think. A single product listed in four collections with four variants creates 21 separate URLs that Google has to crawl just to find one actual product page. Scale that to a 500-product catalog and Google is wading through over 10,000 URLs to discover 500 real pages (Search Engine Watch, 2022).

And here is the part most merchants don’t know: Google ignores 30-40% of canonical tags when other signals conflict (GTech, 2024). So even though Shopify adds canonical tags automatically, Google frequently indexes the wrong URL anyway.

This guide shows you exactly where Shopify creates duplicate content, how to audit your store, and how to fix each issue with specific code changes and configuration steps.

How Shopify Creates Duplicate Content (It’s Built Into the URL Structure)

Shopify’s URL structure generates duplicates by design. Understanding the mechanics is the first step to fixing them.

Every Shopify product gets a canonical URL at /products/your-product-handle. But Shopify also creates a collection-aware URL for every collection that product belongs to: /collections/collection-name/products/your-product-handle. Add variant parameters and the URLs multiply fast.

Here is what the duplication looks like for a single product:

URL TypeExampleDuplicate?
Canonical product/products/grey-suede-jacketNo (preferred)
In collection A/collections/jackets/products/grey-suede-jacketYes
In collection B/collections/sale/products/grey-suede-jacketYes
In collection C/collections/new-arrivals/products/grey-suede-jacketYes
Variant on canonical/products/grey-suede-jacket?variant=39123456Yes
Variant in collection A/collections/jackets/products/grey-suede-jacket?variant=39123456Yes

One product. Six URLs minimum. And this is conservative — most products belong to more collections and have more variants.

The root cause sits in Shopify’s Liquid templates. The filter {{ product.url | within: current_collection }} generates collection-prefixed links throughout your store. Every product card, every internal link from a collection page, every “recently viewed” widget uses the non-canonical URL.

Diagram showing one product creating 6 different URL paths in Shopify - canonical URL highlighted vs duplicate collection and variant URLs

The 7 Types of Shopify Duplicate Content

1. Collection-Aware Product URLs

This is the biggest offender. Shopify’s Liquid template generates internal links using {{ product.url | within: current_collection }}, which creates URLs like /collections/jackets/products/grey-suede-jacket instead of the canonical /products/grey-suede-jacket.

The problem: every internal link on your site points to the non-canonical version. Google sees hundreds of internal links pointing to /collections/x/products/y and a lonely canonical tag saying “actually, use /products/y.” When signals conflict, Google picks what it wants.

The fix: Change your theme’s product link output from collection-aware to canonical URLs. In your theme files (typically product-card.liquid, product-grid-item.liquid, or card-product.liquid depending on your theme), replace:

Liquid
<a href="{{ product.url | within: current_collection }}" rel="nofollow">

With:

Liquid
<a href="{{ product.url }}" rel="nofollow">

This single change eliminates the largest source of duplicate internal links.

2. Variant Parameter URLs

Every product variant appends ?variant=12345678 to the URL. Shopify canonicalizes these back to the base product URL, but the variant URLs are still crawlable and appear in Google’s index.

The fix: Add variant URL parameters to your robots.txt to prevent crawling:

Disallow: /*?variant=*

This tells search engines not to crawl any URL containing the variant parameter while keeping the base product URL fully accessible.

3. Paginated Collection Pages

/collections/all and /collections/all?page=1 serve identical content. The first page of any paginated collection exists at two URLs. Shopify does not handle this automatically.

The fix: Add a conditional canonical in your theme.liquid or collection.liquid template that strips the ?page=1 parameter:

Liquid
1{% if request.path contains '/collections/' %} 2 {% if request.url contains '?page=1' %} 3 <link rel="canonical" href="{{ shop.url }}{{ request.path }}" /> 4 {% endif %} 5{% endif %}

4. Tag and Filter Pages

Shopify tags create URLs like /collections/shirts/red and /collections/shirts/blue. These tag pages often contain overlapping products, creating near-duplicate content. A product tagged “red” and “sale” appears on both tag pages.

The fix: Noindex tag pages that serve primarily as filtered views:

Liquid
{% if template contains 'collection' and current_tags %} <meta name="robots" content="noindex, follow"> <link rel="canonical" href="{{ shop.url }}{{ collection.url }}" /> {% endif %}

This tells Google to follow the links (so it discovers the products) but not to index the filtered page itself. The canonical points back to the unfiltered collection.

5. The /collections/all/ Pages

Shopify’s /collections/all/ path creates a massive index of every product. Products listed here get yet another duplicate URL. Tag pages under /collections/all/ (like /collections/all/sale) compound the issue.

The fix: Noindex the /collections/all/ path and its subpages:

Liquid
{% if request.path contains '/collections/all/' %} <meta name="robots" content="noindex, follow"> {% endif %}

Keep /collections/all itself if you use it as a “Shop All” page, but block the tag subpages.

6. The myshopify.com Domain

Every Shopify store has a default your-store.myshopify.com domain that serves the same content as your primary custom domain. If you haven’t configured your primary domain correctly, both domains are live and indexable.

The fix: Go to Settings > Domains in your Shopify admin. Make sure your custom domain is set as the primary domain and that “Redirect all traffic to this domain” is enabled. Shopify handles the 301 redirect automatically once configured.

7. Missing Hreflang Tags (International Stores)

If you use Shopify Markets or a translation app for multiple languages or regions, each language version of every product creates another potential duplicate. Without proper hreflang tags, Google treats your English and French product pages as duplicates rather than regional alternatives.

The fix: Implement hreflang tags that tell Google which language version to serve in each market. Shopify Markets handles this automatically for Markets-managed domains, but third-party translation apps may need manual hreflang configuration.

Checklist of 7 types of Shopify duplicate content: collection URLs, variant parameters, paginated pages, tag pages, collections-all, myshopify domain, and hreflang

How to Audit Your Store for Duplicate Content

Before you start fixing, you need to know the scale of the problem. Here is a three-step audit.

Step 1: Google Search Console Index Check

Open Google Search Console and go to Pages > Indexed pages. Then run these site searches in Google:

  • site:yourdomain.com/collections/ — see how many collection-aware product URLs are indexed
  • site:yourdomain.com inurl:variant — check for indexed variant URLs
  • site:yourdomain.com inurl:?page=1 — find indexed pagination duplicates

Compare the total indexed pages in Search Console against your actual page count (products + collections + blog posts + static pages). If the indexed count is significantly higher, you have a duplication problem.

Step 2: Crawl Your Store

Use Screaming Frog, Sitebulb, or Ahrefs Site Audit to crawl your store. Look for:

  • Duplicate content report: Pages with 85% or more content similarity (Semrush flags this threshold)
  • Canonical mismatches: Pages where the canonical URL differs from the page URL
  • Internal links to non-canonical URLs: How many internal links point to /collections/x/products/y vs /products/y

Step 3: Count Your URL Ratio

Do the math for your store:

  • Products: Count your total products
  • Collections per product: Average number of collections each product belongs to
  • Variants per product: Average variant count
  • Expected crawlable URLs: Products x (1 + Collections + Variants + (Collections x Variants))

A 500-product store where products average 3 collections and 3 variants creates 500 x (1 + 3 + 3 + 9) = 8,000 crawlable URLs for just 500 actual products. For guidance on your broader Shopify SEO setup, see our Shopify SEO checklist.

URL multiplication math showing 500 products creating 8000 crawlable URLs with 16x crawl waste

Fix Your Internal Linking (The Most Important Step)

Fixing canonical tags alone is not enough because Google ignores them 30-40% of the time. The most impactful fix is changing your internal links to point to canonical URLs. This aligns all signals — internal links, canonical tags, and sitemap entries — so Google has no reason to pick the wrong URL.

Find and Replace Collection-Aware Links

The primary offender is the | within: current_collection Liquid filter. Here is where to find it in common Shopify themes:

Dawn theme (and most OS 2.0 themes):

  • snippets/card-product.liquid
  • sections/featured-collection.liquid
  • sections/collection-template.liquid

Older themes (Debut, Brooklyn, etc.):

  • snippets/product-card-grid.liquid
  • snippets/product-grid-item.liquid
  • templates/collection.liquid

Search your theme code for within: current_collection and replace every instance:

Liquid
1<!-- Before: generates /collections/x/products/y --> 2<a href="{{ product.url | within: current_collection }}" rel="nofollow"> 3 4<!-- After: generates /products/y (canonical) --> 5<a href="{{ product.url }}" rel="nofollow">

What you lose: The collection breadcrumb context. When a customer clicks from a collection, the URL no longer reflects which collection they came from. Most stores won’t notice a difference in user behavior, but if collection-based breadcrumbs matter to your navigation, you can pass the collection context as a URL parameter instead:

Liquid
<a href="{{ product.url }}?ref={{ collection.handle }}" rel="nofollow">

This keeps the canonical URL clean while preserving the navigation context.

Update Your Sitemap

Shopify auto-generates your sitemap and includes only canonical URLs by default. Verify this by checking yourdomain.com/sitemap.xml. Every product should appear as /products/handle only, not as /collections/x/products/handle.

If you see non-canonical URLs in your sitemap, your theme may be overriding the default sitemap behavior. Check for custom sitemap templates and remove any collection-aware product URLs.

For more on improving your Shopify SEO foundations, see our guide on how to improve SEO on Shopify.

Before and after Liquid code change removing within current_collection filter to fix duplicate product URLs

Handle Canonical Tags Properly

Even with clean internal linking, canonical tags are still your second line of defense. Shopify adds them automatically, but there are cases where the default behavior needs adjustment.

Verify Default Canonicals

Every Shopify theme includes this in the :

Liquid
<link rel="canonical" href="{{ canonical_url }}" />

This handles most cases correctly. The {{ canonical_url }} variable returns the canonical URL for the current page, which for products is always /products/handle.

Add Conditional Canonicals for Edge Cases

For tag pages and filtered collections, add explicit canonical handling:

Liquid
1{% if template contains 'collection' and current_tags %} 2 <link rel="canonical" href="{{ shop.url }}{{ collection.url }}" /> 3{% elsif canonical_url != request.url %} 4 <link rel="canonical" href="{{ canonical_url }}" /> 5{% else %} 6 <link rel="canonical" href="{{ canonical_url }}" /> 7{% endif %}

Check for Canonical Conflicts

After implementing changes, verify there are no conflicting canonical signals:

  • Sitemap URLs should match canonical URLs
  • Internal links should point to canonical URLs
  • Canonical tags should specify canonical URLs
  • hreflang tags should reference canonical URLs

When all four signals agree, Google has no reason to index the wrong URL.

Four SEO signals aligned to same canonical URL: sitemap, internal links, canonical tags, and hreflang

Clean Up What Google Already Indexed

Fixing your templates prevents future duplicates, but you also need to clean up the URLs Google has already indexed.

Request Removal of Duplicate URLs

  1. In Google Search Console, go to Removals > Temporary Removals
  2. Submit the most egregious duplicate URL patterns (e.g., /collections/all/products/)
  3. Use the URL Inspection tool to check individual pages and request re-indexing of the canonical version

Monitor the Cleanup

After implementing fixes, track these metrics weekly:

  • Indexed pages count in Search Console (should decrease as duplicates drop)
  • Crawl stats in Search Console > Settings > Crawl statistics (crawl requests should become more efficient)
  • Coverage report warnings about duplicate pages

Most stores see duplicate URLs drop out of the index within 4-8 weeks after fixing the underlying issues. One Shopify store reported 500% organic growth after addressing tag and collection page duplication (Soard Digital, 2023).

The August 2025 Google spam update specifically targeted ecommerce sites with template-based duplicate content (NWS Digital, 2025). Cleaning up duplicates is no longer just a best practice — it’s protection against ranking penalties.

Timeline showing duplicate content cleanup process from implementation through Google re-crawl to index cleanup over 8 weeks

Duplicate Content Also Hurts Your AI Search Visibility

This is the angle most SEO guides miss entirely. Duplicate content doesn’t just affect Google rankings — it hurts your visibility in AI-powered search too.

Bing’s webmaster team confirmed in December 2025 that LLMs cluster near-duplicate URLs and select one representative page, which may be outdated or the wrong version of your product (Bing Webmaster Blog, 2025). When ChatGPT, Perplexity, or Google AI Mode encounters multiple versions of your product page, they pick one at random — and it might be the collection-filtered version with less information.

Clean, canonical URLs with consistent structured data give AI agents a single authoritative source for each product. This directly improves your chances of being cited in AI shopping recommendations.

For a deeper look at how your Shopify store can perform better in search overall, see our Shopify store checklist.

AI agent selecting wrong duplicate URL vs correctly selecting clean canonical URL for product recommendation

Prioritize Fixes by Impact

You don’t need to fix everything at once. Here is the priority order based on impact:

  1. Fix internal links (remove within: current_collection) — highest impact, aligns the strongest ranking signal
  2. Add robots.txt disallow for variant parameters — prevents thousands of unnecessary crawls
  3. Noindex tag and filter pages — removes the most common near-duplicate pages
  4. Set up conditional canonicals — reinforces the correct URL for edge cases
  5. Verify primary domain redirect — eliminates myshopify.com duplication
  6. Clean up paginated duplicates — removes?page=1 duplicates
  7. Add hreflang tags (if international) — prevents cross-language duplication

Start with fixes 1 and 2. They address the root causes and eliminate the largest volume of duplicate URLs. The remaining fixes handle edge cases that affect smaller portions of your catalog.

Priority bar chart showing fix order by impact: internal links first, then robots.txt, noindex tags, canonicals, domain redirect, pagination, hreflang
Akash Radadiya

About Akash Radadiya

LinkedIn

Read Next

More insights to help you grow.

View all articles
Google Product Grids on Shopify: Rank Your Products in Visual Search Results
eCommerce·Mar 18, 2026

Google Product Grids on Shopify: Rank Your Products in Visual Search Results

Generative Engine Optimization for Shopify Product Pages (GEO That Actually Drives Sales)
AI for Shopify·Mar 17, 2026

Generative Engine Optimization for Shopify Product Pages (GEO That Actually Drives Sales)

Build Topical Authority on Shopify (Why Your Blog Needs a Strategy, Not Random Posts)
eCommerce·Mar 16, 2026

Build Topical Authority on Shopify (Why Your Blog Needs a Strategy, Not Random Posts)

Growth Insights for Founders

Join founders scaling to $10M+. Battle-tested, purely technical scaling advice.

Adfinite

Intelligent apps and automation for high-growth Shopify brands. We turn complex problems into simple, revenue-generating solutions.

Shopify PartnerLinkedInInstagramXFacebook

Product

  • Storebeep
  • Sonic Speed
  • DailyBrief

Company

  • Blog
  • Glossary
  • Careers
  • Free Store Audit
  • Contact

Legal

  • Privacy Policy
  • Terms and Condition
Adfinite

Intelligent apps and automation for high-growth Shopify brands. We turn complex problems into simple, revenue-generating solutions.

Shopify PartnerLinkedInInstagramXFacebook

Product

  • Storebeep
  • Sonic Speed
  • DailyBrief

Company

  • Blog
  • Glossary
  • Careers
  • Free Store Audit
  • Contact

Legal

  • Privacy Policy
  • Terms and Condition

© 2026 Adfinite Solutions LLP. All rights reserved.

Make today amazing ✨
All systems operational