Canonicalized URL Has Incoming Hreflang: How to Fix It
- July 20, 2025
- Hreflang, Canonical Conflicts

What this check flags
SEO ProCheck raised this because a URL on your site is receiving hreflang annotations from other pages, yet that same URL points its rel="canonical" at a different address. Google reads the canonical first and consolidates the page away, so every hreflang pointing at it lands on a target that has already opted out of the index — the language cluster never forms and your localized versions stop being served to the audiences they were built for.
Why the two signals cancel out
An hreflang set is a mutual pact: each member says "here are my alternates," and each alternate confirms the relationship with a return tag. That pact only holds if every member is a self-referencing canonical — an independently indexable URL. The instant one member canonicalizes elsewhere, it is declaring itself a duplicate. Google honours the canonical, folds the page into its target, and discards the hreflang edges attached to the discarded URL. Your German page can keep shouting "the English version lives here," but if that English URL canonicalizes to a print variant or a tracking-parameter twin, Googlebot never registers the German-to-English link. The cluster silently drops a node.
A real failing example
Here the UK page is listed as an hreflang alternate, but the UK URL itself canonicalizes to the US page. The annotation is aimed at a URL Google will consolidate away:
<!-- On https://example.com/en-us/pricing/ -->
<link rel="canonical" href="https://example.com/en-us/pricing/" />
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/pricing/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/pricing/" />
<!-- On https://example.com/en-gb/pricing/ (the flagged target) -->
<link rel="canonical" href="https://example.com/en-us/pricing/" /> <!-- points AWAY -->
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/pricing/" />The en-gb page canonicalizes to en-us, so Google treats the two as one page and ignores the en-gb hreflang entirely. The fix is to make each localized URL canonical to itself:
<!-- Corrected: https://example.com/en-gb/pricing/ -->
<link rel="canonical" href="https://example.com/en-gb/pricing/" /> <!-- self-referencing -->
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/pricing/" />
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/pricing/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en-us/pricing/" />Which signal wins, and what it costs
| Scenario on the hreflang target | What Google does with the canonical | What happens to the hreflang edge |
|---|---|---|
| Self-referencing canonical | Keeps the URL indexable | Edge is honoured; cluster forms |
| Canonical points to another language version | Consolidates into that version | Edge dropped; return tag can't resolve |
| Canonical points to a parameter or print duplicate | Consolidates into the clean URL | Edge dropped; wrong URL may surface in SERPs |
| No canonical at all | Google guesses a canonical | Edge honoured only if Google's guess matches the annotated URL |
How to detect it
- Screaming Frog — Hreflang tab. Crawl the site, open the Hreflang tab, and filter for Non-Canonical Confirmation Links and Non-200 Hreflang URLs. Cross-reference with the Canonicals tab filtered to Canonicalised so you can see which annotated URLs point their canonical elsewhere.
- Google Search Console. Inspect the target URL with the URL Inspection tool; if the User-declared canonical and Google-selected canonical differ from the annotated address, the hreflang edge is being discarded. The legacy International Targeting report also lists "no return tags" errors that trace back to this.
- An hreflang validator. Run the set through a validator such as the site's own Hreflang Validator; it will flag any alternate whose canonical resolves to a different URL than the one declared.
- Log or curl spot-check.
curl -sIeach annotated URL and read theLink: rel="canonical"header (or view source) to confirm every alternate is canonical to itself.
How to fix it
- List every URL that appears as an hreflang alternate anywhere on the site.
- For each, confirm its
rel="canonical"points to itself. Where it points elsewhere, either correct the canonical or remove that URL from the hreflang set and annotate the real canonical instead. - If two URLs are genuinely duplicates, pick one as the language version, canonicalize the other to it, and drop the loser from every hreflang list. Never annotate a URL you intend to consolidate.
- Rebuild the return tags so every remaining member references every other member, then re-crawl to confirm zero canonicalized targets remain.
Because canonical and hreflang have to agree, it is worth confirming the canonical layer is clean first — our reference on canonical tags covers self-referencing setups, and the broader hreflang implementation guide shows how the two signals are meant to interlock. Pick a single delivery method (head tags, HTTP headers, or an XML sitemap) and never split the same set across two of them.
FAQ
Can I keep the hreflang if I just remove the wrong canonical?
Only if the URL should be indexed on its own. Removing the canonical lets Google pick one, and if it picks the annotated URL the edge resolves. The safer move is an explicit self-referencing canonical so nothing is left to guessing.
Does this hurt the canonical target too?
Indirectly. The consolidated page keeps ranking, but the market the localized version was meant to serve now gets the wrong-language result, which drags click-through and can raise bounce for that audience.
What if the canonical points to an equivalent page in another language?
That is still wrong. Language variants are not duplicates — each must self-canonicalize. Cross-language canonicals collapse your entire international footprint into one page.
Will Google report this as an error?
Not loudly. There is no penalty and no red flag beyond "no return tags" in the legacy report. The targeting just quietly stops working, which is why crawler-based detection matters.
Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.
About SEO ProCheck
Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.
Work With Me
Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.







