Duplicate content in online stores: collections, tags and canonical URLs

Why one product can appear at several addresses in a store, what it does to search rankings, and how to point everything at one.

3 minread 741words last updated

The short answer

On a Shopify store, one product can be reached at several addresses: its plain product address and a nested address for every collection it appears in, while collection pages themselves multiply through tags, sorting and filters. To a search engine each address is a page, and identical pages at many addresses dilute ranking and waste crawl. Shopify handles the most important case by default: product pages carry a canonical tag pointing at the plain product address. The problems come from around that default. Themes link internally to the collection-nested addresses. Apps inject filter pages that get indexed. Tag pages repeat collection content. The fix is to point everything at one address per product and one per collection, and to check the search console rather than trusting that the defaults survived the theme and the apps.

Where duplicates come from

SourceExampleDefault handlingWhere it breaks
Collection-nested product addressesThe same product under each collection pathCanonical to the plain product addressThemes that link to nested addresses; apps that override canonicals
Tag pagesA collection filtered by a tagIndexable by defaultThin, overlapping pages in the index
Sort and filter parametersA collection sorted by price or filtered by sizeCanonical usually points at the base collectionFilter apps generating indexable pages
PaginationPage two, three of a collectionSelf-referencing canonicalsFine, if not blocked or mishandled
Blog tags and archivesPosts repeated under tagsIndexableDuplicate excerpts across many pages
Multiple domains or marketsSame content per country domainHandled with Markets and hreflang when configuredMisconfigured markets duplicating without hreflang

Fixing it

  1. Check the theme’s product links: collection cards and search results should link to the plain product address, not the nested one.
  2. Confirm canonicals on product pages point at the plain address, even when reached through a collection, and that no app overrides them.
  3. Decide about tag pages: canonicalise to the collection or exclude from indexing, unless deliberately built as landing pages.
  4. Keep filter and sort variants out of the index: canonical to the base collection; check what filter apps generate.
  5. Review blog tag and archive pages the same way.
  6. If you use multiple markets or domains, confirm hreflang and canonicals are set per market.
  7. Read the search console’s indexing report and fix whatever it shows it chose differently from you.

On a headless storefront

When the storefront is built separately, the address structure is designed rather than inherited: one address per product, one per collection, filters applied without creating indexable variants, canonicals generated from one rule, tag pages only where they earn their place. It is one of the quieter advantages of building the storefront: duplicates are a decision rather than a default to work around.

What this means for you

Give every product and collection one address, link to it consistently, keep tag, filter and sort variants out of the index, and check the search console’s choices rather than assuming the defaults held. Shopify’s defaults are sound; themes and apps are where they break. An hour with the indexing report usually finds where your crawl is going, and it is rarely where you want it.

Written by the CivSec S.M.A.R.T team

We build and run websites, software and AI systems for businesses. We write about what we see in that work, in plain language, and we update articles when things change.

Last checked . Spotted something outdated? Tell us.

Frequently asked questions

Is duplicate content on Shopify a penalty risk?

Rarely a penalty, routinely a dilution: search engines pick one address to index and may split credit between variants, and crawl budget is spent on copies. Shopify's default canonicals handle the product variants correctly; the problems come from themes that link to collection-nested product addresses, apps that inject filter pages, and blog or tag pages that repeat content.

Should our tag pages be indexed?

Usually not. Tag pages are filtered views of collections with thin, overlapping content. Keep them for navigation but canonicalise them to the collection or exclude them from indexing, unless a specific tag page has been built up with unique content and earns its place as a landing page.

How do we check what search engines have indexed?

The search console's page indexing report shows which addresses are indexed and which were excluded as duplicates, with the canonical the search engine chose. Compare its choices with yours. Where it chose a collection-nested product address or a filter variant, find the internal links pointing there and fix them.

Sources

  1. Shopify Help Center: SEO overview (accessed 2026-09-12)
  2. Google Search Central: Consolidate duplicate URLs (accessed 2026-09-12)