Suppose you have a Dutch and a German version of the same page. A German visitor searches, and Google shows the Dutch version. Not handy. Hreflang is the bit of code that tells Google which version belongs to which language or region. John Mueller of Google once called it one of the most complex parts of SEO, and he has a point.
Managing expectations: hreflang isn’t a ranking trick. It doesn’t make you more visible. It makes sure the right version of your page reaches the right visitor, and that the signals of your language versions add up instead of competing with each other.

What hreflang does and doesn’t do
Hreflang does two things. It sends the right language version to the right visitor, and it tells Google your versions belong together, so they reinforce each other instead of competing as duplicates. What it doesn’t do: move you up a spot. Think of it as the signage in a building, not the lift.
The three ways to provide hreflang
According to Google’s own documentation you can do it in three ways. Pick one and be consistent.
- In the HTML, in the
<head>of your page. By far the most used. - Via an HTTP header. Handy for non-HTML files, like a PDF.
- In your XML sitemap. Nice when you have many pages, because it keeps your HTML clean.
<link rel="alternate" hreflang="nl" href="https://example.com/nl/page/" />
<link rel="alternate" hreflang="en" href="https://example.com/en/page/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
The rules you can’t break
Hreflang is unforgiving: one mistake and Google often ignores the whole set. The hard rules:
- Reciprocal. If page A points to B, then B must point to A. Otherwise the tags are ignored.
- Self-referencing. Each version also names itself.
- Language first, region optional. The language code (ISO 639-1, for example
nl) is required; a region code (ISO 3166-1, for examplenl-BE) may be added, but a region without a language is not allowed. - x-default. Add an
x-defaultfor everyone whose language isn’t in your list, often your language-picker or home page. - Point to the real URL. Absolute https URLs, no redirects, no noindex, no blocked pages.
The mistakes we see most often
Almost every hreflang implementation we come across trips over one of these: a missing self-reference, an invalid code (en-UK instead of en-GB), versions that don’t point to each other reciprocally, a reference to a page that redirects or is set to noindex, a missing x-default, or a mix of http and https. Each one small, but together enough to get the whole thing ignored.
And that’s by no means an edge case. Research by Ahrefs covering 374,756 domains found that 67% had at least one hreflang problem. Getting it right is the exception rather than the rule, and that’s exactly why it’s a chance to stand out.
How we did it on our own site
Our own site is bilingual (Dutch and English), so we run into exactly these things. We deliberately keep it simple: language only, no region, so nl, en en x-default. Each page points reciprocally to its other language version and to itself, and everything is on https. One pitfall cost us a headache: our translation tool secretly reset the URLs to http, which broke the set. We fixed that with a small piece of our own code so everything is guaranteed https. It’s exactly that kind of detail that decides whether hreflang works or not.
Hreflang isn’t a ranking trick. It’s a route map: you tell the search engine which door belongs to which visitor.
Giacomo Perticara, founder and SEO strategist at GRP Digital
Hreflang and the canonical tag are two sides of the same coin: both tell Google which URL is meant for what. Set them up well together and you give the search engine clear signals instead of noise.




