
What hreflang actually does (and does not do)
hreflang is an annotation that groups alternate versions of the same content by language and, optionally, region. A typical head implementation looks like this:
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/pricing/" />
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/pricing/" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/tarifs/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing/" />When the cluster is valid, Google keeps ranking whichever version has the strongest signals, then swaps in the version that matches the searcher's language and location. A user in Paris searching your brand sees the French URL instead of the English one that would otherwise rank. That swap is the entire feature.
Three things hreflang does not do, because I keep seeing these assumptions in briefs:
It does not boost rankings. If your French page has no authority, hreflang will not conjure any. It does not consolidate signals the way a canonical does; each version stays independently indexed. And it is not a directive. Google calls it a hint and will override it when the annotations contradict other signals, which is exactly why broken implementations fail silently.
The reciprocity requirement, drawn out
The rule that breaks the most implementations: hreflang only works when the pages agree with each other. If page A lists page B as an alternate, page B must list page A back. No return link, no swap. Google confirms return links as a hard requirement in its documentation on localized versions.
Three ways to implement it
Pick exactly one method per URL set. Mixing methods across the same pages is how you end up with contradictions that nobody can debug.
| Method | Best for | Watch out for |
|---|---|---|
HTML head link rel="alternate" | Most sites; easiest to crawl and debug | Bloats the head on large clusters; must render server-side, annotations injected by client-side JavaScript are risky |
HTTP header Link: | Non-HTML files like PDFs | Invisible to most eyeballing; needs curl or a crawler to verify |
XML sitemap xhtml:link | Large sites, many locales; keeps pages lean and centralizes the mapping | Sitemap generation bugs silently break clusters; every language version must appear as its own url entry with the full annotation set |
The rules that break most implementations
1. Return links. Covered above. Every pair must be bidirectional.
2. Self-reference. Each page includes an hreflang entry pointing at itself. Skipping it makes clusters flaky.
3. Valid codes. Language codes are ISO 639-1, region codes are ISO 3166-1 Alpha 2, in that order. The classics that burn people: en-UK is invalid (the United Kingdom is GB), en-EU is invalid (the EU is not a country), and region-only values like gb alone are invalid, language is mandatory. Google skips codes it cannot parse.
4. Absolute URLs. Full protocol and host, always. Relative hreflang URLs are a known source of quiet failures.
5. Point at real, indexable URLs. hreflang targets must return 200, be indexable, and be the canonical version of themselves. Annotations pointing at redirects, noindexed pages, or non-canonical URLs get dropped. Conflicts between hreflang and canonical tags deserve their own article, but the short version: every hreflang target should carry a self-referencing canonical.
6. x-default is a fallback, not decoration. It names the version for users who match none of your locales, usually a language selector or your global English page. It is optional but recommended, and it can coexist with a regular annotation for the same URL.
How to audit hreflang without going blind
You cannot QA hreflang by viewing source on five pages. Clusters break in the long tail, on paginated URLs, on pages your CMS treats differently, on the one locale where a plugin misfires.
Crawl with Screaming Frog. Enable hreflang in the crawl config, then work through the hreflang tab filters: missing return links, invalid language codes, non-canonical alternates, alternates that redirect or error. This one report finds 90 percent of real-world problems. Sitebulb's hreflang hints and Ahrefs' site audit do the same job if that is your stack.
Check Search Console for symptoms. Google removed the dedicated International Targeting report in 2022, so you now diagnose by side effects: run a site: query or performance report filtered by country and look for the wrong language version ranking in a market, or canonical reports showing Google picking a different language as canonical (a duplicate-content smell, usually same-language regional pages that are near-identical).
Spot-check the raw output. One page per locale per template type: view source (or curl for header implementations, or the sitemap entry) and read the actual annotations. Template bugs cluster by template.
What good looks like: every indexable page in a multilingual set carries a complete, reciprocal, self-referencing annotation set with valid codes, all targets return 200 and self-canonicalize, and country-filtered SERPs show the matching language version. Boring and symmetrical is the goal.
- Generate annotations programmatically from a single source of truth
- Include a self-referencing entry on every page
- Use
en-GBstyle codes: ISO 639-1 language, ISO 3166-1 Alpha 2 region - Add an
x-defaultpointing at your fallback or language selector - Re-crawl after every locale launch or CMS migration
- Expect hreflang to improve rankings; it only swaps URLs
- Point hreflang at redirects, noindexed, or non-canonical URLs
- Mix head, header, and sitemap methods on the same pages
- Use invented codes like
en-UKoren-EU - Hand-maintain annotations on a site with more than two locales
FAQ
Do I need hreflang if my site is only in one language?
Can hreflang point across different domains?
Does Bing support hreflang?
lang attribute, content language detection, and its own geotargeting rather than hreflang annotations. Implement hreflang for Google and Yandex, but keep your lang attributes and visible language signals correct for everyone else.How long until hreflang changes take effect?
Should machine-translated pages get hreflang?
hreflang audits are a core part of my technical review: full cluster validation, canonical conflict checks, and a prioritized fix list your dev team can act on. I find the breakage so you stop guessing.
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.







