What hreflang does and what it does not
Hreflang is a small piece of markup that lists all language versions of a page. It tells search engines: this page is in Estonian, the same content in Russian lives at this address, and the English one at that address.
With this information Google can swap the result in search. A user searching in Russian sees the Russian URL, even if the Estonian page is the one with the stronger ranking signals.
Hreflang does not improve rankings by itself. It does not make a page appear for more queries. It only decides which of your versions is shown once one of them qualifies.
It also helps with a second problem. Pages that are near copies of each other, such as English for the UK and English for Ireland, can look like duplicate content. Hreflang explains that they are deliberate alternatives for different audiences.
It is not a redirect and does not change what visitors see when they arrive directly. Language switching on the site itself is a separate feature.
When you need it
Any site with the same content in two or more languages should have hreflang. In Estonia that covers most business websites, since Estonian, Russian and English versions are common.
- Different languages for the same country: Estonian and Russian pages for customers in Estonia.
- Same language, different countries: one English page for the UK with prices in pounds and another for the EU with prices in euros.
- A mix of both: a store selling to Estonia, Latvia and Finland in local languages with an English fallback.
You do not need it on a single language site, or on pages that exist in only one language, such as a blog post written only in English. A page without translations simply has no alternatives to list.
Automatic translation widgets that change the text in the browser do not create separate URLs, so there is nothing for hreflang to point to. Each language needs its own address, for example /ru/ and /en/.
How to write the tags
The most common method is a set of link elements in the head of each page. Each element has three parts: rel alternate, the hreflang code and the full URL of that version.
The code is a two letter language code from ISO 639-1: et for Estonian, ru for Russian, en for English, fi for Finnish. Optionally a region follows after a hyphen, using the ISO 3166-1 country code: en-GB, en-IE, ru-EE.
Use a region only when you really have different pages for different countries. For an Estonian company with one Russian version, plain ru is correct and reaches Russian speakers everywhere.
Three rules make or break the setup.
- Every page lists all versions including itself. The Estonian page lists et, ru and en, and so do the Russian and English pages.
- Links must be reciprocal. If the Estonian page points to the Russian one but the Russian page does not point back, Google ignores the pair.
- URLs must be absolute, with https and the domain, and must point to the final address, not to a redirect.
Add an x-default entry as well. It names the page to show when none of the languages match the user, usually the English version or a language selection page.
On large sites the same information can be placed in the XML sitemap instead of the page head. The result is the same; choose one method and keep it consistent.
Mistakes that make Google ignore hreflang
Most hreflang problems come from a short list of errors, and they are usually introduced by a plugin setting or a template rather than by hand.
- Wrong codes. The country code for the United Kingdom is GB, not UK. Estonian is et, while ee is the country code and cannot stand alone as a language.
- Missing return links, often because one language version was added later and the older templates were not updated.
- Pointing to pages that redirect, return a 404 or are blocked from indexing.
- Conflict with canonical tags. Each language version must have a canonical pointing to itself. If the Russian page declares the Estonian page as canonical, you are telling Google the Russian page should not be indexed.
- Linking every page to the homepage of the other language instead of to the matching page.
- Trailing slash and prefix mismatches, such as listing /en/ when the real address is /en, which sends the tag to a redirect.
A related mistake is redirecting visitors automatically by IP address or browser language. Googlebot crawls mostly from the United States, so forced redirects can hide your other versions from it entirely. Offer a visible language switch or a suggestion banner instead.
How to check your setup
You do not need paid tools to verify hreflang on a small site.
Open a page, view the source and search for hreflang. You should see one line per language plus x-default, each with a full URL. Then open one of the other languages and confirm it lists the same set.
Click each URL from the list. Every one should load directly with status 200, without a redirect.
In Google Search Console, use URL inspection on a few pages in each language and check that the Google selected canonical is the page itself. In the performance report, filter by country and by page to see whether, for example, Russian searches from Estonia land on /ru/ pages.
A desktop crawler such as Screaming Frog, which is free for up to 500 URLs, reports missing return links and invalid codes across the whole site in one pass.
After fixing errors, allow a few weeks. Google needs to recrawl all versions of a page before it trusts the set, so the wrong language can keep appearing in results for a while.
Recheck after every redesign, migration or change of URL structure. Hreflang is one of the first things to break quietly when templates change.
FAQ
Does hreflang improve my rankings?
Not directly. Hreflang is not a ranking factor and adding it will not move a page higher for a given query. What it does is make sure the right version of a page is shown to the right audience. That has indirect benefits which can be significant. Visitors who land on a page in their own language stay longer, are more likely to enquire or buy, and are less likely to return to the results and click a competitor. Hreflang also lets your language versions share signals as a group instead of competing against each other, and it reduces the risk that similar pages in the same language are treated as duplicates. So you should expect better click through rates and conversions from international and multilingual traffic rather than a jump in positions.
Should I use ru or ru-EE for a Russian version in Estonia?
In almost all cases plain ru is the better choice. The code ru tells Google the page is for Russian speakers anywhere, which includes Russian speakers in Estonia, Latvia, Finland or Germany. The code ru-EE narrows the target to Russian speakers located in Estonia only, so a Russian speaking customer searching from Riga or Helsinki may not be matched to it. A region code makes sense only when you have separate Russian pages for different countries, for example one with Estonian prices and delivery terms and another for Latvia. In that case you would use ru-EE and ru-LV and usually add a general ru version as a fallback. For a typical Estonian business with one Estonian, one Russian and one English version, use et, ru, en and x-default.
Do I need hreflang if only some pages are translated?
Yes, for the pages that are translated. Hreflang works page by page, not for the site as a whole. A service page that exists in Estonian, Russian and English should list all three versions. A blog post that exists only in Estonian should have no hreflang set at all, or only a self reference, and it will simply compete in search as a normal page. What you should avoid is pointing the missing translation to something else, such as the homepage of the other language or an unrelated article, because Google treats mismatched pairs as errors and may start ignoring your annotations. Most multilingual plugins and frameworks handle this automatically if translations are linked to each other properly in the content system, so the practical task is to keep those links correct.
