Shopify Hreflang and International SEO: The Markets Setup (2026)

I audited 17 Shopify Markets stores in Q1 2026. On 12 of them, hreflang was present but broken in at least one way: missing x-default, non-reciprocal alternates, or tags pointing to a 301-redirecting URL. Three of those stores were showing UK product pages in US SERPs and vice versa. Shopify Markets injects the tags. It does not guarantee they work.

TL;DR: Shopify Markets auto-generates hreflang alternate link tags for every published market. The automatic output covers language-region pairs like en-gb and fr-ca but has gaps around x-default and reciprocity. Verify with view-source and a Screaming Frog hreflang crawl. Fix missing x-default and any alternates pointing to redirecting or noindex URLs.

Why this matters for your store

  • Wrong-locale ranking sends UK traffic to a USD-priced store, which kills conversion and pushes refund rates up before a single A/B test runs
  • Duplicate-content dilution across market URLs is a real PageRank cost: without correct hreflang, Google may treat your /en-gb/ and /en-us/ product pages as duplicates competing against each other
  • Recovering from a broken hreflang cluster after six months of wrong-locale indexing can take 8 to 12 weeks of recrawl cycles, even after you fix the tags

What hreflang actually does (and what it does not)

Hreflang is a signal, not a directive. It tells Google which URL to serve to a user based on their language and region. A UK visitor searching for your product gets your /en-gb/ URL in the SERP. A US visitor gets /en-us/. Without it, Google picks one URL and ranks it everywhere, usually the wrong one for at least one market.

Critically, hreflang does not prevent both URLs from being indexed. It tells Google which one to prefer for each locale. The Google guide on multi-regional sites frames it clearly: hreflang is a geographic and linguistic relevance signal, not a canonicalization tool. Canonical tags handle deduplication. Hreflang handles locale routing. Conflating the two is the most common mistake I see. My guide to fixing duplicate content and canonical tags on Shopify covers the deduplication layer separately.

The three tag patterns you need for a Markets setup:

<!-- layout/theme.liquid (Shopify injects these automatically) -->
<link rel="alternate" hreflang="en" href="https://yourstore.com/en/" />
<link rel="alternate" hreflang="en-us" href="https://yourstore.com/en-us/" />
<link rel="alternate" hreflang="en-gb" href="https://yourstore.com/en-gb/" />
<link rel="alternate" hreflang="fr-ca" href="https://yourstore.com/fr-ca/" />
<link rel="alternate" hreflang="x-default" href="https://yourstore.com/" />

hreflang="en" targets English speakers regardless of country. hreflang="en-gb" narrows to UK English. hreflang="x-default" catches everyone else: visitors from countries you do not serve, or users with no language preference set. Every cluster needs an x-default. No exceptions.

How Shopify Markets generates hreflang (and where it falls short)

Shopify Markets injects hreflang tags automatically for every published market. When you publish a UK market in subfolder mode, Shopify adds an en-gb alternate to every page on the store. Add a French-Canadian market and fr-ca appears site-wide within minutes of publishing.

This works because Shopify Markets tracks each market’s locale settings (language plus country) and passes them to the Liquid rendering layer. You do not need to edit theme.liquid to get hreflang on a standard Shopify theme.

The limitations show up at the edges.

x-default coverage. Shopify adds x-default pointing to your primary market URL when a primary market is configured. On stores I have audited without a clearly designated primary market, x-default was absent from the output entirely. On 9 of the 17 stores I reviewed this year, x-default was either missing or pointing to a URL that issued a 302 redirect.

Reciprocity on custom domains. For the standard subfolder structure (yourstore.com/en-gb/), Shopify handles reciprocity automatically because all markets share one theme render. For stores using subdomains (gb.yourstore.com) or ccTLDs (yourstore.co.uk), the alternate tags must include full absolute URLs that Google can fetch independently. Shopify generates these correctly if the domains are configured through Markets, but any custom subdomain or ccTLD added outside of Markets settings breaks the reciprocity chain.

Alternates pointing to noindex or redirect URLs. During a market migration, URLs frequently get restructured. If you deactivate a market URL pattern and redirect the old paths, the hreflang alternates may still reference the pre-redirect URLs for several crawl cycles. Google ignores hreflang on redirecting URLs. It reads the signal at the final destination, and if the destination is a different URL than the alternate, the signal breaks.

Gymshark is a useful public example. Their international setup uses language-region subfolder paths (/en-gb/, /en-us/) with full x-default coverage. Screaming Frog audit on their site confirms every alternate is reciprocal and points to a live 200-status URL. That is the structural target.

ISO codes: the mistake that silently kills a market

ISO 639-1 language codes and ISO 3166-1 alpha-2 country codes are the required format. hreflang="en-GB" is case-insensitive and Google accepts it, but the convention is lowercase (en-gb). hreflang="en-UK" is wrong and Google ignores it silently. The correct code for United Kingdom is gb, not uk. I found this error on 4 of the 17 stores I audited, which means their UK market hreflang signal was sending zero information to Google for however long those tags had been live.

Common wrong codes and their correct versions:

  • en-UK should be en-gb
  • en-AU should be en-au (casing fine, but confirm the code is au not something else)
  • zh-TW for Traditional Chinese Taiwan is correct; zh-CN for Simplified Chinese China is correct; zh alone is ambiguous and risks Google defaulting to the wrong variant

Shopify’s auto-generated tags use the locale identifiers you configure in Markets settings. If you typed en-UK when setting up the UK market locale, Shopify will output that wrong code in every hreflang tag site-wide.

URL structure: subfolder vs subdomain vs ccTLD

Shopify Markets supports three URL structures. Each has different hreflang implications.

Subfolders (yourstore.com/en-gb/). Recommended and default. All URLs share one domain, one GSC property, and one crawl budget. Shopify handles the hreflang injection automatically. Verification is straightforward: one view-source confirms all alternate tags.

Subdomains (gb.yourstore.com). Supported by Markets. Each subdomain is a separate origin in Google’s model, which means separate crawl budgets and separate GSC property verification. Hreflang clusters must use fully qualified absolute URLs across origins. Screaming Frog can crawl across subdomains but you must add each subdomain to the crawl scope manually.

ccTLDs (yourstore.co.uk). Strongest geographic signal to Google. Also the highest operational overhead: separate domain registrations, separate SSL, separate GSC properties, separate crawl considerations. Shopify Markets supports ccTLD routing but the hreflang implementation requires each ccTLD to reference all other ccTLDs in its alternate set. I have seen ccTLD setups where each domain only listed itself and the primary .com, missing every other country. Screaming Frog’s hreflang report surfaces this immediately.

Most Shopify merchants should stay on subfolders unless they have a strong brand reason for ccTLDs. For stores exploring headless international setups, the URL structure decision interacts with rendering architecture in ways the Hydrogen vs Liquid headless comparison covers in detail.

Canonical tags and hreflang must agree

This is where stores quietly break two SEO signals at once.

Every URL in an hreflang cluster needs a self-referencing canonical. The UK page canonicalizes to itself. The US page canonicalizes to itself. Both have hreflang tags pointing to each other. That is the correct configuration.

The mistake: a developer adds a canonical pointing from the UK market URL back to the US primary URL, thinking they are “deduplicating” the two. Now the canonical says “the real URL is the US page” and the hreflang says “this is the UK page.” Google sees a contradiction. In practice, Google resolves contradictions between canonical and hreflang by trusting the canonical, which means your UK hreflang signal disappears entirely and the UK URL gets no locale-specific ranking boost.

<!-- layout/theme.liquid: WRONG for market URLs -->
<link rel="canonical" href="https://yourstore.com/products/handle" />
<link rel="alternate" hreflang="en-gb" href="https://yourstore.com/en-gb/products/handle" />

<!-- layout/theme.liquid: CORRECT for market URLs -->
<link rel="canonical" href="https://yourstore.com/en-gb/products/handle" />
<link rel="alternate" hreflang="en-gb" href="https://yourstore.com/en-gb/products/handle" />
<link rel="alternate" hreflang="en-us" href="https://yourstore.com/en-us/products/handle" />
<link rel="alternate" hreflang="x-default" href="https://yourstore.com/products/handle" />

Shopify Markets generates self-referencing canonicals for market URLs by default. The risk is a theme developer or app that overrides canonical_url with a global canonical pointing to the primary market. My Shopify duplicate content and canonical tags guide details the Liquid canonical override pattern and when it breaks international setups.

Note on currency vs language: Shopify Markets separates currency from language. A UK-language market can show GBP or USD depending on your pricing configuration. Hreflang targets language and country, not currency. Getting currency right requires the | money filter throughout your Liquid. The Shopify Markets multi-currency and hardcoded prices fix covers that layer.

How to verify hreflang is working on your Shopify store

Most stores skip verification entirely. The GSC International Targeting report is deprecated (removed 2023). Here is the three-step process I run on every Markets audit.

Step 1: View-source spot check. Open a product URL for one of your non-primary markets. View page source and search for hreflang. Confirm you see: one tag per published market, correct ISO codes, an x-default tag, and that the current URL appears as one of the alternates pointing to itself. If the current URL is absent from the alternate set, reciprocity is broken on this page.

Step 2: Screaming Frog hreflang crawl. Run Screaming Frog against your store URL. After the crawl, go to the Hreflang tab and export the full report. Filter the “Missing x-default” column for any pages showing yes. Filter the “Non-reciprocal” column for broken pairs. Filter the “No Return Tag” column for any URL listed as an alternate but not including a return tag. On a 500-product store, this crawl takes about 15 minutes and surfaces every broken pattern across the full site. This is the same tool and methodology used by technical SEOs like Aleyda Solis for international audits.

Step 3: Google Search Console URL Inspection. In GSC, inspect a URL from each active market. Under “Indexing,” check the reported canonical. Under “Enhancements,” confirm there are no hreflang errors logged. GSC does not show you the full hreflang cluster, but it will flag tag errors it has detected during crawling. For a full technical audit framework across all SEO infrastructure layers, my Shopify technical audit checklist covers the sequencing.

Run these three checks within 48 hours of any Markets configuration change. Publishing a new market, changing a locale code, or migrating URL structure all risk resetting hreflang output site-wide.

The takeaway

  • Verify ISO codes in your Markets locale settings before publishing: use en-gb not en-uk, and confirm every two-letter country code against the ISO 3166-1 alpha-2 standard
  • Check x-default is present on every page and pointing to a live 200-status URL, not a redirecting or draft market URL
  • Run a Screaming Frog hreflang crawl after every Markets configuration change and filter the Non-reciprocal and No Return Tag columns before calling the setup clean
  • Confirm your canonical tags are self-referencing on market URLs: any canonical pointing from a market URL to the primary-market URL cancels the hreflang signal for that locale
  • Audit hreflang output after installing or updating any SEO app: third-party apps that override the HTML head can silently remove or duplicate Shopify’s injected alternate tags

Frequently Asked Questions

Does Shopify automatically add hreflang tags for international markets?

Yes. Shopify Markets injects hreflang alternate link tags for every published market into the rendered HTML head. You get language-only tags like hreflang='en' and language-region tags like hreflang='en-gb' automatically. The gap is x-default: Shopify adds it only when you have a primary market configured, and the reciprocity check is your responsibility.

What is x-default hreflang and do Shopify stores need it?

x-default is a special hreflang value that tells Google which URL to show visitors whose language or region does not match any of your published alternates. Google recommends it on every multi-market store. On 9 of 17 Shopify Markets stores I audited in 2026, x-default was either missing or pointing to a redirecting URL.

What ISO codes should I use for Shopify hreflang tags?

Use ISO 639-1 two-letter language codes (en, fr, de) and ISO 3166-1 alpha-2 two-letter country codes (gb, us, ca). Combine them as language-region pairs like en-gb, fr-ca, de-at. The most common mistake is using en-uk instead of en-gb, which Google ignores entirely.

Why do hreflang tags need to be reciprocal?

Reciprocity means every URL in an hreflang cluster must include alternate tags pointing to every other URL in that cluster, including itself. If your US page points to your UK alternate but the UK page does not point back to the US page, Google treats the signal as broken and falls back to its own locale assignment. This affects ranking in both markets.

How do I verify hreflang is working on my Shopify store?

Three steps: view-source on a market URL and confirm all alternate tags are present with correct ISO codes; run a Screaming Frog crawl and export the Hreflang tab to check reciprocity and x-default coverage; use Google Search Console URL Inspection to confirm Google has read the tags. The International Targeting report in GSC was deprecated in 2023.

Does Shopify Markets hreflang work on subdomain and ccTLD market URLs?

Yes, but you must verify. Subfolder markets like /en-gb/ get hreflang tags automatically. Subdomain markets like gb.yourstore.com and ccTLDs like yourstore.co.uk require the hreflang cluster to span separate origins, so each property in Google Search Console needs to be verified and GSC URL Inspection must confirm each alternate URL is crawlable without a redirect.

Book Strategy Call