A US client expands to Canada, the UK, and Australia. The agency stands up /ca/, /uk/, and /au/ subdirectories. Six months later, Google Search Console reports "Alternate page with proper canonical tag" on every regional page and the regional traffic numbers are flat or worse than before.
The cause is almost always hreflang implementation. Hreflang tells search engines which version of a page to show users in which region or language. Done right, regional pages outrank the US pages for regional searches. Done wrong — and it's wrong on most multi-region client sites — Google ignores the regional pages and shows the US page everywhere.
This post is the three implementation patterns that work, the four bugs that don't, and the debugging sequence for stubborn cases.
The most common hreflang failure: page A links to page B, but page B does not link back to page A. Google requires every hreflang reference to be reciprocal. A single missing back-reference invalidates the entire cluster.
The pattern that fails:
<!-- On /us/pricing/ --><link rel="alternate" hreflang="en-GB" href="https://example.com/uk/pricing/"><!-- On /uk/pricing/ --><!-- No reference back to /us/pricing/ -->
The fix: every page in the cluster must reference every other page in the cluster, including itself. The Meta Tag Analyzer reports hreflang annotations per page; the diagnostic is comparing them across the cluster to confirm reciprocity.
Hreflang tags must point to URLs that return 200 OK. If /uk/pricing/ 301-redirects to /uk/plans/, every other regional page's hreflang reference to /uk/pricing/ is broken from Google's perspective. The cluster fails.
The diagnostic: curl -I every hreflang target URL and verify a 200 response. The most common failure mode is a redirect chain put in place by a recent URL change that nobody updated the hreflang for.
Hreflang uses ISO 639-1 language codes and ISO 3166-1 Alpha-2 region codes. Common typos:
en-UK (wrong — UK is not an ISO region code; use en-GB)
pt-BR (correct), pt-BZ (wrong — Brazil is BR)
zh (technically valid, but zh-CN or zh-TW is more useful)
de_DE (wrong — hreflang uses hyphens, not underscores)
The Google Rich Results Test does not validate hreflang. GSC's Search Console > Legacy tools > International Targeting report does, but it's been on the deprecation path since 2024. The robust diagnostic is a tool like Screaming Frog or a custom script that enumerates hreflang annotations and validates the codes.
Every page must include an hreflang reference to itself. The pattern that fails:
<!-- On /us/pricing/ --><link rel="alternate" hreflang="en-GB" href="https://example.com/uk/pricing/"><link rel="alternate" hreflang="en-CA" href="https://example.com/ca/pricing/"><!-- No self-reference to en-US -->
The fix: include the page's own region as one of the alternates. Self-reference is part of the contract.
x-default tells Google which page to show users whose region/language doesn't match any specific hreflang entry. It's optional but recommended.
The bug worth naming: pointing x-default to a region-specific page that's clearly the US version. If a Brazilian user lands on a page targeted by x-default: https://example.com/us/pricing/, the page should not assume the user is American. The pattern that works: x-default points to a region-selector page that auto-detects or asks the user.
For sites with a strong "primary" region (most US-based clients), pointing x-default to the US version is acceptable but suboptimal. A dedicated /select-region/ page improves the experience for non-targeted-region users and reduces "wrong-region landing" complaints.
When GSC reports hreflang errors and the implementation looks correct, run this sequence:
Pick one URL from the broken cluster. Open it in a browser and view source. Confirm hreflang <link> tags are present in <head>.
Curl every hreflang target URL with curl -I. Confirm each returns 200. Any redirect or 404 breaks the cluster.
For each target URL, open it and view source. Confirm the hreflang block includes a reciprocal reference back to the original URL.
Check the canonical tags. Every regional page must self-canonicalize. If /uk/pricing/ has <link rel="canonical" href="https://example.com/us/pricing/">, Google treats /uk/pricing/ as a duplicate of the US page and ignores the hreflang.
Audit for sitemap conflicts. If hreflang is in both the HTML and the sitemap and they disagree, Google reports an error. Pick one source of truth.
Check for JavaScript-injected hreflang. Tags added after page load are unreliable; Googlebot's rendering pass may not see them in time.
Most cases come down to canonical tags pointing to the wrong region or hreflang targets that redirect. Step 2 and step 4 cover 80% of the failure modes we've debugged.
Hreflang is for region/language targeting. If the client has the same English content for every region and only the prices/currency differ, hreflang is debatable — Google often handles this fine with simple region-detection. If the client has the same content in different languages, hreflang is mandatory.
For agencies, the heuristic:
Single language, multiple regions, identical content: consider skipping hreflang and using a region-selector page instead
Single language, multiple regions, different content (prices, products, regulations): hreflang required
Multiple languages: hreflang required, no exceptions
Every page in the cluster references every other page including itself, every reference reciprocal, all URLs return 200, language and region codes are valid ISO, canonical tags self-canonicalize, single source of truth (HTML or sitemap, not both), no JavaScript-injected tags.
Seven things. Most multi-region client sites fail two or three. Fix them and regional pages start ranking in their target regions within 4–6 weeks.