How to fix Shopify duplicate content and faceted URLs

Ecommerce SEO · 10 min read

How to fix Shopify duplicate content and faceted URLs

Collection filters, tags and vendor URLs quietly duplicate your Shopify store. Here's the canonical, robots and metafield fix that recovers wasted crawl budget.

Published 23 July 2026·By the BeingEcom team

Short answer

Shopify auto-canonicals product URLs but leaves collection filters, tags and vendor URLs to duplicate themselves. Fix in three moves: block filter parameters in robots.txt.liquid, add noindex to tag pages via theme conditional, and verify the theme sets correct canonicals on filtered collection URLs.

What Shopify duplicates by default

  • Filtered collections: /collections/x?filter.p.vendor=y
  • Tag pages: /collections/all/tag-name
  • Vendor URLs: /collections/vendors?q=Brand
  • Search URLs: /search?q=term
  • Pagination in some themes: /collections/x?page=2

Every one of these is a distinct URL Google can crawl and (sometimes) index. On a store with 500 products and 5 filters, that's thousands of near-duplicate pages competing with your canonical collection.

Fix 1 - Block filter parameters in robots.txt

Create or edit templates/robots.txt.liquid and add:

{% for group in robots.default_groups %}
{{ group.user_agent }}
{% for rule in group.rules %}{{ rule }}
{% endfor %}
Disallow: /*?*filter.
Disallow: /*?*sort_by=
Disallow: /search
{% endfor %}

This tells Google not to crawl any URL containing ?filter. or?sort_by= without breaking the URLs for users.

Fix 2 - Noindex tag pages

In your theme's theme.liquid, add inside the <head>:

{% if template contains 'collection' and current_tags %}
  <meta name="robots" content="noindex, follow">
{% endif %}

Tag pages stay accessible and pass link equity but drop out of the index. On stores with 20+ tags per collection this alone can recover 10-20% of crawl budget.

Fix 3 - Verify collection canonicals

Filtered collection URLs should <link rel="canonical"> back to the unfiltered collection. Shopify Dawn does this correctly. Older themes (pre-2022) and heavily customised themes often don't. Test with:

curl -s https://yourstore.com/collections/x?filter.p.vendor=y | grep canonical

The canonical should point to /collections/x, not/collections/x?filter.p.vendor=y. If it doesn't, editsections/main-collection.liquid or your equivalent to output the canonical from collection.url.

How to verify the fix worked

  1. Submit an updated sitemap in Search Console.
  2. Wait 14-28 days.
  3. Check the Indexed, not submitted in sitemap report - it should drop.
  4. Check the Excluded by 'noindex' tag and Blocked by robots.txt counts - they should rise, matching your intentional blocks.

Bonus - handle search URLs

Shopify's internal search URLs (/search?q=) create infinite low-quality index entries. Blocking them via robots.txt (as above) is enough for most stores. If you want to be extra safe, add noindex to the search template as well.

Tools & resources

Free UK ecommerce calculators, definitions and benchmarks referenced in this guide.

Frequently asked

Frequently asked questions

Partially. Shopify auto-canonicals /products/x when accessed via a collection (/collections/y/products/x) back to /products/x. It does NOT handle faceted filters (?filter.p.vendor=), tag URLs, or search URLs - those need robots.txt or noindex intervention.

Not sure which platform fits your brand?

Book a free 30-minute call. We'll look at your revenue stage, catalogue and roadmap, and give you a straight answer.