Hreflang is an annotation that connects equivalent pages for different languages or regions. It helps Google understand which version is intended for which audience. It doesn't translate content, redirect visitors or make a weak page useful.

If you run a single English-language website, international visitors alone aren't a reason to add it. Hreflang becomes relevant when you actually publish alternatives, such as English and Serbian versions of the same service page. This guide starts there, then walks through a small implementation you can check yourself.

When Do You Need Hreflang?

Think in terms of a visitor's choice. Is there another version of this page that serves the same purpose for a different language or regional audience? If yes, there's a relationship worth mapping. If not, adding language labels won't create one.

Start with the content, not with a plugin setting.
SituationPractical starting point
One English site, worldwide readersNo alternate pages to connect. Don't manufacture hreflang entries.
English and Serbian versions of each serviceMap equivalent service URLs into language groups.
Separate UK and US product pagesReview regional alternatives and their canonical strategy together.
Only the navigation is translatedReview the actual content and user experience before calling it a translated page.

Google recommends separate URLs for language versions and determines page language from visible content. A translated menu around an otherwise untranslated article isn't the same as a useful translated article. Its multilingual website guidance explains the distinction.

For a small business, translation maintenance matters as much as launch. Who will update the second version when the service, price or eligibility changes? It's better to publish a smaller set of maintained alternatives than to create a large collection of neglected copies.

Hreflang, Canonical and HTML Lang Do Different Jobs

  • Hreflang: connects equivalent language or regional versions.
  • Canonical: indicates the preferred representative among duplicate or very similar URLs.
  • HTML lang: declares the language of a document or element, helping software such as screen readers pronounce it appropriately.

MDN's lang reference covers that third role. A German page can have <html lang="de">, a canonical pointing to its own preferred address, and hreflang links to its English and Serbian equivalents. Those instructions aren't substitutes for each other.

In the simple translated-page example below, each page self-canonicalizes. Don't canonicalize every translation to English: that asks Google to consolidate pages you're also trying to present as alternatives. Google's canonical guidance recommends a canonical in the same language when using hreflang, where one exists.

Same-language regional duplicates need a more deliberate decision. Google discusses combining a preferred canonical with regional annotations in its multi-regional guidance. Don't apply the translated-page recipe blindly to ten nearly identical English country pages. First decide what each version genuinely offers. Our canonical URL guide and duplicate content guide explain the underlying choices.

Map One Content Group Before Writing Tags

The following URLs are fictional examples. Imagine three genuinely translated versions of an SEO audit service. They describe the same service and help readers complete the same task:

One service, three equivalent pages. These aren't live ivig.dev pages.
AudienceCodePreferred URL
English readersenhttps://example.com/en/seo-audit/
German readersdehttps://example.com/de/seo-audit/
Serbian readerssrhttps://example.com/sr/seo-audit/

A language code such as en doesn't restrict the page to one country. Add a region only when the page is intended for that regional audience: en-GB means English for the UK, while en-US means English for the US. Use GB, not UK; a country code alone isn't a language annotation. Check Google's supported codes for language, region and script requirements.

Build a separate group for your contact page, another for your pricing page, and so on. Don't connect every German URL to the English homepage. An alternate should help someone continue the same task in another language, not restart their journey.

If only two versions of an article exist, that article's group has two versions. Leave a missing translation out until it is published. Don't invent a destination or use an unrelated page just to fill the same number of columns in every group.

A Complete HTML Example

For this small static-site example, use HTML annotations in the document's <head>. Include fully qualified URLs, the page itself and its equivalents. Each version needs the corresponding return links. Google also accepts HTTP headers and XML sitemap annotations; choose one manageable method instead of maintaining three copies. See its implementation reference.

This is the relevant head markup for the English service page. Keep the rest of your normal head content, including its title and description.

HTML: English page
<link rel="canonical" href="https://example.com/en/seo-audit/">
<link rel="alternate" hreflang="en" href="https://example.com/en/seo-audit/">
<link rel="alternate" hreflang="de" href="https://example.com/de/seo-audit/">
<link rel="alternate" hreflang="sr" href="https://example.com/sr/seo-audit/">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/seo-audit/">

On the German page, the alternate set stays the same. The canonical changes to the German page:

HTML: German page
<link rel="canonical" href="https://example.com/de/seo-audit/">
<link rel="alternate" hreflang="en" href="https://example.com/en/seo-audit/">
<link rel="alternate" hreflang="de" href="https://example.com/de/seo-audit/">
<link rel="alternate" hreflang="sr" href="https://example.com/sr/seo-audit/">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/seo-audit/">

On the Serbian page, use its own canonical and the same alternate set:

HTML: Serbian page
<link rel="canonical" href="https://example.com/sr/seo-audit/">
<link rel="alternate" hreflang="en" href="https://example.com/en/seo-audit/">
<link rel="alternate" hreflang="de" href="https://example.com/de/seo-audit/">
<link rel="alternate" hreflang="sr" href="https://example.com/sr/seo-audit/">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/seo-audit/">

Replace the example domain and paths with your real mapped URLs. Don't paste these tags onto a website that has no corresponding translations. If you use a CMS, look for an existing language mapping feature before adding another plugin or a second set of tags.

What Does X-Default Mean?

x-default identifies a fallback when none of the listed language or regional choices matches. It is optional. Google's x-default explanation describes using a language selector or another suitable default page.

In this example, English is the business's chosen fallback, so the English service URL appears twice with different labels: en and x-default. That is intentional. It doesn't mean English has become a canonical for the other translations.

It also doesn't implement a redirect. If you want people to choose a language, provide a visible switcher that works. Don't assume a search annotation will change the browser's page content or navigation.

A Practical Pre-Publish Checklist

Test one complete group before rolling the template out across the site. A syntax check on one page won't tell you whether the other destinations agree.

  1. Open every mapped URL. Confirm the expected content, language and audience. An HTTP 200 response containing an error message isn't a successful translation.
  2. Check access and indexing intent. These should be public pages intended for search, not login screens, staging pages or accidentally excluded URLs. Use our technical SEO guide for those foundations.
  3. Inspect the delivered markup. For this HTML method, check that the annotations are in the head, not displayed as text in the page body. Check for duplicate output from a theme and plugin.
  4. Compare the sets. In our example, all three pages should show the same four language-to-URL pairs. Each should show its own preferred canonical. Check exact hosts, paths and trailing slashes.
  5. Follow the return relationship. If English identifies German, confirm that German identifies English. Google's explanation of missing return links describes why one-way annotations can fail; that historical post's reporting interface is not a current UI walkthrough.
  6. Try the language switcher. Can a visitor choose an alternative and remain on the equivalent service or article? Google advises against forced language redirects in its multilingual guidance.

Keep a compact test record: content group, expected URL pairs, actual canonical, status, missing return links and who owns the fix. For larger sites, have a crawler or script compare the complete mapping. A green check on a single URL doesn't establish that every group is correct.

Keep the Mapping Correct After Launch

Most avoidable problems start when the content changes but the mapping doesn't. Treat translations as related records, not strings scattered across templates.

  • A translation moves: update the group's stored destination and regenerate every member's annotations. Review the redirect separately; don't rely on an old URL remaining a useful destination indefinitely.
  • A translation is removed: remove its entry from the surviving members. Decide what its old URL should do based on whether a genuinely suitable replacement exists.
  • A new language launches: add it to the relevant groups only after the corresponding pages are ready. Test from old pages as well as new ones.
  • A template changes: sample a fully translated group, a partially translated group and a page with no alternatives. The last one is useful for catching accidental site-wide tags.

After deployment, inspect representative URLs and their canonical information in Search Console. Language and country performance can provide context, but a country-filtered traffic chart isn't a hreflang validator: people in one country don't all use the same language. Use our Search Console data guide to avoid reading too much into those averages.

If the wrong version continues to appear, inspect the content, URL access, canonical choice and mapping together. Adding more annotations without understanding the conflict can make maintenance harder.

Planning or Troubleshooting a Multilingual Site?

I offer a free initial review of a small selection of public pages, with up to five priority findings or next steps by email. It's not a comprehensive audit. Search Console analysis, a multilingual crawl or implementation would need a separate agreed scope and any necessary access.

Request a free website review

Frequently Asked Questions

Not simply because it receives international visitors. First identify whether equivalent language or regional versions actually exist. If you publish just one version, there are no alternate pages to connect.
In an HTML implementation, it is an attribute on a link element with rel="alternate", not a meta element. The example in this guide belongs in the document head.
Not in the translated-page example here. Each language page uses its own preferred canonical. Same-language regional duplicates require a separate assessment of which version should be preferred.
No. It identifies a fallback for search engines; it does not change browser navigation. Build a visible language selector or other appropriate navigation separately.
Leave missing alternatives out of that content group. Do not point to an unrelated page or invent a URL just to complete the set. Add a translation to the group when the corresponding page is ready.

Where to Go Next

Milan Georgijevic iviG
Milan Georgijevic
Technical SEO Consultant & Developer

I'm a developer who moved into technical SEO. I trace search problems through crawling, rendering, indexing, templates, content and performance, then implement the fixes instead of handing over a generic export. Request a free website review and I'll review your site personally.

All SEO Guides