How hreflang tags work
Hreflang tags are annotations that tell a search engine which language each version of a page is written in and where the other versions live. In Uzbekistan this matters more than in many markets, because a clinic in Tashkent or an online shop taking Click and Payme payments will often serve one customer in Russian and the next in Uzbek, sometimes within the same hour.
Without the tags, a search engine may show the Russian page to someone searching in Uzbek, or treat the two versions as near-duplicates competing with each other. With them, it has a clear map. Keep expectations realistic, though: hreflang is a hint, not a command, and it does not replace translation or lift rankings by itself.
What the markup looks like
Every language version lists all versions, including itself. For a service page, the head of both the Russian and the Uzbek page carries the same three lines:
Use full absolute addresses that return a normal page, with no redirects in between. The same annotations can also go into HTTP headers, which helps for PDFs, or into the XML sitemap, which is easier to manage for a catalogue with many product pages. Pick one method and stay with it so the data never drifts apart.
- <link rel="alternate" hreflang="ru" href="https://example.uz/ru/uslugi/" />
- <link rel="alternate" hreflang="uz" href="https://example.uz/uz/xizmatlar/" />
- <link rel="alternate" hreflang="x-default" href="https://example.uz/" />
Language codes and the Uzbek alphabet question
Use ru for Russian and uz for Uzbek. A region can be added, such as ru-UZ or uz-UZ, but a site aimed at one country usually does fine with the language alone. Region on its own, without a language, is not valid.
Uzbek brings an extra wrinkle: Latin and Cyrillic versions share the same language code. The standard does allow script subtags such as uz-Latn and uz-Cyrl, but the safer path is to decide which alphabet your audience mostly reads and build a complete version in it. Do not publish a second script just to tick a box; two half-finished copies are worse than one good page.
Rules that cause most hreflang errors
Most broken setups fail on a handful of points. Check these first.
The canonical conflict deserves a note of its own. If the Russian page declares the Uzbek page as canonical, you are effectively asking to drop the Russian page from the index, and the hreflang pair stops making sense.
- Return links: if the Russian page points to the Uzbek one, the Uzbek page must point back, or the pair is ignored.
- Self-reference: each version includes itself in its own list.
- Self-canonical: each language version is canonical to itself.
- Live targets: no 404s, no redirects, no pages blocked from indexing.
- Matching pages: a service page points to its translation, not every version to the home page.
- Valid language codes, not invented ones.
x-default and the language switcher
The x-default value is a fallback for visitors whose language matches none of your versions, such as an English-speaking visitor from abroad. It usually points to a language selection page or the main version of the site.
Avoid replacing the markup with automatic redirects based on IP address or browser language. Both crawlers and people can get stuck behind a forced redirect. A visible language switcher on every page works better, as long as it leads to the same page in the other language and not to the home page. It also helps anyone who lands on the wrong language after tapping a link in Instagram or a Telegram channel.
How to check your setup
Run a crawler over the site. It will flag pages with missing return links, broken addresses and canonical conflicts. In Search Console, watch indexing and see which versions actually appear in results. Then open the source of a few key pages and confirm the set of links is identical on both language versions.
Repeat the check after a CMS change, a URL restructure or a new section launch. Hreflang usually breaks during exactly those edits, and nobody notices until traffic from one language drops.
Where to start
List which pages truly exist in both languages and agree on one URL structure, for example separate /ru/ and /uz/ sections. Generate the annotations from a template instead of editing pages by hand. And keep the translation real: a clipped machine translation does not become useful just because hreflang is attached to it.
If your site already runs in two languages and you are unsure about the markup, markdev can review it as part of SEO optimisation in Uzbekistan and point out what to fix first. Tell us about your site and we will talk through the next steps.
FAQ
Do I need hreflang if only some pages are translated?
Add it only for pages that have a real counterpart in another language. Pages without a translation need no annotations, and pointing to empty or unfinished versions only creates errors.
What should I do about Latin and Cyrillic Uzbek?
Both share the uz code. It is safest to choose the main alphabet for your audience and build a full version in it. If you need both, script subtags such as uz-Latn and uz-Cyrl exist, but test the result carefully.
Can I put hreflang only in the sitemap?
Yes. Tags in the head, HTTP headers and the XML sitemap are all valid. Choose one method and keep the data complete and consistent across every language version.
Will hreflang improve my rankings?
Not on its own. It helps search engines pick the right language version and stops translations from being mistaken for duplicates. Growth still depends on content quality, site structure and other signals.
Let’s look at your task for free
Leave your contact — in a 15-minute call we’ll show where leads get lost and what to fix first.