![[object Object]](/_next/image?url=https%3A%2F%2Fcms.envigo.co.in%2Fwp-content%2Fuploads%2F2025%2F01%2Fguide-to-Hreflang-attributes.jpg&w=256&q=75)
Ever landed on a UK pricing page while searching from India? That’s usually hreflang, or the lack of it. Small tag, big consequences, and it’s one of those things nobody notices until it’s broken.
It’s a line of code in the page header telling search engines which language and region a page belongs to. Run English content for both the UK and India? Hreflang is what tells Google “show this one to London, that one to Delhi.”
Skip it and Google guesses. Sometimes it guesses right. Often it doesn’t, and someone ends up staring at the wrong currency, wondering why your site feels broken. They leave. Can’t really blame them.
Honestly, most sites don’t need this at all. It only matters once you’ve got real separate versions of the same content for different markets or languages. Some cases where it applies:
A business running country-specific sites with overlapping but distinct content, wanting each market to land on its own version. Same page existing in English, Hindi, and French. English content that shifts slightly by market, UK spelling here, US pricing there, with those pages quietly competing against each other instead of just existing side by side. Or a retailer selling through country-specific catalogues where currency and shipping change by region.
First, work out which pages actually have a counterpart somewhere else. If a page stands alone, don’t tag it. That’s it, that’s the whole first step.
For pages that do have a twin elsewhere, each version needs a line pointing to every other version, plus itself. A UK and India English pair looks roughly like this:
| <link rel=”alternate” hreflang=”en-gb” href=”https://example.co.uk/page” />
<link rel=”alternate” hreflang=”en-in” href=”https://example.co.in/page” /> <link rel=”alternate” hreflang=”x-default” href=”https://example.co.in/page” /> |
Codes need to be right. Language follows ISO 639-1 (en, hi, fr). Region follows ISO 3166-1 Alpha 2 (GB, IN, US). String them together as language-REGION. Type one wrong and nothing crashes, nothing alerts you, the tag just silently does nothing. Which is almost worse than an actual error, because at least errors get noticed.
Two things catch people out constantly. Forgetting the self-referencing tag (every page has to list itself too, not just its siblings) is probably the single most common mistake we run into on audits. The other is skipping x-default, which tells Google what to show someone whose language doesn’t match any of your pairs.
Then actually crawl the site and check the tags resolve to real URLs. Skip this step and you won’t know anything’s wrong until traffic starts looking weird three months from now.
Reciprocity, mostly. Page A points to page B, but B never points back. Google notices this and just stops trusting the pair.
Canonical tags fighting hreflang tags is another one. If your canonical says one URL and your hreflang says another, you’ve basically told Google two different things and left it to sort out the mess.
And people sometimes treat hreflang like it fixes duplicate content by itself. It doesn’t. It’s a signal about intent, not a magic wand. The content underneath still needs a real reason to have separate versions.
None of this breaks loudly. That’s the annoying part. Nothing throws a warning, nothing sends an alert, it just quietly misroutes traffic until somebody finally goes looking.
Google used to have an International Targeting report inside Search Console just for this. They killed it in September 2022. Hreflang errors now show up buried in the Enhancements section instead, mixed in with a bunch of other structured data issues. Less convenient, but it’s still where you’ll find the clearest picture of what Google actually sees.
Merkle’s Hreflang Tags Testing Tool works fine for checking one URL at a time. Aleyda Solis has a generator that’s handy when you’re building a fresh international structure rather than untangling an existing mess. Semrush and Ahrefs both fold hreflang checks into their bigger crawls too, useful if you’re auditing a whole site rather than chasing one bug.
Fair question. Search has changed a lot since this article first went up back in 2023. AI Overviews handle a real chunk of queries now. But the actual problem hreflang solves, which version of a page belongs in front of which person, hasn’t gone anywhere. If anything it’s more relevant, because it’s not just Google’s ranking algorithm trying to figure out the right version anymore. AI systems reading a site are asking the same question.
This is basically why we don’t split SEO and GEO into separate workstreams under DualRank. Clean hreflang, clean structure, all of it feeds both.
Map what needs tagging, get the codes right, make every pair point both ways, and check it actually worked instead of assuming it did. That’s most of it. And if an agency’s handling this for you, ask them how. You’d be surprised how often it’s just wrong.
Take your next step with a free SEO audit and consultation with industry experts.
Most GEO conversations still start and end with one question: is my content on Google? That question was never sufficient for traditional search, and it is even less sufficient now. AI tools pull f.....
Google’s Lighthouse 13.5 release adds an audit for Agentic Resource Discovery, a proposed specification for how AI agents locate the tools and services a website offers. It is a technical, fo.....
Most agency rankings are unpaid ads with a numbered list stapled on. This one runs on six criteria that predict whether an SEO programme keeps compounding after month eighteen or quietly plateaus o.....