You know what the real question is? Store owners want to know if Shopify duplicate content is hurting their rankings, and what to change first. The short answer is that Shopify already handles part of it. It adds a canonical tag to every page, so most duplicate URLs point back to one main version. But real problems still come from theme links, tag pages, copied product text, extra domains and duplicate products.
We went through the Shopify Help Center, the Shopify developer docs and Google Search Central so you don’t have to. In our research, we found eight fixes that cover almost every Shopify duplicate content issue. Some take two minutes in the admin. Others need a small edit in your theme code. Each fix comes with the exact menu path or code line.
- Match Each Shopify Duplicate Content Source to Its Fix
- Skip the www and HTTPS Duplicates Shopify Already Handles
- Find Shopify Duplicate Content in Google Search Console
- 1. Confirm the Canonical Tag on Shopify Product and Variant URLs
- 2. Link Products Without the Collection Path in Shopify
- 3. Noindex Shopify Tag and Filter Pages in theme.liquid
- 4. Give Each Shopify Collection Page Its Own Canonical
- 5. Rewrite Manufacturer Product Descriptions on Your Shopify Store
- 6. Set Up Shopify Markets Hreflang Without Duplicate Domains
- 7. Merge Duplicate Shopify Products and Collections With Redirects
- 8. Edit robots.txt.liquid to Cut Shopify Crawl Waste
- Answer Common Shopify Duplicate Content Questions
- Does Google penalize Shopify stores for duplicate content?
- Why does Search Console show “Alternate page with proper canonical tag” on my Shopify store?
- Should I remove /collections/ from Shopify product URLs?
- Do Shopify variants need their own canonical tags?
- Is a Shopify SEO app needed to fix duplicate content?
- Fix Shopify Duplicate Content in This Order
Match Each Shopify Duplicate Content Source to Its Fix
We compiled every common source of duplicate pages on a Shopify store into one table. Use it as a map, then jump to the fix you need.
| Duplicate source | Example URL | Fix | Where you make it |
|---|---|---|---|
| Variant and tracking parameters | /products/tee?variant=123 | Keep the canonical tag in place | theme.liquid |
| Collection-aware product links | /collections/sale/products/tee | Link to /products/ URLs only | Product card snippet |
| Tag pages | /collections/shirts/blue | Add a noindex meta tag | theme.liquid |
| Paginated collections | /collections/shirts?page=2 | Give each page its own canonical | Theme head code |
| Manufacturer descriptions | Same text as other stores | Rewrite the copy | Product editor |
| International markets | example.com and example.co.uk in one language | Keep hreflang on, avoid same-language domains | Markets and Preferences |
| Duplicate products or collections | /products/tee and /products/tee-copy | Merge and redirect | Content > Menus > URL Redirects |
| Crawl waste from filters and search | /collections/shirts?sort_by=price | Add rules in robots.txt.liquid | Theme templates |
The www, non-www and HTTP versions are missing from that list for a reason. Shopify handles them for you, and we explain how in the next section. So you can spend your time on the eight items that need a human.
Skip the www and HTTPS Duplicates Shopify Already Handles
Shopify gives each store one primary domain. Any domain set as a redirect domain sends visitors to that primary domain. As a result, the www and non-www versions of your store stop competing once your primary domain is set.
HTTPS works the same way. Shopify provides TLS certificates for free for all domains added to Shopify. Then visitors who use the original address get redirected to the encrypted store. You don’t need a plugin or a manual redirect for any of this.
There is one trap. Shopify also offers alias domains, and an alias does not redirect to the primary domain. The alias stays in the address bar. So an extra domain set up as an alias can serve a full copy of your store. Go to Settings > Domains and check the type of every domain you own. Unless you have a clear reason, set extra domains to redirect.
Find Shopify Duplicate Content in Google Search Console
Before you edit anything, look at what Google already sees. Open the Page indexing report in Search Console. Three statuses point straight at Shopify duplicate content.
- Alternate page with proper canonical tag. The page is marked as an alternate of another page. Google treats this as correct behavior, so variant and collection URLs here are fine.
- Duplicate without user-selected canonical. The page is a duplicate, but it does not name a preferred page. Google picks another URL and skips this one in Search.
- Duplicate, Google chose different canonical than user. Your page says it is the canonical, but Google prefers another URL. This one needs a close look.
Next, paste a few product URLs into the URL Inspection tool. It shows the canonical you declared next to the canonical Google selected. If the two differ on key products, the fixes for copied text and duplicate products matter most. Some pages may also overlap on the same terms. Our guide to the query cannibalization report in Search Console shows how to spot them.
1. Confirm the Canonical Tag on Shopify Product and Variant URLs
Shopify adds canonical tags automatically to prevent duplicate content in search results. In a theme, the tag sits in the head section of layout/theme.liquid and looks like this.
<link rel="canonical" href="{{ canonical_url }}">
This one line covers most variant URLs. When a shopper picks a size or color, the address changes to something like /products/tee?variant=123. The page content barely changes, but the URL does. The canonical tag tells Google that the plain /products/tee URL is the main version.
Tracking links get the same treatment. Your email and ad links add parameters, and the canonical tag pulls them back to one page.
Check the Shopify Canonical Tag in Three Minutes
- Open any product page on your live store and add ?variant= plus a variant ID to the URL.
- Right-click and choose View page source.
- Search the source for rel=”canonical” and confirm the href shows the clean /products/ URL.
- Repeat on a collection page and a blog post.
In our research, we found two ways this tag breaks. Some SEO apps add their own canonical tag, and then the page carries two. Others hard-code one URL into theme.liquid by mistake. Did you find two tags, or one that points to the wrong page? Remove the extra and keep the {{ canonical_url }} line.
Google treats a canonical tag as a signal, so it is not a command. Even so, Google ranks redirects and rel=”canonical” annotations above sitemap inclusion. On Shopify, the canonical tag is the main tool you have for variants.
2. Link Products Without the Collection Path in Shopify
A Shopify product can load at two kinds of address. One is /products/tee. The other is /collections/sale/products/tee. Each one shows the same product page. Shopify’s developer docs say this plainly and ask theme builders to consider the SEO effect.
The collection-aware URL comes from a Liquid filter called within. A theme that uses it in product cards sends shoppers, and Google, to the longer URL. The canonical tag on that page still points to the main /products/ URL. But every internal link now points at a duplicate, and Google has to crawl two versions.
Edit the Shopify Product Card Snippet
- In your Shopify admin, go to Online Store > Themes.
- Make a copy of your live theme first, so you can roll back.
- On the copy, click the three-dot menu and choose Edit code.
- Search all files for within: collection. It usually sits in a product card or product grid snippet.
- Change each match to the plain product URL, as in the example that follows.
- Preview the copy, click a few product cards, and confirm each URL begins with /products/.
Before: <a href="{{ product.url | within: collection }}">
After: <a href="{{ product.url }}">
This edit changes links only. The /collections/…/products/ URLs still load if someone types them, and their canonical tag still points home. In fact, that is fine. The goal is to stop your own theme from creating thousands of internal links to duplicates.
3. Noindex Shopify Tag and Filter Pages in theme.liquid
Shopify creates a new page for every product tag you filter by. A collection at /collections/shirts can also load at /collections/shirts/blue, /collections/shirts/cotton and so on. These pages share the same title, the same description and most of the same products. On a store with 50 tags, one collection can spawn 50 near-copies.
Shopify’s default robots.txt already blocks some of this. It disallows /collections/*+*, which covers pages filtered by more than one tag. It also blocks /collections/*sort_by*, which covers sorted lists. But a single-tag page such as /collections/shirts/blue stays open to crawlers.
Add a Noindex Rule for Shopify Tag Pages
Shopify’s help article on hiding pages uses a meta tag in the head of theme.liquid. We adapted the same method for tag pages. Paste this on a blank line inside the head section.
{% if current_tags %}
<meta name="robots" content="noindex, follow">
{% endif %}
The current_tags object only has a value when a tag filter is active. So the rule touches tag pages and leaves normal collection pages alone. The follow part lets Google keep following product links on those pages.
Don’t block the same tag URLs in robots.txt at the same time. Google has to crawl a page to see its noindex tag. If robots.txt blocks the page, Google never reads the tag. The URL can then still get indexed from links that point to it. Google’s Page indexing report even has a status for that case: indexed, though blocked by robots.txt.
Some stores use tag pages on purpose, for example /collections/shoes/waterproof as a landing page with its own text. If you do that, add an unless condition for those tags so they stay indexable. Then give each one a unique title and intro.
For single products or pages, Shopify also offers a seo.hidden metafield. You create it under Settings > Metafields and metaobjects. Set it to 1 on an item, and Shopify hides that item from search engines.
4. Give Each Shopify Collection Page Its Own Canonical
Large collections split into pages such as /collections/shirts?page=2. Google treats each URL in a paginated sequence as a separate page. That is normal and not a duplicate content issue by itself.
The problem starts when a theme or app points every page back to page 1. Google’s ecommerce guidance says not to use the first page of a paginated sequence as the canonical page. Products listed on page 3 would then lose their only crawl path from that collection.
Check Shopify Pagination Canonicals and Titles
- Open page 2 of a large collection and view the source. The canonical should include ?page=2, not the bare collection URL.
- Look at the title tag. Shopify’s theme docs show a title pattern that adds “Page 2” after the first page.
- Don’t add noindex to paginated pages. Google needs them to reach products deep in the list.
- Skip rel=”next” and rel=”prev” work. Google says it no longer uses those tags.
If your theme uses infinite scroll or a load-more button, test it with JavaScript turned off. Google ignores anything after a # in a URL. So page links must use real ?page= addresses, or Googlebot may miss products further down the list.
5. Rewrite Manufacturer Product Descriptions on Your Shopify Store
This is the one Shopify duplicate content issue that has nothing to do with URLs. Many stores paste the description a brand supplies. The same paragraph then appears on the brand’s site, on Amazon and on dozens of other shops. When many pages carry identical text, Google tends to show only one of them.
Copied text is also the slowest fix to clear, because each product needs fresh writing. So work in order of revenue.
Rewrite Shopify Product Copy in Order of Sales
- Export your products and sort them by sales or sessions.
- Take the top 20 products and rewrite those descriptions first.
- Add details only you know: fit notes, real photos, care tips, what customers ask support.
- Keep the spec table from the manufacturer if it is accurate. Rewrite the sales paragraph around it.
- Write a unique SEO title and meta description in the Search engine listing section of each product.
Next, check your collection pages. Many themes show only a product grid, so two collections with similar products can look identical to Google. A short, unique intro on each collection gives it its own purpose. Our list of ecommerce content writers covers writers who handle product copy at volume. Then use the keyword research guide to pick the terms each page should target.
6. Set Up Shopify Markets Hreflang Without Duplicate Domains
Selling in several countries can copy your whole store several times. A US store, a UK store and an Australian store may share the same English text on three URLs. Shopify Markets is built to handle this, as long as you keep its defaults.
Shopify generates hreflang tags automatically from your market and language setup. It creates them for every international domain or subfolder you add. Canonical URLs are set automatically on all pages. Sitemaps include all market-specific URLs and all published languages. On top of that, automatic redirection applies to customers, but search engine crawlers are excluded. So Google can still reach every market version.
Avoid These Shopify Markets Duplicate Content Mistakes
- Two domains in one market with the same language. Shopify warns that search engines might flag this as duplicate content. Use one domain or subfolder for each language in a market.
- Turning off automatic hreflang tags. The switch is under Online Store > Preferences. If you turn it off, you must add your own hreflang tags to the theme.
- Untranslated market pages. A French market that shows English text is a copy of your main store. Translate the content with Shopify’s Translate & Adapt app or a translation service.
For wider context on the platform, see our Shopify statistics roundup.
7. Merge Duplicate Shopify Products and Collections With Redirects
Stores collect duplicates over time. Someone copies a product to save typing, a seasonal collection overlaps with a permanent one, or an import runs twice. You end up with /products/linen-shirt and /products/linen-shirt-1 selling the same thing.
Pick one version to keep. Choose the one with the most sales, reviews and backlinks. Then move any unique reviews or text to it before you touch the other one.
Redirect the Old Shopify URL to the Main Product
- Archive or delete the duplicate product or collection.
- In your Shopify admin, go to Content > Menus and click View URL Redirects.
- Click Create URL redirect.
- Enter the old path in Redirect from, for example /products/linen-shirt-1.
- Enter the main path in Redirect to, for example /products/linen-shirt.
- Click Save redirect, then test the old URL in a private browser window.
Order matters here. Shopify only redirects broken URLs. If the old product still loads a valid page, the redirect won’t work. So remove the duplicate first and then add the redirect.
Shopify allows up to 100,000 URL redirects, and Plus stores get a far higher cap. A few limits apply. You can’t redirect tag-filtered collection URLs, or paths that begin with /cart, /apps or /orders. For product variations such as color and size, use variants on one product. A separate product for each color creates the exact duplication you just cleaned up.
8. Edit robots.txt.liquid to Cut Shopify Crawl Waste
Shopify generates a robots.txt file for every store, and it works well for most. Its default rules already block the cart, checkout, account pages, multi-tag collection pages and sorted collection pages. You only need to edit it for a clear, specific reason.
Use robots.txt to save crawl time on endless URL patterns. Don’t use it to pick a canonical page. Google says not to use robots.txt for canonicalization, because blocked URLs can still get indexed without their content. Canonical tags and noindex do that job better.
Create the robots.txt.liquid Template in Shopify
- From your Shopify admin, go to Online Store.
- For the theme, click the three-dot menu, then Edit code.
- Click Add a new template, select robots, then click Create template.
- Make your change and save the file in your published theme.
Shopify’s developer docs show how to add a rule to the default group without losing Shopify’s own rules. This example adds a block on site search query URLs to the group for all crawlers.
{% for group in robots.default_groups %}
{{- group.user_agent }}
{%- for rule in group.rules -%}
{{ rule }}
{%- endfor -%}
{%- if group.user_agent.value == '*' -%}
{{ 'Disallow: /*?q=*' }}
{%- endif -%}
{%- unless group.sitemap == blank -%}
{{ group.sitemap }}
{%- endunless -%}
{% endfor %}
Two warnings from Shopify matter here. Shopify Support can’t help with edits to this file. And incorrect use can result in the loss of all traffic. Save a copy of your current /robots.txt before you start, and compare it with the new output after you save. To go back to the default file, delete the robots.txt.liquid template.
Thinking of blocking AI bots in this file too? Read our guide to SEO for ChatGPT citations first.
Answer Common Shopify Duplicate Content Questions
Does Google penalize Shopify stores for duplicate content?
Google’s canonical docs don’t describe a penalty. They say your site will likely do fine without a canonical preference. Google then picks the version it thinks is best. The real cost is wasted crawling and links split across several URLs.
Why does Search Console show “Alternate page with proper canonical tag” on my Shopify store?
Those are usually variant or collection-aware URLs pointing to the main product URL. Google calls this correct behavior. You don’t need to fix anything for those URLs.
Should I remove /collections/ from Shopify product URLs?
You can’t change Shopify’s URL structure, and you don’t need to. Change the links in your theme so they point to /products/ URLs. The canonical tag already handles any collection-aware URL that still gets visited.
Do Shopify variants need their own canonical tags?
No. Variants on one product share one page, so the canonical should point to the main product URL. Only create separate products when a variation needs its own page, its own description and its own search demand.
Is a Shopify SEO app needed to fix duplicate content?
Not for the eight fixes here. Every one of them runs through the admin or a few lines of theme code. Some apps add a second canonical tag, so check the page source after you install one. Our list of free SEO tools is a place to find a crawler for that check.
Fix Shopify Duplicate Content in This Order
Open Search Console first, because it tells you which issue is real on your store. Then check the canonical tag and the theme’s product card links, since those two take minutes and affect every product. After that, add the noindex rule for tag pages and set every extra domain to redirect.
Leave robots.txt.liquid for last, and only edit it with a clear reason. Our recommendation for most stores is to spend the saved time on product copy. Rewriting the top 20 product descriptions does more than any code change. It gives Google a reason to rank your page over other stores selling the same item. Want to hand the work off? Compare options in our list of Shopify SEO companies in the USA. The ecommerce SEO statistics page adds context on organic search for online stores.
