hreflang on Shopify - getting it right
hreflang is the annotation that solves international search's routing problem: you have the same page in Danish, German, and English-for-EU, and Google needs to know which to show a searcher in Munich. Without it, markets compete against each other, the wrong version ranks in the wrong country, and duplicate-content ambiguity taxes everything. With it - correctly implemented - each market's version serves its market. The catch is that hreflang is famously easy to get wrong, so this lesson is equal parts mechanism and audit.
The mechanism, and what Shopify does natively
hreflang annotations (in the page head, on Shopify) declare a set of equivalents: this URL is the en-DK version; its siblings are da-DK at this URL, de-DE at that one - plus an x-default naming the fallback for unmatched users. The rules that make it fragile: annotations must be reciprocal (every sibling lists every other; one-directional claims are ignored), must point to canonical, indexable URLs (an hreflang target that redirects, 404s, or canonicals elsewhere breaks the cluster), and must use valid language-region codes. The good news that makes this phase's architecture pay off again: Shopify Markets with subfolders generates all of this natively - correct clusters, reciprocity, x-default, maintained automatically as you add markets and languages. If you're on the standard architecture, your hreflang is probably right by default, which is a genuinely strong argument for that architecture (and one more entry on the separate-stores tax ledger: cross-domain hreflang between separate stores requires manual or app-based implementation, and it's precisely where multi-store setups rot).
Where it breaks anyway
The failure catalog, in observed frequency order: mixed setups - a market on an external domain or a landing subdomain outside Markets' management (the cluster splits: Markets annotates its members, the outsider floats unannotated or manually mis-annotated); apps or theme code injecting duplicate/conflicting hreflang alongside Shopify's (two sets of annotations reads as garbage - after any internationalization app install, view source and count); markets removed or restructured leaving stale annotations or broken sibling URLs during transitions; and the misdiagnosis case - hreflang blamed when the actual problem is that a market's pages aren't indexed at all (untranslated thin content, Phase 3's coverage gaps - hreflang routes among indexed pages; it can't rescue pages that never got in). That last one orders your debugging: coverage first, routing second.
The audit rhythm
Verification is mercifully checkable. Per template per market (a product page, a collection, the homepage - a handful of URLs): view source, confirm one hreflang set, correct codes, sibling URLs that resolve cleanly with 200s and self-canonicals. Tools (Screaming Frog's hreflang validation, or the audit crawlers) automate the reciprocity math at scale. In GSC - with per-market properties or filtered views (Phase 3's setup note maturing) - the telltale of hreflang problems is geographic misrouting: German queries landing impressions on your en-EU pages, markets cannibalizing each other in the same country's results. Add this check to the quarterly slot, run it after any market launch or restructure, and hreflang stays what it should be on a Markets setup: infrastructure you verified rather than a problem you have.