Field notes
Shopify Hreflang Setup: Multi-Market SEO Without the Self-Referencing Trap
November 2, 2025
The international SEO bug that wipes out market launches
A cosmetics client launched Canada and UK markets on Shopify Markets, expected a traffic lift from duplicate content finally being disambiguated, and instead saw their US rankings drop 18 percent within three weeks. The cause: their hreflang tags were self-referencing but non-reciprocal on 340 blog posts, which Google treated as conflicting locale signals across the site. Six days of rework, a clean sitemap-based hreflang strategy, and rankings recovered. But the revenue lost during those three weeks was north of $400K.
TL;DR ▸ Hreflang is the riskiest international SEO signal to get wrong on Shopify because errors cascade across locales ▸ Use subfolders, emit hreflang via XML sitemap, and include x-default on every set ▸ Every locale must reference every other locale, including itself ▸ Shopify Markets handles PDPs and collections but misses custom pages and blog posts
The four-locale example that works
For a brand operating in US, Canada, UK, and Australia, here is the hreflang set for a single product page. Every URL in the set references every other URL in the set plus itself, plus the x-default pointer.
<link rel="alternate" href="https://www.example.com/products/merino-200" hreflang="en-us" />
<link rel="alternate" href="https://www.example.com/en-ca/products/merino-200" hreflang="en-ca" />
<link rel="alternate" href="https://www.example.com/en-gb/products/merino-200" hreflang="en-gb" />
<link rel="alternate" href="https://www.example.com/en-au/products/merino-200" hreflang="en-au" />
<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />
Four market URLs plus one x-default, emitted on every one of the four market URLs. The return tag requirement is strict: if en-us references en-ca, then en-ca must reference en-us. A one-way reference is ignored entirely.
Why XML sitemap hreflang beats HTML hreflang on Shopify
Two delivery mechanisms exist for hreflang. HTML link tags in the head, and hreflang annotations inside XML sitemaps. Google treats both as equivalent. Practically, sitemap-based hreflang is easier to maintain on Shopify because you do not have to touch theme code per market, and the cross-locale references live in one file that you can diff and validate programmatically.
The catch: Shopify's native sitemap does not include hreflang annotations. You need a custom sitemap generator, either a Shopify app with proper international support or a server-side generator running on a subdomain. The generator reads product, collection, and page data from each market, pairs them by handle, and emits a single sitemap with all locale variants per URL.
The head-tag approach works too, but it requires theme-level logic to emit the full locale set on every template, including blog posts, policy pages, and custom landing pages. Shopify Markets does this for PDPs and collections by default but misses the long tail.
The locale mapping table every store needs
Every Shopify store operating in more than one market should maintain a master mapping table. One row per product handle, one column per market, populated with the locale-specific URL or a null if the product is not sold in that market.
| Product handle | en-us | en-ca | en-gb | en-au | x-default |
|---|---|---|---|---|---|
| merino-200 | /products/merino-200 | /en-ca/products/merino-200 | /en-gb/products/merino-200 | /en-au/products/merino-200 | / |
| merino-400 | /products/merino-400 | /en-ca/products/merino-400 | null | /en-au/products/merino-400 | / |
| special-edition | /products/special-edition | null | null | null | / |
This table drives the sitemap generator. When a market does not carry a product, the cell is null, and hreflang annotations skip that locale for that URL. What you do not do is point en-gb to the en-us version as a fallback. Google treats that as a signal that the en-gb market exists but has no unique content, which damages overall international ranking.
Handling collection and blog content across markets
Collection pages need hreflang too, and collection handles often differ across markets because merchandising teams localize naming. The US store might have /collections/mens-base-layers while the UK store has /en-gb/collections/mens-thermal-tops. You cannot pair URLs by handle in this case. You pair them by a stable identifier, either a collection metafield called international.equivalent_handle or a matching tag.
Blog posts are worse. Content teams frequently publish localized variants that do not map one to one. An article about "Best Ski Gear for Colorado" in the US market has no UK equivalent. In that case, the article is single-locale, has no hreflang annotations, and relies on x-default for global discovery. Forcing a mapping where none exists creates worse problems than omitting the annotation.
Our Shopify SEO checklist covers the content matrix decisions in more depth, and the technical SEO audit post has the indexation implications.
Currency, geotargeting, and why hreflang is not the only signal
Hreflang tells Google about language and regional intent. It does not handle currency display, tax calculation, or geoip redirection. Those live in Shopify Markets configuration. The three systems must agree, which is where most implementations break.
Common misalignment: hreflang says en-gb, but the UK market is misconfigured so it accepts orders in USD only. A user clicks from a UK SERP, lands on the en-gb URL, sees USD pricing, and bounces. Analytics shows the en-gb market as low-converting. The fix is configuration, not SEO.
Geoip redirection should be avoided or restricted to soft prompts. Hard redirecting based on IP breaks Googlebot crawling because Googlebot crawls from US IPs and will never see the localized content. Use a language selector modal on first visit, honor the user's choice in a cookie, and let the URL structure do the rest.
The hreflang audit workflow
Three tools, one process. First, Screaming Frog crawls the site with hreflang extraction enabled. Export the hreflang report and check for missing return tags and self-referencing gaps. Second, Google Search Console International Targeting report. Check the Language report for errors. Third, manual spot-checks of ten URLs per market in the Rich Results Test to confirm the annotations are reaching the rendered HTML.
Run this audit monthly. The failure modes are drift, not bugs. A content team adds a new blog post in two locales but forgets to link them. A merchandising team renames a collection handle in the UK market and breaks the pairing. A dev deploys a theme update that strips hreflang tags from a custom landing page template. All of these are caught by a monthly audit and become silent losses if you do not run one.
Shopify Markets gotchas
Shopify Markets is the default approach for international expansion on Shopify Plus, and it is good, but four gotchas come up on almost every audit. First, metafield translations do not automatically participate in hreflang. If you localize a product description via metafields, the English and French versions are treated as the same URL unless you also publish them to the right market. Second, custom pages created per market often have different handles, breaking automatic pairing. Third, Shopify Markets does not emit x-default by default, and there is no UI setting for it. Fourth, apps that inject content (reviews, FAQs, bundles) sometimes emit US-market content on non-US URLs because the app was not configured for multi-market.
Each of these is fixable, but none are caught by Shopify's default tooling. Our services/seo international engagements usually spend week one mapping these gaps and week two fixing them.
When hreflang is not the answer
Three scenarios where hreflang is either the wrong tool or a marginal one. Single-market brands that are considering international expansion do not need hreflang until they actually launch the second market. Pre-emptive hreflang without locale-specific content is worse than no hreflang. Brands selling a single product line that is identical across all English markets may benefit more from a single .com with clear shipping and pricing information than from splitting into regional subfolders. And brands with no localized content (same English copy everywhere, same currency, same shipping) will get marginal SEO benefit from hreflang because there is nothing to disambiguate.
The decision framework: hreflang adds value when content genuinely differs across markets. Currency, shipping policy, product availability, language. If three of these differ, ship hreflang. If only one differs, consider consolidating instead.
For the CRO side of international rollouts, the CRO checklist for 2026 covers the locale-specific conversion patterns that tend to outperform global defaults. And the analytics and reporting side needs market-level segmentation from day one so you can tell which markets are actually earning their keep.
What to do this week
▸ Build a master locale mapping spreadsheet for the top 100 products and top 10 collections ▸ Replace Shopify's default sitemap with a hreflang-annotated sitemap covering every market ▸ Add x-default to every hreflang set, pointing to the root domain or a language selector ▸ Crawl the site with Screaming Frog and fix every missing return tag flagged in the hreflang report ▸ Audit theme templates for custom pages, blog posts, and policy pages that might be missing hreflang emission ▸ Schedule a monthly hreflang audit with named ownership on the SEO or engineering lead
One-page resource
Get the Vendor Recovery Checklist.
The 12 steps every displaced maker should take in the next 30 days. Delivered in your inbox.