Article contents
In short: for a multilingual site to perform in search, each language needs its own URL, its own metadata and a quality translation, and counterpart pages must be linked with reciprocal hreflang tags. For Ukrainian, English and Russian versions use the codes uk, en, ru and add x-default.
What is multilingual SEO and why isn't translating the text enough?
A translation alone tells a search engine nothing about the relationship between versions. Without technical setup Google may show the wrong language, treat versions as duplicates or index only one. Multilingual SEO has four parts:
- URL structure, where each language has its own address.
- hreflang tags linking counterpart pages.
- Localised content and keywords, not word-for-word translation.
- Correct site behaviour: a language switcher and no forced IP redirects.
Which URL structure should you choose?
| Option | Example | Pros | Cons |
|---|---|---|---|
| Subdirectories | site.com/en/ |
One domain, easier to maintain, shared authority | One server and one CMS |
| Subdomains | en.site.com |
Can be hosted separately | Harder to analyse, sometimes treated separately |
| Separate domains | site.com, site.com.ua |
Clear geo signal | More expensive, authority is not combined |
| Parameters | site.com?lang=en |
Quick to build | Not recommended, unreliable for indexing |
For most business sites subdirectories give the best balance: / or /uk/ for Ukrainian, /en/ for English, /ru/ for Russian. What matters is a stable, predictable scheme that never changes.
What is hreflang and how does it work?
hreflang is an annotation telling a search engine: "this page has versions in other languages at these addresses". It doesn't change rankings directly, but helps show users the right language version and avoids confusion with duplicates.
Rules without which hreflang fails:
- Reciprocity. If page A points to B, B must point back to A.
- Self-reference. Every page includes an hreflang for itself.
- Full absolute URLs. With protocol and domain.
- Correct codes. Language per ISO 639-1; region per ISO 3166-1 where needed.
- Equivalence. Counterpart pages must be genuine translations of the same content.
- Self-canonical. Don't point one language's canonical at another.
A common mistake is the code ua. Ukrainian as a language is uk; ua is a country code. Use hreflang="uk" for the language and uk-UA for language plus country.
hreflang example in the <head>
<link rel="alternate" hreflang="uk" href="https://site.com/uk/services/seo/" />
<link rel="alternate" hreflang="en" href="https://site.com/en/services/seo/" />
<link rel="alternate" hreflang="ru" href="https://site.com/ru/services/seo/" />
<link rel="alternate" hreflang="x-default" href="https://site.com/uk/services/seo/" />The same set must appear on each of the three pages. x-default points to the version for users whose language isn't supported, or to a language selection page.
hreflang in the sitemap
On large sites it is more convenient to declare hreflang in the XML sitemap rather than in every <head>:
<url>
<loc>https://site.com/uk/services/seo/</loc>
<xhtml:link rel="alternate" hreflang="uk" href="https://site.com/uk/services/seo/"/>
<xhtml:link rel="alternate" hreflang="en" href="https://site.com/en/services/seo/"/>
<xhtml:link rel="alternate" hreflang="ru" href="https://site.com/ru/services/seo/"/>
<xhtml:link rel="alternate" hreflang="x-default" href="https://site.com/uk/services/seo/"/>
</url>Use one method so <head> and the sitemap never contradict each other.
Default language and automatic redirects
Don't force-redirect users and bots by IP or the Accept-Language header. Googlebot usually crawls without language preferences, so a forced redirect can hide the other versions from it. Instead:
- serve the content for the requested address;
- offer a convenient language switcher on every page built with ordinary
<a>links; - if needed, suggest changing language with an unobtrusive banner.
Translation and localisation: why literal translation isn't enough
Users of different languages phrase queries differently, and keywords don't translate one to one. For example, what Ukrainian users search as "створення сайту" is more often "web development" or "website design" in English. So:
- Research keywords separately for each language and market instead of copying from one.
- Have a native speaker edit the translation so it reads naturally.
- Localise currency, date formats, phone numbers, examples and legal text.
- Avoid mixed pages with part of the text in another language.
- Don't use unedited machine translation for important pages.
What else should you localise beyond body text?
title,description, H1, image ALT attributes;- slugs (transliterated or translated, with one consistent approach);
- Schema.org markup:
inLanguage, names and descriptions; - breadcrumbs, menus, buttons, form messages;
- cookie banner and privacy policy;
- sitemap and analytics tracking per language.
Set <html lang="uk"> to match the page language: it helps accessibility and browsers, although hreflang remains the main signal to search engines about alternates.
Common mistakes
hreflang="ua"instead ofuk.- No return links between versions.
- Every language version has a canonical pointing at one language.
- Partially translated pages and mixed content.
- Automatic redirects by IP.
- A JavaScript-only language switcher with no plain links.
- Menu and footer left in one language on translated pages.
- Different hreflang sets in
<head>and in the sitemap.
How do you verify the setup?
- Crawl the site with a crawler that supports hreflang and review errors: missing return links, invalid codes, pages in the set that redirect or are noindex.
- Check in Search Console that all language versions are indexed.
- Review Performance by country and page: are users landing on the right language?
- Open several URLs manually and compare their hreflang sets with the actual addresses.
The separate International Targeting report in Search Console has been retired, so rely on a crawler, indexing and performance data.
Action plan
- Choose a URL scheme and freeze it.
- Map page counterparts between languages in the CMS.
- Add hreflang (in
<head>or the sitemap) andx-default. - Prepare localised title, description, H1 and slug.
- Research keywords for each language separately.
- Build the language switcher with links.
- Verify with a crawler and Search Console.
FAQ
Is hreflang mandatory?
No, but for a site with several languages it is the most reliable way to declare counterparts. Without it a search engine may show the wrong version.
Can you combine several languages on one page?
Better not. One page, one language, with separate URLs for the others.
What hreflang code is used for Ukrainian?
uk. The code ua is invalid for a language.
Do duplicates between languages hurt?
Translated pages aren't treated as duplicates when they are genuinely in different languages and properly linked. Problems arise with partial translations and identical text on different URLs.
Do you need a separate language selection page?
Not necessarily. x-default pointing to the main language version plus a switcher on every page is often enough.
Which matters more: hreflang or translation quality?
Both. hreflang links pages together, while translation quality and keyword localisation decide whether they get found and convert.
Setting up a site in several languages? Get a free Kyivan audit — a developer will check hreflang, canonicals, URL structure and metadata localisation.
Web developer and SEO specialists. We write about technical SEO, Google Shopping and ads.