Implementing Hreflang Tags for Effective Multilingual SEO
Nadia Gastrom | | 5 min read

Introduction
Hreflang is a signal that tells search engines which URLs are language/region equivalents of each other. Done correctly, it helps Google serve the right page to the right user (for example, sending en-GB searchers to the UK page instead of en-US), and it reduces “which version should rank?” confusion across near-identical variants.
If Google is showing the wrong language or country page in results, hreflang is usually the fix—but only when it’s consistent across every URL variant and validated end-to-end. This playbook covers four actions: map your locales and URL patterns, implement hreflang with the required rules (including reciprocity and x-default), avoid the common breakpoints, then validate and monitor so it keeps working through template and sitemap changes.
Step 1: Decide if you need hreflang + map your locales and URL patterns
Use hreflang when you have the same (or very similar) content targeted to different languages and/or regions—full translations (en ↔ fr) or regional variants (en-US vs en-GB) with localized pricing, shipping, spelling, or legal copy.
Lock the targeting model before you touch code:
- Language vs. region: hreflang supports language-only (
fr) and language + region (en-GB) using BCP 47 with a hyphen (not an underscore). - One locale = one URL: each variant needs its own URL. ccTLDs, subdomains, and subfolders all work; just stay consistent.
Then build a locale-to-URL mapping for each equivalent set (cluster). In my experience, starting with your highest-traffic templates (homepage, top categories, key landing pages) surfaces problems fast.
Prereqs: each locale page must be indexable (not blocked, not noindex), and canonicals should be sane—typically each locale canonicals to itself.
Example cluster:
- en-US:
https://www.example.com/us/product/widget/ - en-GB:
https://www.example.com/uk/product/widget/ - fr-FR:
https://www.example.com/fr/produit/widget/ - x-default:
https://www.example.com/international/product/widget/(or a selector)
If a page doesn’t exist in a locale, don’t include it. Pointing hreflang at 404s wastes crawl and breaks the set.
Step 2: Implement hreflang correctly (HTML tags, HTTP headers, or XML sitemaps)
You can implement hreflang three ways:
- HTML:
<link rel="alternate" hreflang="...">in the page<head> - HTTP headers: for non-HTML files like PDFs
- XML sitemaps:
<xhtml:link>annotations per URL
Pick one primary method. I usually choose HTML when templates are stable and page counts are manageable; XML sitemaps often scale better for large sites where changing every template is risky. Don’t mix methods unless you have a constraint (like PDFs needing headers).
Rules that must hold regardless of method:
- Reciprocity: if A references B, B references A.
- Self-referencing: each page lists itself.
- Consistent alternates: every URL in the cluster lists the same set.
- x-default: use as a real fallback (selector/global page), not a substitute for locale URLs.
- Equivalents only: cluster same-intent pages (product ↔ product, not product ↔ category).
Use the final, canonical, indexable URL in hreflang (avoid parameters, redirecting URLs, or http/https mismatches).
Example: HTML hreflang cluster snippet (put in <head> on each page in the set):
<link rel="alternate" hreflang="en-US" href="https://www.example.com/us/product/widget/" />
<link rel="alternate" hreflang="en-GB" href="https://www.example.com/uk/product/widget/" />
<link rel="alternate" hreflang="fr-FR" href="https://www.example.com/fr/produit/widget/" />
<link rel="alternate" hreflang="x-default" href="https://www.example.com/international/product/widget/" />
For PDFs, set an HTTP Link: header with rel="alternate"; hreflang="..." entries. If you use XML sitemaps, repeat <xhtml:link> alternates per URL and keep them aligned across the cluster.
Step 3: Common hreflang mistakes to avoid (that cause wrong results)
When hreflang “does nothing,” one of these usually broke the cluster.
- Incorrect codes: use valid BCP 47 with hyphens (for example
pt-BR, notpt_BR). - Missing return tags: A points to B, but B doesn’t point back.
- Missing self-reference: the page doesn’t include itself in the set.
- Bad target URLs: hreflang points to redirects, 404s, noindex, blocked URLs, or pages that aren’t the canonical version.
- Canonical conflicts: all locales canonicalize to one “master” URL, consolidating signals and making hreflang unreliable.
- Inconsistent sets: different pages list different alternate sets inside what should be one cluster.
- Overusing x-default: it’s a fallback, not a blanket answer. If you have en-GB and en-US, declare both.
One nuance I see in audits: teams try to use hreflang for geotargeting with identical pages and no real regional differences. If the content is truly the same, consider whether you need separate URLs in the first place.
Step 4: Validate and monitor hreflang so Google can process it
Validation should prove three things: hreflang exists everywhere it should, it matches canonical/indexing signals, and Google is selecting the intended URLs.
- Crawl-based validation:
- Use an SEO crawler (e.g., Screaming Frog, Sitebulb) to export hreflang.
- Check: tag presence, 200 status, indexable, self-reference, and reciprocal return tags across each cluster.
- When I ran this audit after a template change, the culprit was a locale header include missing on a subset of page types.
- Search Console checks:
- The International Targeting report is legacy and not available for all properties, but if you have it, it can surface hreflang errors.[1]
- Use URL Inspection to confirm Google’s selected canonical and whether the URL is indexed. Watch Pages/Indexing for spikes in “Alternate page with proper canonical tag,” “Duplicate,” or “Crawled – currently not indexed” across locale sets.
- Spot-check SERPs: test queries with locale intent and confirm landing pages. Country/language settings (or
gl=/hl=parameters) can help you simulate.
- Recheck after changes: template/header refactors, migrations, adding/removing locales, URL structure changes, routing changes, and sitemap generator updates.
Conclusion
Hreflang works when the basics are consistent: map your locale equivalents first, then implement hreflang so every URL in a cluster references every alternate (including itself), and add x-default only as a true fallback. Keep canonicals and indexability aligned with those same URLs—hreflang won’t override redirects, noindex, or a setup where variants canonicalize away.
For a sitewide rollout, pilot one high-traffic cluster first (homepage plus a core template), crawl it for reciprocity and status codes, then scale once indexing stabilizes and wrong-locale landings drop.
Sources
Article author
Nadia Gastrom
Nadia Gastrom is an independent SEO consultant and writer with more than three years of experience helping businesses improve their organic search visibility through SEO strategy, content optimization, and technical SEO. She has worked extensively with SEO platforms such as Semrush and Ahrefs and has a particular interest in how search is evolving beyond traditional rankings. Nadia is currently exploring Answer Engine Optimization (AEO), AI-powered search, and the ways businesses can make their content more useful and discoverable across emerging search experiences. When she is not researching search trends or writing about SEO, Nadia enjoys travelling, discovering new places, and spending time with dogs. She continues to follow the SEO and AEO industry closely to understand what is changing and what marketers should be preparing for next.

