How Shopify Handles Canonical URLs by Default
Shopify auto-generates a canonical tag on every storefront page using the format <link rel='canonical' href='...'> injected through the theme's layout files. For most product, collection, blog, and page templates, this tag points to the primary URL Shopify considers canonical โ typically the clean, shortest URL without query strings or UTM parameters.
The critical default behavior: Shopify product pages are accessible at two URL structures โ /products/[handle] and /collections/[collection-handle]/products/[handle]. Shopify automatically sets the canonical on the collection-scoped URL to point back to /products/[handle], consolidating link equity to one version. This behavior is built into Liquid theme code and does not require any app or configuration.
Where Shopify's Automatic Canonicalization Falls Short
Shopify strips query parameters from canonical tags across the board. That works well for UTM parameters and sort orders, but it creates a problem for faceted navigation. If a collection page appends ?color=red&size=M to filter results, the canonical still points to the base collection URL. Search engines receive no signal about whether those filtered pages should be indexed or ignored, so duplicate content can accumulate silently.
Pagination is another gap. Shopify uses ?page=2 query parameters for paginated collections and blog archives. The canonical on page 2 points to page 1 (the base URL), not to the paginated URL itself. This collapses all paginated content signals onto page 1, which means products appearing only on later pages get no independent indexing signal. Shopify deprecated rel=prev/next in 2019 and never provided a replacement.
International stores using Shopify Markets face a separate issue. Shopify generates hreflang tags for international subfolders or domains, but canonical management across locales requires careful auditing. A product accessible at /en-us/products/handle and /en-gb/products/handle needs each version to self-reference canonically rather than cross-reference, and Shopify does not always get this right without theme customization.
Shopify-Specific Canonical URL Conventions to Know
Every Shopify store enforces HTTPS and resolves www vs. non-www to a single preferred domain set in Settings > Domains. The canonical tag reflects whichever domain is marked as primary. If a merchant adds a third-party domain and sets it as primary, all canonical tags update automatically โ there is no manual tag editing needed in the theme.
Shopify appends .liquid extensions to theme template filenames but the rendered canonical URLs never expose these. The canonical for a product with handle 'blue-widget' is always https://[domain]/products/blue-widget with no extension. Shopify's URL structure is fixed โ merchants cannot change /products/, /collections/, /blogs/, or /pages/ as URL prefixes, which affects how canonical structure is planned for SEO.
Variant URLs are another Shopify-specific issue. When a customer selects a product variant, Shopify appends ?variant=XXXXXXXX to the URL. The canonical tag on variant URLs correctly points to the base product URL (/products/[handle]), preventing each variant from competing as a separate page. This is correct default behavior, but it means variant-specific content gets no independent indexing signal โ intentional for most stores, but worth knowing.
Apps and Theme Code That Fix Canonical Gaps
For faceted navigation, apps like Boost Commerce Product Filter & Search and Searchpie generate JavaScript-driven filtering that keeps the browser URL clean (or updates it predictably). Some of these apps include canonical tag management as part of their SEO settings, letting merchants designate the unfiltered collection URL as canonical regardless of active filters. Confirm any filter app's canonical behavior before installing โ some apps do not touch canonical tags at all and leave merchants exposed to duplication.
For stores that need custom canonical overrides on specific pages โ a duplicated landing page, a promotional URL that mirrors a product page โ the cleanest fix is editing the theme's layout or template files directly. In Dawn and other Shopify-supported themes, the canonical tag lives in theme.liquid inside the <head> block. Adding a Liquid conditional that checks for a metafield value (e.g., page.metafields.seo.canonical_url) lets merchants override canonical URLs per-page through the Shopify admin without touching code again.
Shopify's native SEO tab in the product and page admin exposes a URL handle field and meta title/description fields, but it does not expose a canonical URL override field. This is a documented limitation. The metafield workaround above is the standard merchant-side solution used by Shopify Plus agencies when full developer access is not available.
Auditing Canonical Tags on a Shopify Store
Crawl the store with Screaming Frog or Ahrefs Site Audit and filter for pages where the canonical URL does not match the current page URL. On a Shopify store, expect to see this on every /collections/[collection]/products/[handle] URL โ that is intentional. Flag any page where the canonical points to a 404, a redirected URL, or a domain different from the live primary domain.
Check Google Search Console's Page Indexing report under the 'Duplicate without user-selected canonical' and 'Google chose different canonical than user' statuses. These two labels indicate where Shopify's automatic canonical tags are either absent or unconvincing to Google. Products that Shopify considers canonical at /products/handle but Google indexes at the collection-scoped URL are a common finding and require no fix โ Google's choice does not mean the canonical is wrong.
Run a spot-check on the store's primary collection pages with active filters applied. View page source and search for 'canonical'. If the canonical value changes based on filter state, an app or theme customization is overriding Shopify's default โ audit whether that override is deliberate. If the canonical stays fixed at the base collection URL regardless of filters, the default behavior is intact.
Actionable Steps for Shopify Canonical URL Management
Start with a crawl to confirm the default canonical structure is intact and no theme app or third-party script is overwriting canonical tags incorrectly. Then check three high-risk areas specific to Shopify: faceted filter pages, Shopify Markets locale URLs, and any custom landing pages built by duplicating existing page templates. These three areas account for the majority of canonical errors found on mid-to-large Shopify stores.
For stores on Shopify Plus, request that the development team implement a metafield-driven canonical override system in the theme. This costs minimal development time and gives the merchandising team direct control over canonical URLs for promotional or editorial pages without a code deploy. For standard Shopify plans, use an SEO app that exposes a canonical field per page, or plan canonical strategy around the fixed URL structure Shopify enforces rather than trying to override it.