SEO

Building Multilingual Websites That Actually Rank

Most multilingual sites fail in search because they were treated as a translation job rather than an architecture decision. Here is how we structure, tag and ship sites that rank in every language they serve.

Adding a second language to a website looks like a content problem. Get the copy translated, drop it into a language switcher, done. In practice it is an architecture problem, and the sites that quietly underperform in search are almost always the ones where that decision was made last instead of first.

We have shipped sites in English, German, French, Italian, Hebrew, Polish, Dutch and Norwegian — a Hebrew right-to-left e-learning platform serving certification courses across Israel, German healthcare and clinic sites, a Dutch WooCommerce store for a sustainable cosmetics brand, a Norwegian retail catalogue, a Polish wellness and education site. Across 50 delivered builds on four continents, the multilingual builds are the ones where the technical groundwork pays for itself fastest, and where shortcuts cost the most to unwind.

This guide covers what actually determines whether your translated pages get indexed, ranked and served to the right audience: URL structure, hreflang, translation quality, layout direction, performance parity across locales, and the WordPress stack that holds it all together. No theory you cannot act on this week.

Search engines do not reward you for having translated content. They reward you for making it unambiguous which version belongs to which audience, and for making each version genuinely useful in its own language. Nearly every failure we are asked to diagnose traces back to one of a small number of causes.

  • Every language lives on the same URL, swapped client-side by a script — so there is only one page for crawlers to index, and only one language ever ranks.
  • Translations exist but are not linked to each other, so Google treats them as unrelated thin pages competing with the original.
  • Machine translation was shipped untouched, producing copy that reads as filler to users and carries none of the search terms people in that market actually type.
  • The language switcher is the only internal link into the translated tree, so those pages sit three clicks from anywhere and accumulate no internal authority.
  • Only the homepage and a handful of top pages were translated, leaving users who land deep in a foreign-language site with a dead end.
  • Auto-redirects based on IP address bounce crawlers — and travelling users — into the wrong locale before they can choose.

None of these are hard to avoid. They are just hard to fix after launch, because each one is baked into how the site is structured rather than what it says.

Decide your URL structure before you pick a plugin#

This is the first decision and the most expensive one to reverse. Every translated page needs its own crawlable, indexable, permanently stable URL. How you carve that up determines your geo-targeting signals, your hosting complexity and how your authority is distributed.

StructureExampleGeo/language signalBest forMain trade-off
Subdirectoryexample.com/de/Inherited from the root domainMost sites — especially one brand serving several languagesCannot be geo-targeted independently at the domain level
Subdomainde.example.comTreated as a separate hostSeparate regional teams or separate hosting stacksAuthority is split; more DNS, TLS and analytics overhead
Country-code TLDexample.deStrongest single country signalSerious country-level commitment with local entity and supportEvery domain starts from zero; multiplied cost of maintenance
URL parameterexample.com/?lang=deWeak and unreliableNothing — avoid itFragile, ugly, prone to duplicate-content problems

For the large majority of clients we recommend subdirectories on a single domain. One site to secure, one site to maintain, one pool of domain authority feeding every language, and one place to deploy. We reserve country-code domains for organisations that genuinely operate as separate businesses per market — a local entity, local support hours, local pricing and legal terms. If your German operation is simply your business with German copy, a ccTLD adds cost and dilutes strength for no gain.

Translate the slugs, not just the content#

If a German visitor searching for zahnarzt-marketing lands on example.com/de/dentist-marketing/, you have thrown away a relevance signal and a small amount of user trust. Localise the slug alongside the copy. This is trivial at build time and painful to retrofit, because every change afterwards requires a redirect you then have to maintain forever.

hreflang: the part everybody gets wrong#

hreflang tells search engines that two pages are the same content for different audiences. It is not a ranking factor in itself — it is a disambiguation mechanism. Implemented properly, it stops your English page from outranking your German page in Germany, and it stops the two from being read as duplicates. Implemented sloppily, it is ignored entirely.

You can declare it in the HTML head, in the XML sitemap, or in HTTP headers for non-HTML files such as PDFs. Pick one method and apply it consistently. On WordPress builds we usually let the translation plugin emit head tags and mirror the same set in the sitemap.

<!-- On every version of the page, including the page itself -->
<link rel="alternate" hreflang="en" href="https://example.com/services/" />
<link rel="alternate" hreflang="de" href="https://example.com/de/leistungen/" />
<link rel="alternate" hreflang="nl" href="https://example.com/nl/diensten/" />
<link rel="alternate" hreflang="he" href="https://example.com/he/sherutim/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/services/" />

<!-- Each version still points its canonical at itself, never at the original -->
<link rel="canonical" href="https://example.com/de/leistungen/" />

The five rules that break most implementations#

  1. Annotations must be reciprocal. If the English page points at the German page, the German page must point back — and at every other language in the set. A one-way reference is discarded.
  2. Every page in the set must reference itself. Self-referencing hreflang is not optional; omit it and the cluster is incomplete.
  3. Use absolute URLs with the correct protocol and host. Relative paths and http:// leftovers are a common silent failure.
  4. Use valid codes: ISO 639-1 for language, optionally plus ISO 3166-1 alpha-2 for region — de, de-AT, en-GB. There is no "de-DE" requirement and there is no such thing as an "eu" or "uk" language code.
  5. Never point hreflang at a URL that redirects, 404s, or is blocked by robots.txt or a noindex tag. The target must be the live, indexable page.

Translation quality is a ranking factor in everything but name#

Machine translation has become genuinely good, and we use it as a starting point on large content sets. What it cannot do is know how your market searches. A literal translation of your English page will faithfully reproduce your English keyword strategy in another language, which is almost never the strategy that wins there.

Do keyword research per language, not per translation#

Search behaviour differs by market in ways that never surface in a translation memory. German audiences search with long compound nouns. Dutch and Norwegian searchers frequently use English loanwords for technical products even when the surrounding sentence is not English. Hebrew queries are often shorter and more colloquial than their formal written equivalents. The right process is: research the target market’s terms first, then write the page around them, then check it against the source for factual consistency — not the other way round.

The same applies to everything around the copy. Titles and meta descriptions need to be written for each language, not truncated translations. Currency, date formats, phone number formats, address order, units and legal pages all change per market. On the German clinic and healthcare marketing sites we have built, regulatory language and the way credentials are presented had to be handled locally — that is not something a translation layer can infer.

Right-to-left and non-Latin scripts change the build, not just the text#

Hebrew and Arabic are where a translation-as-an-afterthought approach falls apart fastest. When we built a Hebrew e-learning platform delivering certification courses in real estate appraisal, mortgage advisory and business valuation, the RTL requirement touched the theme, the course catalogue, the navigation and the forms — not just the strings.

  • Set dir="rtl" and the correct lang attribute on the html element for that locale, so the browser handles bidirectional text properly.
  • Use CSS logical properties — margin-inline-start, padding-inline-end, inset-inline — instead of left and right, so one stylesheet serves both directions.
  • Mirror directional icons: arrows, chevrons, progress indicators and breadcrumb separators all need flipping. Logos, clocks and media playback controls do not.
  • Check that the typeface actually contains the script, and give RTL text its own line-height — Hebrew and Arabic glyphs sit differently from Latin ones.
  • Test forms, tables and any third-party embed separately. Plugin output and payment widgets are the most common places where a left-to-right layout leaks through.
  • Never mirror numbers, code samples, or Latin-script brand names that appear inside RTL sentences.

Budget real QA time for this. An RTL build is not a five per cent addition to a project — the layout work is closer to a second front-end pass.

Keep performance and technical hygiene equal across locales#

Translated pages are frequently slower than the originals, and nobody notices because nobody tests them. Extra plugin queries, unoptimised locale-specific images, a second web font loaded for a non-Latin script, and translation tables joined on every request all add up. Google’s Core Web Vitals thresholds apply per URL, so your German pages are judged on their own: Largest Contentful Paint under 2.5 seconds, Interaction to Next Paint under 200 milliseconds, Cumulative Layout Shift under 0.1.

  • Run field and lab performance tests on at least one page per language, not only the English homepage.
  • Preload only the font subsets a locale actually needs — do not ship Hebrew glyphs to Dutch visitors.
  • Watch for text expansion: German copy commonly runs longer than English, which can push buttons, cards and navigation into wrapping or overflow.
  • Make sure every locale is in the XML sitemap and that translated pages are not accidentally excluded by a noindex rule or a stale robots directive.
  • Set up a Search Console property or filter per language so you can see indexing and query data separately.
  • Localise structured data too — the name, description and offer fields in your JSON-LD should be in the page’s language.

Choosing the WordPress translation stack#

42 of our 50 delivered builds are WordPress builds, so this is the decision we make most often. There is no universally correct answer; there is a correct answer for the size of your content set, your editorial workflow and your budget for ongoing maintenance.

ApproachHow it worksStrengthsWatch out for
WPMLSingle site, translations stored alongside originalsMature, handles WooCommerce and custom fields, translation management workflow, strong RTL supportCommercial licence; adds database queries — pair it with object caching
PolylangSingle site, one post per language linked as a setLight, free core, clean permalinks, good for content-led sitesE-commerce and string translation need paid add-ons; less workflow tooling
Multisite networkOne WordPress install, one site per languageComplete separation of content, plugins and teams per marketDuplicated maintenance and updates; hreflang must be wired up manually
Headless with a translation APIContent served from an API to a Next.js or similar front endTotal control over routing, performance and hreflang outputHighest build cost; only worth it for large or unusual content models

For a marketing site or clinic site in two to four languages, Polylang or WPML on a single install is almost always the right call. For a WooCommerce store selling into several markets with different catalogues, currencies and tax rules, WPML earns its licence fee. Multisite is worth it when different markets are genuinely run by different people with different plugin needs — otherwise you have just tripled your update workload.

A pre-launch checklist#

Before a multilingual site goes live, we work through the following. It takes an afternoon and it catches the problems that would otherwise take months to show up in your analytics.

  1. Every translated page has its own static URL, and slugs are localised.
  2. hreflang is reciprocal, self-referencing, absolute and validated with a crawler across the whole site, not just a sample.
  3. Each page canonicalises to itself, never to the source language.
  4. The language switcher links to the equivalent page, not to the translated homepage.
  5. Navigation, footer, forms, error messages, cookie notice and email notifications are all translated — not just page bodies.
  6. Titles, meta descriptions, image alt text and structured data are localised.
  7. No IP-based forced redirects; any locale suggestion is dismissible and remembered.
  8. RTL locales have been reviewed page by page on mobile and desktop.
  9. Core Web Vitals checked on a representative page in every language.
  10. XML sitemap includes every locale, and Search Console is configured to report on each.

How we approach multilingual builds at Tekvion#

We start by mapping the content, not the languages. Which pages actually need to exist in each market, which are shared, and which are market-specific from the outset? Most clients arrive assuming a full mirror of the site in every language. Often the better answer is a complete core plus a small set of market-specific pages, which costs less to produce and far less to maintain.

From there we fix the architecture in writing before any content is produced: URL structure, the hreflang plan, the plugin or platform choice, and how translations will be maintained after launch. We build the English or source version first with the translation layer already installed, so nothing has to be restructured later. Layout is tested against the longest expected translation rather than the shortest, and any RTL locale gets its own front-end pass.

Then we hand over a workflow, not just a site. Whoever maintains your content needs to know what happens when a new page is published in one language — who translates it, where the hreflang comes from, and how to check it landed correctly. A multilingual site that nobody can update in every language degrades within a year. We document that process and, where clients prefer it, keep it running under a maintenance arrangement. Most of our clients stay with us for two years or more, and the multilingual builds are the ones where that continuity matters most.

Where to start#

If you are planning a new multilingual site, the sequence is: decide the URL structure, choose the platform, then write the content — in that order. If you already have translated pages that are not ranking, start with a crawl that validates hreflang and canonical tags across the full site, because that is where the majority of the damage usually sits.

This work sits at the intersection of several of the things we do. Our SEO services cover the technical audit, hreflang validation and per-market keyword research. Our WordPress development and custom website development teams handle the build, the RTL front-end work and the translation stack. And if your existing site needs to move to a structure that can support multiple languages properly, our website migration and replatforming service exists to make that transition without losing the rankings you already have. Tell us which languages you need and which markets matter most, and we will tell you honestly what the build actually requires.

About the author

Portrait of Shaharyar Ansari

Shaharyar Ansari

Chief Technology Officer

Shaharyar co-founded Tekvion and owns its technical architecture. He is a WordPress developer and a MERN developer: custom themes, WooCommerce stores and multilingual, right-to-left builds such as the Hebrew e-learning platform Afik on one side, React and Node applications on the other. He decides which stack a project belongs on, builds the harder parts himself, and holds the line on performance and Core Web Vitals. He also handles AI and LLM integrations, migrations, hosting environments and the security side of every care plan.

  • WordPress development & architecture
  • MERN stack development (React, Node)
  • Performance and Core Web Vitals
  • AI / LLM and API integrations

Back to all articles

Keep Reading

More from the same shelf:

Strategy27 May 2026 · 11 min read

The Website Redesign Checklist That Protects Your SEO

Redesigns rarely lose traffic because of the new design — they lose it because of what happened to URLs, content and internal links. Here is the checklist we work through on every rebuild.

Read More
Business15 Apr 2026 · 9 min read

What a Website Really Costs in 2026

A website is a range, not a price. Here is an honest breakdown of what moves the number in 2026 — scope, design, functionality, languages and upkeep — plus indicative budget bands and how to brief so quotes are actually comparable.

Read More

Let’s Build Something Great

Tell us what you are building and we will come back with a plan, a timeline, and a fixed price.