International and Multilingual SEO
If you publish the same page in several languages or for several countries, Google needs to know the versions are siblings, not duplicates competing with each other. hreflang is how you tell it. It will not lift your rankings. It fixes which version shows to which user, which is a different and often more valuable problem.
What hreflang does
hreflang is a set of annotations declaring that a page has alternate versions for other languages or regions, so the right version reaches the right user. A US visitor gets the dollar page, a UK visitor gets the pound page, a Spanish speaker gets the Spanish text. It is a targeting and disambiguation tool, not a ranking booster.
Being clear about what it does not do saves a lot of wasted effort. hreflang does not push any version higher in results. What it does is cut wrong-language impressions and stop your own regional variants from being treated as duplicate content that competes with itself. The ranking signals are shared across the cluster; hreflang just routes the user to the correct member of it.
The payoff is most obvious with near-identical variants. A US and a UK page in the same language differ only in spelling, currency, and a few details, and without hreflang Google may show a searcher the wrong one or treat the pair as duplicates and pick a single winner. hreflang tells it the two are a matched set for two markets, so each market sees its own version and neither cannibalizes the other. That is the problem hreflang was built to solve, and it is a targeting problem, not a ranking one.
The syntax
Each annotation carries a language code, optionally plus a region. Language uses ISO 639-1 (en, es, de), and region, when present, uses ISO 3166-1 Alpha-2 (en-GB, es-MX, pt-BR). The rule that trips people up: language is required, region is optional. en-GB is valid; a bare region like GB on its own is not.
There are three ways to declare hreflang, and you must not mix methods on one page:
- HTML link tags in the
<head>, one<link rel="alternate" hreflang="...">per version. - HTTP
Linkheaders, useful for non-HTML files like PDFs where there is no head to edit. - XML sitemap
xhtml:linkentries, which scale best for large sites because you manage all the relationships in one file instead of editing every page.
Pick one method per page and apply it consistently. Two methods disagreeing on the same page is a common source of clusters that silently fail.
Return links are mandatory
This is the rule that breaks the most hreflang setups. Return links must be complete and bidirectional. Every page in a cluster must list every version, including itself. If the English page points to the French page, the French page must point back to the English page, and both must also list themselves. A single missing return link can void the whole cluster, and Google falls back to guessing which version to show.
Add an x-default entry to name the fallback version for users whose language or region you do not target. It catches everyone outside your declared markets and sends them somewhere sensible instead of an arbitrary variant.
hreflang is only as strong as its weakest return link. Every version lists every version including itself, in both directions, or Google may discard the annotations and choose for you.
Validate the cluster
The mechanical requirements are strict, so check them. Every URL in the annotations must be absolute, canonical, return 200, and be indexable. And hreflang and canonical must agree: an hreflang alternate should self-canonicalize, never point its canonical at a different language version, because that tells Google to consolidate away the very page you are trying to surface. hreflang and canonical agreement →
Run the cluster through an hreflang validator, in Screaming Frog, Ahrefs, or Semrush, to catch missing return links, wrong codes, and non-200 targets before they cost you. Validate before launch and re-check after any change to the URL set, because adding one new language version means editing the return links on every existing page, and a single missed edit can quietly void the whole cluster. One practice to avoid entirely: automatically redirecting users to a version based on their IP address or browser language. Googlebot crawls from US IP addresses, so an IP redirect can trap it on your US page and keep it from ever seeing the other versions. Let hreflang route users; do not force them by geography.
Once live, watch performance by country in Search Console to see whether each market is getting its intended version. Per-country performance data → International rollouts are also frequent triggers for migrations, so the redirect discipline from that chapter applies whenever you restructure locale URLs. International migrations → Next up is structured data, the markup that clarifies these entities to engines. Structured data next →