Blog/Multilingual SEO

Hreflang Canonical Rules: How the Two Tags Work Together

AP
Allan Perrottet
8 min read · Updated October 9, 2026 · Written with the Content Engine
Cyan and purple circuit lines converging on two bright nodes

Hreflang and canonical tags do different jobs, and the hreflang canonical setup only works if every translated page canonicalizes to itself. The canonical tag says "this URL is the preferred version of this content." Hreflang says "these URLs are the same content in other languages." So the German page's canonical should point at the German page, and its hreflang block should list the English, French and German versions, including itself.

The mistake that breaks most multilingual sites is the cross-language canonical: every translation points its canonical at the English original. That tells Google the German page is a duplicate of the English one, so Google may index only the English URL and the German page drops out of German results. Getting the hreflang canonical relationship right is often the single fix that makes a "translated but invisible" second market start appearing.

What does each tag tell Google?

Canonical picks one URL from a set of duplicates; hreflang links URLs that are not duplicates.

rel="canonical" rel="alternate" hreflang
Question it answers Which URL is the preferred version of this content? Which URL should users of each language or region see?
Relationship between URLs Duplicates or near-duplicates Equivalent content, localized
On a translated page, should point to The page itself Every language version, including itself
Strength A strong signal for canonicalization A signal for which version to show; ignored if not reciprocal
What goes wrong Points to another language and the page is folded away Points to non-canonical URLs and the cluster is ignored

Google's canonical documentation puts the rule plainly: "If you're using hreflang elements, make sure to specify a canonical page in the same language, or the best possible substitute language if a canonical page doesn't exist for the same language."

Google's localized versions guide adds the other half: "Localized versions of a page are only considered duplicates if the main content of the page remains untranslated." A properly translated page is not a duplicate, so it has no reason to canonicalize anywhere else.

The cross-language canonical mistake

Pointing a translation's canonical at another language asks Google to drop the translation.

Here is what the broken setup looks like on https://example.com/de/preise:

<link rel="canonical" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />

The two signals contradict each other. Hreflang says the German page is the version for German speakers. The canonical says the German page is a duplicate of the English page and shouldn't be indexed in its own right. Canonicalization is about which URL gets indexed, and a non-indexed URL can't be served to anyone, so the German page usually loses.

The fixed version changes one line:

<link rel="canonical" href="https://example.com/de/preise" />
<link rel="alternate" hreflang="en" href="https://example.com/en/pricing" />
<link rel="alternate" hreflang="de" href="https://example.com/de/preise" />

This mistake usually comes from a theme or plugin that sets the canonical to the "original" post, or from a translation workflow that copies the English page's head into the translated page. It is worth checking before you write another translated article. The hreflang tags guide covers the rest of the cluster rules.

Hreflang canonical rules to follow

Five rules cover almost every multilingual setup.

  1. Every translated page has a self-referencing canonical. Google also recommends a self-referential canonical on canonical pages generally.
  2. Every hreflang URL is a canonical URL. Don't list parameter versions, uppercase variants, http URLs or redirecting URLs in hreflang. Use the exact URL each page declares as its canonical.
  3. The self-referencing hreflang URL equals the canonical URL, character for character.
  4. Don't put hreflang on a canonical tag. Google ignores rel="canonical" annotations that carry hreflang, lang, media or type attributes. Keep them as separate <link> elements.
  5. Use one canonical method per page. Google advises against declaring one canonical in the sitemap and a different one in the HTML, or mixing the HTML element and HTTP header.

Google also notes that, for canonicalization purposes, it prefers URLs that are part of hreflang clusters. That is one more reason to make sure the URLs in your clusters are the ones you want indexed.

What about same-language regional pages?

Regional variants in one language are the one case where duplicates and hreflang overlap, and the fix is to make them genuinely different.

If you have en-US, en-GB and en-AU pages with the same text and only the currency changed, Google may treat them as near-duplicates and choose one canonical among them. Google's guidance on multi-regional and multilingual sites says that when you serve similar content on different URLs in the same language, you should pick a preferred version and use rel="canonical" together with hreflang so the correct regional URL reaches searchers.

The practical recommendation for a small business: don't create regional English variants unless each one has real differences that matter to the buyer, such as local prices, tax, shipping, delivery times, regulations or contact details. If the only difference is a currency symbol, publish one English page, add a currency switcher, and spend the effort on a real second language instead.

When you do keep regional variants, each one still self-canonicalizes, and all of them sit in one hreflang cluster with a generic en or x-default fallback.

Common hreflang canonical mistakes

Most problems are contradictions between two tags that were set by different systems.

  • Cross-language canonicals. Translations pointing at the English original. Fix first; it has the largest impact.
  • Canonical to the home page or a category. Some themes set every page's canonical to the root. Every translated article then claims to be a duplicate of the home page.
  • Hreflang listing non-canonical URLs. The hreflang block uses /de/preise/ with a trailing slash, the canonical uses /de/preise. Crawlers flag these as non-canonical return links.
  • Noindex on translations. A translated page set to noindex "until it's reviewed," left that way for months, while its siblings still reference it.
  • Canonical in a JavaScript-injected tag that differs from the HTML. Google recommends setting the canonical in the HTML source and not changing it with JavaScript.
  • Moving URLs without updating either tag. During a site migration, redirects get set up but hreflang and canonicals still point at old URLs.

How do you check hreflang and canonical tags?

Compare what you declared with what Google chose, one page at a time and then site-wide.

In Search Console, the URL Inspection tool shows the user-declared canonical and the Google-selected canonical for any URL. If the German page shows the English URL as Google-selected, you have either a cross-language canonical or content Google considers untranslated. Check the indexed version, then test the live URL after you fix it.

For the whole site, crawl with a tool that reports hreflang and canonicals side by side and look for translated pages whose canonical points to a different URL, and hreflang return links pointing at non-canonical URLs. Fix the template, not each page. A broader international SEO strategy review is worth doing at the same time if a whole market is missing.

Frequently Asked Questions

Should a translated page canonicalize to the original language?

No. A translated page should have a self-referencing canonical. Google says localized pages are only duplicates if the main content is untranslated, and recommends specifying a canonical in the same language. Pointing a German page's canonical at the English page tells Google to index the English URL instead, which usually removes the German page from German results.

Can I use hreflang and canonical tags on the same page?

Yes, and you should. Every page in a multilingual cluster carries a self-referencing canonical plus the full hreflang list, as separate <link> elements. Google ignores canonical annotations that include an hreflang attribute, so never combine them into one tag. The two tags must agree on the exact URL of the current page.

Should hreflang point to canonical URLs only?

Yes. Every URL in an hreflang annotation should be the canonical, indexable, 200-status version of that page. Listing parameter versions, redirecting URLs or URLs that canonicalize elsewhere creates conflicting signals, and crawlers report these as non-canonical return links. Use the exact string each page declares in its own canonical tag.

Why does Google pick the English page as canonical for a German page?

Usually because the German page's canonical points to the English URL, or because the main content isn't actually translated, only the navigation and template. Check the user-declared and Google-selected canonical in Search Console's URL Inspection tool. If the declared canonical is correct, check the page body is fully in German.

Do regional pages in the same language need different canonicals?

Each regional page should self-canonicalize if it is meant to rank in its own market. If the pages are nearly identical, Google may still treat them as duplicates and choose one. Give each variant real local differences, such as prices, shipping and contact details, or consolidate them into one page with a single canonical.

The rule to remember

The hreflang canonical rule fits on one line: every translated page canonicalizes to itself, and every URL in hreflang is a canonical URL. Fix cross-language canonicals first, avoid regional duplicates you can't justify, and check the Google-selected canonical for one page per language after every template change.

Agent Solo's Growth plan publishes in two languages with self-referencing canonicals and hreflang generated together, so the two tags can't contradict each other, and Scale extends that to five languages. If your translated pages aren't being indexed, join early access.

Keep reading

Next for the solo operator