Canonical Tags on Shopify: How They Work and When They Break
Canonical tags tell Google which version of a page is the "official" one when multiple URLs show similar or identical content. On Shopify, that situation comes up constantly, products living at more than one URL, filtered collection pages, paginated content.
Shopify handles canonicals automatically on most page types, but the exceptions are the ones that quietly cost you rankings, because nothing about a wrong canonical throws an obvious error. The page just doesn't show up where it should.
How Shopify Handles Canonicals By Default
Out of the box, Shopify assigns canonical tags with different logic depending on page type:
- Product pages canonicalize to
/products/product-handle, no matter which path a visitor used to land there - Collection pages point to the clean collection URL, stripped of sort and filter parameters
- Blog posts canonicalize to
/blogs/blog-name/post-handle - Static pages point to
/pages/page-handle - Paginated pages self-canonicalize, page 2 points to itself, not back to page 1
- The homepage canonicalizes with consistent trailing-slash handling
For the vast majority of pages on a standard theme, this just works and you never have to think about it.
Where Canonicals Actually Go Wrong
Collection-filtered product URLs getting indexed anyway. Google sometimes indexes both /collections/category/products/item-name and /products/item-name, even with the canonical pointing the right way. When that happens, click and impression data splits across two entries instead of consolidating on one, which makes the page look weaker in Search Console than it actually is. The fix is to make sure every internal link, nav, related products, blog content, points to the clean /products/ URL, and to check your sitemap only lists the canonical version.
URL parameters that don't inherit the canonical properly. Tracking parameters added by marketing tools or third-party apps can sometimes create a page variant that doesn't carry the right canonical signal. Audit a sample of product pages with different parameter combinations attached and see what canonical tag each one actually renders. If an app is the culprit, that's a conversation with the app developer or a theme-level override.
Old domains or subdomains still sitting around. A legacy domain, a development store URL, a staging environment that never got locked down, any of these can end up indexed alongside your live site as a duplicate. Turn on "Redirect all traffic to primary domain" in your domain settings, and make sure any non-primary domain is issuing proper 301s rather than just quietly resolving.
Multi-currency and multi-region duplicates. If you're running Shopify Markets, every localized version of a page needs both a self-referencing canonical and correct hreflang tags pointing to its equivalents in other locales. Skip the hreflang piece and you're relying on canonicals alone to sort out what's genuinely duplicate content versus what's a legitimate regional variant, which they can't do on their own.
Tag pages and filtered collections. URLs like /collections/category/tag-name frequently amount to near-duplicate content with barely any of their own value. Either noindex the thin ones or, if a tag page genuinely earns its place with unique content, keep it, just don't leave a pile of thin tag pages sitting in the index by default.
Auditing Your Own Canonicals
Crawl the site. Screaming Frog or Sitebulb both work well here. You're checking that every page has a canonical tag, that product pages point to /products/ URLs, that collection pages reference parameter-free URLs, and that nothing is cross-canonicalizing to the wrong page entirely.
Check Google Search Console's Indexing report. "Alternate page with proper canonical tag" is expected and fine, that's the system working as intended. "Duplicate without user-selected canonical" is the one worth digging into, because it means Google found duplicates and picked a version on its own rather than following a signal you set.
Manually spot-check a handful of product pages. Visit the same five products through different paths, direct link, collection page, search, and confirm the canonical tag stays consistent no matter how you got there.
When It's Actually Worth Overriding the Default
Shopify's defaults are right for something like 95% of pages, so overriding them should be the exception, not a first move. The legitimate cases:
- Consolidating near-duplicate products, redirecting an old product URL, or adding a theme-level canonical override for cases the default logic doesn't handle
- Cross-domain canonicalization, usually a marketplace or multi-storefront settings question rather than something you solve in theme code
- Syndicated content, anything republished elsewhere should canonicalize back to your original
Get an override wrong and you can deindex a page that was ranking fine. Before touching theme-level canonical logic, be confident you understand exactly which pages the change will affect.
Overrides live in theme.liquid or the relevant layout file, as conditional logic that swaps out Shopify's canonical_url variable for specific page types while leaving the automatic behavior untouched everywhere else.
Canonical Tags vs. 301 Redirects
These get confused constantly, and they solve different problems:
Quick Action Steps
- View source on your homepage, a product page, and a collection page
- Search the page source for "canonical" and confirm each one points to a clean URL
- Open the Pages report under Indexing in Search Console and look for duplicate-content flags
Canonical tags are one of those pieces of technical SEO that work invisibly until they don't, and by the time you notice, you've usually already lost some indexing and ranking ground. Worth checking every few months, not just once and forgetting about it.
Want your canonical setup audited before it costs you rankings?
Connect with me on LinkedIn →