DefinitionAn HTML attribute that tells search engines which language and country a page targets, so users in Germany see the German version and users in the UK the English one. Essential for multilingual sites.
Hreflang is a set of annotations that tells Google “this page also exists in these other languages and for these other countries, and here is where each version lives”. It goes in the head of the HTML, in the HTTP header or in the XML sitemap, and every version must list every other version, including itself. The mistake nearly everyone makes is thinking of it as a translation tag. It is not. Hreflang does not make a page rank in another country; it tells Google which of your already-ranking pages to show to which user, so a Belgian searcher gets the Dutch page for Belgium and not the one for the Netherlands.
Why hreflang matters when you sell in more than one market
Without hreflang, Google guesses. Sometimes it guesses well, and sometimes a German visitor gets the Dutch product page, sees prices in euros but shipping terms for the Netherlands, and leaves. The same webshop’s German page, which exists and would have converted, never appears. Google may also decide that the Dutch and Belgian versions of a page are duplicates and show only one, usually the wrong one for half the visitors.
A Dutch webshop with separate NL and BE storefronts had exactly this problem: the Belgian pages barely appeared in Belgian search results because the Dutch domain, which had more authority, was being shown instead. Correct hreflang between the two storefronts moved Belgian traffic to the Belgian site within a few weeks, where the delivery promise and pricing were right and conversion rate was noticeably higher. Nothing about the content changed; Google simply got the instruction it needed. Hreflang is the most technical part of international SEO, and one of the easiest to get wrong.
How to check whether your hreflang is correct
Screaming Frog is the tool for this. Crawl the site with hreflang extraction enabled and open the Hreflang tab. It flags the classic failures directly: missing return links, pages that reference a URL which does not return 200, inconsistent language codes, missing x-default and pages with no hreflang at all. The Inlinks and Outlinks panes show exactly which pages point to which, so you can see where the chain breaks. Ahrefs Site Audit and Semrush Site Audit report the same problems in their international sections.
For a single page, view the source in the browser dev tools and search for “hreflang”. Count the entries, check that the page lists itself, and confirm the codes are valid: language in ISO 639-1 (nl, de, en), country in ISO 3166-1 Alpha 2 (NL, BE, DE, GB). “en-UK” is a common error; the correct code is en-GB. Then check Google Search Console’s Performance report per country. If the Belgian site gets impressions in the Netherlands, or the German site is nearly invisible in Germany while the Dutch site shows up there, the annotations are not doing their job.
Mistakes that break hreflang
Missing return links. Page A says B is its German version, but B does not say A is its Dutch version. Google ignores the pair. This is the single most common failure and it happens whenever a page is added on one side only.
Pointing to redirects, canonicals or noindex pages. Every hreflang URL must be the final, indexable, canonical URL. A tag that points at a URL which redirects to another is wasted.
Wrong or invented codes. en-UK, nl-BEL, eu as a region. Google silently ignores invalid codes, so the tag looks fine but does nothing.
Same content, different hreflang, hoping it counts as localised. Hreflang tells Google which version to show. It does not make a Dutch page rank in Germany because it is labelled de-DE. The German page needs to be in German.
Forgetting the sitemap after a migration. Hreflang built into a sitemap generator breaks quietly when the platform changes. Nobody notices until the country reports start drifting.
How I implement hreflang for clients
I start with a matrix: every market and language on one axis, every page template on the other, and the exact URL pattern for each cell. That document catches most errors before anything is built, because it forces the question “what is the Belgian French version of this category, and does it exist?” Then I choose where the tags live. For sites with a handful of languages on one domain, tags in the head are easiest to maintain. For multi-domain setups with thousands of products, the sitemap is more reliable, because it is generated from the product database rather than from the template.
I always include x-default pointing at the language selector or the main market, I make sure the canonical on each page points at itself, and I run a Screaming Frog crawl before and after every deployment. On PrestaShop and Shopify the built-in handling covers the basics but tends to break at the edges: products that are not sold in every market, categories that exist in one language only. Those edge cases are where I spend most of my time on international SEO projects, and where hreflang turns from a checkbox into real work.
Frequently asked questions
Do I need hreflang if each country has its own domain?
Yes, especially then. Separate domains like .nl, .be and .de still contain near-identical pages in the same language, and Google needs to be told they are alternates rather than duplicates. Without it the strongest domain tends to win in every country, which is usually not what you want. Hreflang between domains works exactly the same as within one domain; the tags just use full URLs.
What is x-default for?
It tells Google which page to show to users who do not match any of the listed language and country combinations, for example a searcher in Sweden on a site that targets NL, BE and DE. It usually points at a language selector or at the international English version. It is optional, but leaving it out means Google picks for you.
Can I use hreflang for language only, without a country?
Yes. “nl” on its own targets all Dutch speakers, “de” all German speakers. This is the right choice when the content is the same for every country that speaks the language. Add the country only when the pages really differ per country: prices, shipping, legal text, currency. Mixing the two, such as nl-NL alongside a plain nl, is allowed but needs care so that the plain version does not swallow the country-specific one.