{"id":8008,"date":"2026-08-01T00:54:53","date_gmt":"2026-08-01T00:54:53","guid":{"rendered":"https:\/\/dextora.agency\/insights\/multilingual-website-hreflang-localization-guide\/"},"modified":"2026-08-01T00:54:56","modified_gmt":"2026-08-01T00:54:56","slug":"multilingual-website-hreflang-localization-guide","status":"publish","type":"insight","link":"https:\/\/dextora.agency\/en\/insights\/multilingual-website-hreflang-localization-guide\/","title":{"rendered":"A Multilingual Website Without the Pain: hreflang, Localisation and the Mistakes That Cost Rankings"},"content":{"rendered":"<p>A second language usually gets added like this: take the copy, send it to a translator, paste the result back, put a switcher in the header. Three months later it turns out Google is showing the English page to Ukrainian visitors, the Ukrainian one to Poles, and some pages have dropped out of the index entirely.<\/p>\n<p>Multilingual sites do not break on translation. They break on technical details, each of which costs rankings.<\/p>\n<h2>Three ways to organise languages<\/h2>\n<table>\n<thead>\n<tr>\n<th>Structure<\/th>\n<th>Example<\/th>\n<th>Advantages<\/th>\n<th>Drawbacks<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Subdirectory<\/td>\n<td>site.com\/en\/<\/td>\n<td>Domain authority stays shared, simple to maintain<\/td>\n<td>Harder to separate by country<\/td>\n<\/tr>\n<tr>\n<td>Subdomain<\/td>\n<td>en.site.com<\/td>\n<td>Can be split across servers<\/td>\n<td>Authority is divided, more configuration<\/td>\n<\/tr>\n<tr>\n<td>Separate domain<\/td>\n<td>site.co.uk<\/td>\n<td>Strongest country signal<\/td>\n<td>Most expensive, each domain ranks on its own<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>For most companies the right answer is the subdirectory. Separate domains are justified when each country has its own legal entity, its own pricing and effectively a different business.<\/p>\n<h2>How hreflang works<\/h2>\n<p>It is a hint to the search engine: here is the same page in another language. Without it the versions compete with each other and the wrong one surfaces in results.<\/p>\n<p>Three rules, violated more often than any others:<\/p>\n<ul>\n<li><strong>Reciprocity.<\/strong> If the English page points to the German one, the German page must point back. A one-way reference is ignored entirely.<\/li>\n<li><strong>Self-reference.<\/strong> Every page must include an hreflang pointing at itself. This is almost always forgotten.<\/li>\n<li><strong>Absolute URLs.<\/strong> Full addresses with protocol only; relative paths do not work.<\/li>\n<\/ul>\n<p>Set <code>x-default<\/code> separately as the version for visitors whose language matches none of yours.<\/p>\n<h2>Mistakes that cost rankings<\/h2>\n<table>\n<thead>\n<tr>\n<th>Mistake<\/th>\n<th>What happens<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Wrong language code<\/td>\n<td><code>ua<\/code> instead of <code>uk<\/code>. That is a country code, not a language, and the whole annotation is ignored<\/td>\n<\/tr>\n<tr>\n<td>hreflang pointing at a non-canonical page<\/td>\n<td>Conflicting signals, the engine decides for itself<\/td>\n<\/tr>\n<tr>\n<td>Automatic redirect by IP<\/td>\n<td>A crawler in a US data centre sees only English and never indexes the rest<\/td>\n<\/tr>\n<tr>\n<td>One sitemap with no language annotation<\/td>\n<td>Half the signals about version relationships are lost<\/td>\n<\/tr>\n<tr>\n<td>Untranslated system pages<\/td>\n<td>404, cart and form messages stay in the original language<\/td>\n<\/tr>\n<tr>\n<td>Identical titles and descriptions<\/td>\n<td>Pages look like duplicates<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The most insidious is the automatic geo-redirect. It feels like consideration for the user, but in practice it blocks the crawler from every version but one. The correct solution is to suggest a switch with a banner and leave the choice to the visitor.<\/p>\n<h2>Translation and localisation are different things<\/h2>\n<p>Translation carries the words. Localisation carries the meaning and accounts for the market context.<\/p>\n<p>What changes beyond the text:<\/p>\n<ul>\n<li><strong>Formats.<\/strong> Dates, numbers, separators, currency, units of measurement.<\/li>\n<li><strong>Length.<\/strong> German runs roughly a third longer than English, and buttons stop fitting their labels.<\/li>\n<li><strong>Examples and case studies.<\/strong> A reference to a local company works better than an abstraction.<\/li>\n<li><strong>Contacts.<\/strong> Phone format, address, opening hours in local time.<\/li>\n<li><strong>Legal text.<\/strong> Privacy policies and terms are not translated literally; the requirements differ.<\/li>\n<\/ul>\n<h2>Technical traps<\/h2>\n<ul>\n<li><strong>The lang attribute.<\/strong> The <code>&lt;html lang=\"en\"&gt;<\/code> tag must change with the version. It affects both search and screen readers.<\/li>\n<li><strong>Non-Latin slugs.<\/strong> They encode into unreadable strings, look poor in results and break when copied. Latin characters are safer.<\/li>\n<li><strong>A switcher that goes to the homepage.<\/strong> Someone reading an article switches language and lands on the homepage. The switcher must lead to the same page.<\/li>\n<li><strong>Unlinked versions in the CMS.<\/strong> If the system does not know these are translations of one page, hreflang will not be generated automatically.<\/li>\n<li><strong>Cache that ignores language.<\/strong> The classic cause of visitors seeing the wrong language.<\/li>\n<\/ul>\n<h2>Pre-launch checklist<\/h2>\n<ol>\n<li>Every page has hreflang for all versions, including itself.<\/li>\n<li>Language codes are correct: <code>uk<\/code>, <code>en<\/code>, <code>bg<\/code>, not <code>ua<\/code>.<\/li>\n<li><code>x-default<\/code> is set.<\/li>\n<li>The <code>lang<\/code> attribute matches the version.<\/li>\n<li>No automatic redirects by IP.<\/li>\n<li>Titles and descriptions are unique per language.<\/li>\n<li>The switcher leads to the equivalent page, not the homepage.<\/li>\n<li>System pages and form messages are translated.<\/li>\n<li>Slugs use Latin characters.<\/li>\n<li>The sitemap contains all versions with language annotations.<\/li>\n<\/ol>\n<p>A multilingual site pays off because the same work starts drawing traffic from several markets. But only if the search engine understands which version to show to whom. Anything less is one page competing against itself.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Multilingual sites break on technical details, not translation. We cover three ways to structure languages, the hreflang rules, the difference between translation and localisation, and a ten-point pre-launch checklist.<\/p>\n","protected":false},"author":5,"featured_media":8004,"template":"","insight_category":[154],"insight_tag":[184,172,162],"class_list":["post-8008","insight","type-insight","status-publish","has-post-thumbnail","hentry","insight_category-guides","insight_tag-localization","insight_tag-seo","insight_tag-web-development"],"acf":[],"_links":{"self":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight\/8008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight"}],"about":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/types\/insight"}],"author":[{"embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/users\/5"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/media\/8004"}],"wp:attachment":[{"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/media?parent=8008"}],"wp:term":[{"taxonomy":"insight_category","embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight_category?post=8008"},{"taxonomy":"insight_tag","embeddable":true,"href":"https:\/\/dextora.agency\/en\/wp-json\/wp\/v2\/insight_tag?post=8008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}