- Canonical and hreflang both control which URL Google indexes and shows. Combined, they easily send conflicting signals.
- The basic rule is that a URL with a canonical pointing to another URL gets no hreflang. hreflang belongs on URLs with a self-referencing canonical or no canonical.
- Do not set a canonical between language and country versions. Separate mobile URLs are the one exception.
If you introduce hreflang, your website often already has canonical tags. Then the interplay matters. If a URL asks at the same time not to be indexed and to be shown as a language version, Google has to decide for itself. This guide shows how the two fit together.
What does a URL tell Google?
A family picture helps. Duplicates in the same language are twins, versions in other languages or countries are cousins. A canonical chooses between twins, hreflang introduces the cousins.
| Tags on the URL | What the URL says | Result |
|---|---|---|
| Canonical to another URL | “Don't index me, take my twin.” | Clear |
| Canonical to itself | “Index me, not my twins.” | Clear |
| hreflang | “Index me, and here are my cousins in other countries. Please index them too.” | Clear |
| Self-referencing canonical and hreflang | “I am the twin that should be indexed. Here are my cousins.” | Clear |
| Canonical to another URL and hreflang | “Don't index me, take my twin, and please index me as the German version.” | Conflict |
With conflicting signals, Google decides for itself which URL goes into the index. Clear signals avoid this situation.
The rule in practice
- Every language or country version gets a canonical pointing to itself.
- Only these canonical URLs carry hreflang. Each lists itself and all other versions.
- Duplicates within one language, such as parameter or color variants, point to their main version by canonical and get no hreflang.
- hreflang only points to canonical URLs with status 200. Redirecting URLs or URLs blocked by robots.txt do not belong in it.
- No canonical from one language or country version to another if both should appear in search.
What it looks like when it is right
The German page references itself and the English version. The color variant only points to the main page by canonical.
How the conflict arises
The English page points to the German one by canonical and at the same time declares itself the English version by hreflang.
Google states that with hreflang, the canonical should point to a page in the same language. If there is none, use the best possible substitute language. Canonical basics are in the guide Canonical tags, codes and x-default in the guide hreflang.
Same language, several countries
Pages for Germany, Austria and Switzerland are often almost identical. Google may treat them as duplicates and choose one of them as canonical. According to Google's documentation, search still shows the matching regional URL via hreflang. A self-referencing canonical per version therefore remains correct. A canonical from de-AT to de-DE, on the other hand, deliberately takes the Austrian version out of the index, and the hreflang on it contradicts this.
If you need one version for several countries, you can also give a URL several hreflang values. How that works is explained in the guide Multiple hreflang values on one URL.
Exception: separate mobile URLs
Websites with their own mobile URLs, for example on m.example.com, follow a rule of their own. The mobile URL points to the desktop URL by canonical, and the desktop URL is always the canonical one. You still set hreflang on both. Mobile URLs reference mobile URLs by hreflang, desktop URLs reference desktop URLs. That is what Google's documentation on mobile-first indexing says today. On new websites, this case is rare.
What has changed since?
The core rule is now part of Google's own documentation. The canonical belongs in the same language, and Google prefers URLs that are part of an hreflang cluster. Google has retired the International Targeting report in Search Console but continues to support hreflang. Today you check for errors with URL Inspection and a crawl.
How to check your website
A crawl reads the canonical and all hreflang tags for every URL. From this you filter three lists.
| Check | Symptom |
|---|---|
| URLs with hreflang whose canonical points to another URL | Conflicting signals |
| hreflang targets that are not canonical, redirect or do not respond with 200 | Google ignores the tag |
| Missing return links between two versions | Google ignores the tags on both pages |
If a script only sets canonical or hreflang in the browser, compare the raw source with the rendered HTML. How hreflang works via Google Tag Manager is shown in the guide hreflang with Google Tag Manager.
Common mistakes
- All country versions point to the main version by canonical, yet hreflang is still set.
- Parameter or filter URLs carry hreflang even though they canonicalize to another URL.
- hreflang points to the non-canonical variant of a page, such as the one without a slash.
- A redirecting homepage carries hreflang. x-default is meant for selector or redirect pages.
- A single-language website gets hreflang without a second version.
FAQ
Can I use hreflang and canonical together?
Yes, on the same URL, as long as the canonical points to the URL itself. If it points to another URL, leave hreflang off that page.
Should the canonical of a language version point to the main language?
No, if both versions should appear in search. Every version gets its own canonical. hreflang creates the connection.
Do I need a self-referencing canonical if I use hreflang?
It is not mandatory. It does help to consolidate duplicates such as parameter URLs clearly on the right version.
What happens if canonical and hreflang contradict each other?
Then Google decides for itself which URL is canonical and goes into the index.
How do I handle product variants in several languages?
Variants point to the main variant of their language by canonical. Only the main variants get hreflang and reference each other.
Sources
Retrieved on October 15, 2026. If something is out of date or missing, let us know.
- Google, How to specify a canonical URL: https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls · As of Jul 10, 2026
- Google, What is canonicalization?: https://developers.google.com/search/docs/crawling-indexing/canonicalization · As of Aug 20, 2026
- Google, Localized versions of your pages: https://developers.google.com/search/docs/specialty/international/localized-versions · As of Sep 21, 2026
- Google, Mobile-first indexing best practices: https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing · As of Dec 10, 2025
- Search Console Help, The International Targeting report has been retired: https://support.google.com/webmasters/answer/12474899