International SEO and hreflang: a practical guide

A practical guide to hreflang: what it actually does, why return tags are the number one failure, and how to choose between ccTLDs, subfolders and subdomains.

Key takeaways

  • Hreflang does not lift your rankings. It routes the user to the right language or region version of a page that already ranks, so the wrong-language page does not get served in its place.
  • Annotations must be bidirectional and self-referencing. If page A points to page B, page B must point back to page A, or Google may ignore the whole set.
  • Missing return tags are the classic failure. In the largest study of its kind, 67% of domains using hreflang had at least one issue.
  • ccTLD, subfolder and subdomain all work for geotargeting. The choice is a tradeoff between the strength of the country signal and the cost of running separate sites.
  • Hreflang is one signal among several. It has to agree with your canonical tags and your internal links, not fight them.

If you run one site for several countries or languages, hreflang is the mechanism that tells Google which version belongs to which audience. It is also one of the most misunderstood parts of technical SEO, partly because people expect it to do something it was never built to do. This guide covers when you actually need it, how it works, the single error that breaks most implementations, and how to pick a URL structure for a multi-regional site.

When you need hreflang

You need hreflang when you publish the same or similar content in more than one language or for more than one region, and you want Google to serve the right version to the right user. Google’s own guidance is direct about the purpose: use hreflang to tell Google about the variations of your content so it can understand that these pages are localized versions of the same content, as documented in its localized versions reference.

Three common cases call for it. A site translated into several languages, for example English, French and German versions of the same article. A single language served to several countries, such as separate English pages for the United States, the United Kingdom and Australia where pricing, currency or shipping differs. And a mix of the two. If you only have one version of a page for one audience, you do not need hreflang at all.

It is worth setting the expectation clearly before you build anything. Hreflang does not make a page rank better. Google’s John Mueller has said repeatedly that hreflang does not give a ranking boost, and that all it does is swap the URL that already ranks for the regionally appropriate one, a point covered by Search Engine Roundtable. If your German page does not rank in Germany, hreflang will not fix that. What it fixes is the wrong-language page showing up when the right one exists, which quietly costs you conversions and inflates bounce rates in the markets you care about.

How hreflang works

Hreflang is a set of annotations that connect the language and region variants of a page into a cluster. Each annotation names a URL and the audience it is for, using a two-letter language code, optionally followed by a two-letter country code, for example en, en-gb or fr-ca. Google reads the cluster and, when one of those pages would rank for a query, tries to substitute the best-matching version for the searcher.

There are three ways to declare these variants, and Google treats them as equivalent, so you pick whichever is most convenient for your setup: HTML link tags in the page head, HTTP headers (useful for non-HTML files like PDFs), or xhtml:link entries in an XML sitemap. Google’s localized versions documentation describes all three. On large sites the sitemap method is often the most maintainable, because you manage every relationship in one place rather than editing thousands of page headers.

Two rules matter regardless of method. First, every URL must be fully qualified, including the protocol, so https://example.com/fr/, never a relative path. Second, each version should list every version in the cluster, including itself. A simple three-market cluster expressed as HTML link tags looks like this:

<link rel="alternate" hreflang="en-us" href="https://example.com/us/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/" />
<link rel="alternate" hreflang="fr-fr" href="https://example.com/fr/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

The last line uses the reserved x-default value. It is not required, but Google recommends it as the fallback for users whose language or region does not match any of your versions, and it was designed for language-selector or global landing pages. In the study cited below, 56.3% of domains were missing it, so treat it as the easy win it is.

One nuance that trips people up: hreflang is only one of several signals Google uses to pick a canonical URL, and it has to agree with the others. If your canonical tag points at one URL while your hreflang points at another, you are sending mixed messages. Keep hreflang, canonicals and internal links pointing the same way. For the wider set of signals that decide whether pages get crawled and indexed at all, see our technical SEO guide.

The return-tag trap

If hreflang breaks, this is almost always why. The annotations have to be reciprocal. Google states the rule plainly: if page X links to page Y, page Y must link back to page X, and if that is not the case for all pages using the annotations, they may be ignored or interpreted incorrectly. This is the return tag, and it is the most common thing people get wrong.

The reason it is so common is structural. Adding the annotation to a new page is easy to remember. Going back to every other page in the cluster to add the return reference is easy to forget, especially when a team ships a new market or a new template without updating the existing ones. The result is a one-way link that Google discards, and because nothing visibly breaks on the page, the problem can sit undetected for months while the wrong versions keep getting served.

The scale of this is not anecdotal. Ahrefs ran what it called the largest hreflang study ever, looking at 374,756 domains that used hreflang, and found that 67% of them had at least one issue. Missing reciprocal (return) tags showed up on 15.3% of domains, and pages missing a self-referencing tag on 18%. Those two together are the return-tag family of errors, and they are entirely preventable with validation before you ship.

67%of domains using hreflang had at least one issue, in Ahrefs’ largest hreflang study of 374,756 domains

The practical defence is to treat the cluster as a single object, not a set of independent pages. When you add or remove a market, you regenerate the full set of annotations for every page in that cluster, then validate. Google Search Console historically surfaced these errors in an International Targeting report, and modern crawlers flag missing return tags directly. Check after every change to markets, templates or URLs, because that is exactly when a one-way reference sneaks in. Our Google Search Console guide covers where to look for indexing and coverage signals that often accompany a broken cluster.

ccTLD vs subfolder vs subdomain

Before hreflang ever enters the picture, you choose a URL structure. Google’s guidance on managing multi-regional and multilingual sites recommends three options for geotargeting: a country-code top-level domain (ccTLD), a subdomain on a generic domain, or a subdirectory (subfolder) on a generic domain. URL parameters like ?country=de are not recommended. All three can work; the differences are in the strength of the signal and the operational cost.

A ccTLD such as example.de sends the strongest signal to users and search engines that a site is intended for a specific country. By default Google uses most ccTLDs to geotarget the site automatically. The cost is that each ccTLD is effectively a separate site to run and to build authority for, and some countries restrict who can register their ccTLD, so you have to check eligibility first. Note also that Google treats some vanity ccTLDs, like .tv and .me, as generic rather than country-targeted.

Subfolders on a single generic domain, such as example.com/de/, keep everything under one domain, which is the easiest to maintain and lets all your content share the same domain-level authority. There is no automatic country signal from the URL, so you rely on hreflang and content to communicate targeting. Subdomains like de.example.com sit in between: they separate markets more cleanly than folders and can be hosted independently, but they are more work to set up and their sharing of authority with the root domain is less clear-cut. Here is how the three compare.

Structure Example Country signal Authority Effort to run
ccTLD example.de Strongest (automatic in Google) Separate per domain, built from scratch Highest; may have registration rules
Subdomain de.example.com Weak from URL; set via hreflang Partly shared with root, less clear Medium
Subfolder example.com/de/ Weak from URL; set via hreflang Shared across one domain Lowest

There is no universally correct answer. If a country is strategically critical, has strong local competitors, or benefits from the trust of a local domain, a ccTLD earns its keep. If you are expanding into many markets and want to move fast on shared authority, subfolders are usually the pragmatic default. Whichever you pick, if you end up with similar content in the same language on more than one URL, for example example.de/ and example.com/de/, pick a preferred version and make your canonical and hreflang agree, exactly as Google advises. The structure decision and the hreflang decision are not separate projects; they have to be designed together.

Frequently asked questions

Does hreflang improve my rankings?

No. Hreflang does not promote or demote pages. It swaps the URL that already ranks for the version best matched to the user’s language and region. If a market’s page is not ranking, that is a content and authority problem, not something hreflang can solve.

What happens if my return tags are missing?

Google may ignore the annotations that are not reciprocated, and in some cases the whole cluster. In practice that means users can be served the wrong language or country version. Because the page still loads normally, the error is easy to miss without validation, which is why it is the most common hreflang mistake.

Do I need an x-default tag?

It is not required, but Google recommends it as the fallback for users who do not match any of your specific versions, and it works best on language-selector or global landing pages. Given how many sites omit it, adding one is a low-effort improvement.

Should I use ccTLDs or subfolders?

Use ccTLDs when a country is strategically important and you can invest in a separate domain and its authority. Use subfolders when you want to expand into many markets quickly on shared domain authority and lower maintenance. Both are supported by Google; the difference is the strength of the country signal versus the operational cost.

Written by Matthis Duarte, a senior SEO and organic growth expert with 10+ years of experience driving organic growth for international brands across highly competitive verticals. He is the founder of Knownful, an independent publication on SEO and organic growth featuring in-depth guides, best practices, playbooks and original analyses, including a free monthly study of which brands AI actually recommends across 10 industries.

Receive the AI Search Index in your inbox every month.

100% free. No spam ever.
Add a comment Add a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post

Technical SEO: the complete guide

Next Post

E-E-A-T explained: what it is and how to actually show it