Split languages onto separate pages first
Translating the menu is not enough. If the language switches via cookie or JavaScript but the URL stays the same, users may be fine—search engines still have nothing solid to index.
The mistake I would remove first: Adding hreflang only on the Russian page.

What to prepare and what result to expect
- Outcome: Search engines know which page to show, and visitors do not land on Russian copy with the wrong currency and phone number.
- Choose a URL structure such as /ru/, /en/, /de/. Record language, market, currency, contact, and the distinct search intent of each version.
- Keep source data and access rights separate from the output so you can verify what the multilingual site version produced.
- Check the language switcher, source HTML, and sitemap for each version. Every page should link to itself and the other versions.
Link URL versions and verify the translation
- Create separate URLs
Build /ru/services/repair/ and /en/services/repair/ instead of ?lang=en. Do not mix two languages on one URL.
Проверьте: Each version opens directly and has its own title, H1, and html lang.
Если не сработало: Start with two languages and one service page.
- Add reciprocal hreflang
In each page head add the full alternate set, including the page itself and x-default. Links must be absolute and reciprocal.
<link rel="alternate" hreflang="ru" href="https://example.com/ru/services/repair/"> <link rel="alternate" hreflang="en" href="https://example.com/en/services/repair/"> <link rel="alternate" hreflang="x-default" href="https://example.com/ru/services/repair/">Проверьте: The English page links back to the Russian one—not only the Russian page to English.
Если не сработало: Check the head generation template on every locale.
- Point canonical to the same language
Canonical for /en/services/repair/ must point to the English page, not the Russian one. Add only ready versions to the sitemap.
Проверьте: There is no redirect → canonical chain to another language.
Если не сработало: Remove the duplicate from the index until the template is fixed.
- Localize meaning, not only words
Check title, description, H1, URL, prices, currency, address, phone, form, images, and FAQ. Use machine translation only as a draft.
Проверьте: A native speaker sees that the service and next step fit their market.
Если не сработало: Rewrite the first screen and CTA by hand before expanding the locale.

A language URL map before translation
First build a table: `/ru/services/`, `/en/services/`, `/de/services/` and the mappings between them. Do not publish a language until it has a full page, form, price/currency, and a local next step. Avoid IP redirects that stop a crawler from opening the right version.
On each page the canonical is usually self-referencing. Set the correct `lang` on `<html>`, but do not treat it as a substitute for hreflang. After publication check HTML with `curl -s URL | grep -i hreflang` and test return links.
<link rel="alternate" hreflang="ru" href="https://example.com/ru/services/">
<link rel="alternate" hreflang="en" href="https://example.com/en/services/">
<link rel="alternate" hreflang="de" href="https://example.com/de/services/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">
Localization is not word replacement
Check currency, phone, address, hours, payment terms, delivery, legal documents, client examples, and CTAs. Do not change `en-GB` to `en-UK`; language comes first, region after the hyphen. In Analytics compare leads by language folders; in Search Console compare countries and devices.
- The English page links back to the Russian page.
- Do not canonicalize all languages to English.
- Do not add missing translations to the sitemap.
I treat versions as separate products
Assign a translation owner and review date for each locale. Store `locale`, `url`, `canonical`, `hreflang_set`, `currency`, `phone`, `form_recipient`, and `last_reviewed` in a table. A test lead from each version must hit the right queue—otherwise you have a language SEO signal with no business behind it.
Do not auto-translate legal terms, prices, and promises without an editor. If only the menu language changes and the content is the same, that is not full localization and not a reason to create dozens of weak URLs.
What to localize beyond the text
| Criterion | Question | Good sign |
|---|---|---|
| Input | What exactly goes into a multilingual site version? | Choose a URL structure such as /ru/, /en/, /de/. Record language, market, currency, contact, and the distinct search intent of each version. |
| Action | What is the system allowed to do on its own? | Only pre-listed actions, without access to the entire account |
| Verification | How do you know the result is acceptable? | Check the language switcher, source HTML, and sitemap for each version. Every page should link to itself and the other versions. |
| Failure | Where does an unclear case go? | Remove the broken version from hreflang and sitemap until translation and canonical are ready. |
What should change after setup
Search engines know which page to show, and visitors do not land on Russian copy with the wrong currency and phone number.

Why hreflang does not save a poor translation
Adding hreflang only on the Russian page.
Pointing every language’s canonical to the Russian version.
Auto-redirecting by IP and hiding a manual language switcher.
Translating the menu but leaving Russian prices and terms on the service page.
When multilingual work needs its own project
You need a specialist if versions live on different domains, have regional pricing, involve a large migration, or carry legally different terms.
What to check on every locale
Do you need hreflang for two languages in one market?
Yes, if there are separate full URLs and search engines need to understand how the versions relate.
Can you translate a page automatically?
Yes, as a draft. Terms, prices, legal wording, and natural phrasing still need a human review.
Folders or subdomains?
For a small site, folders are easier to maintain. Subdomains or separate domains make sense when markets and teams are independent.
Can one shared contact page stay?
Only if the contact is truly shared. For a local market, show a local phone, currency, and business hours.






