<b>When hreflang and canonical fight, hreflang loses</b>
A conflict pattern worth understanding precisely, because it silently deletes pages from international results.
The scenario: /fr/ and /fr-ca/ are near-identical. To manage duplicate content, someone sets a canonical on /fr-ca/ pointing to /fr/. Simultaneously, the hreflang cluster lists both as distinct alternates.
What happens: the canonical wins. By declaring /fr-ca/ a duplicate of /fr/, you've told Google /fr-ca/ should not be indexed as itself. Its hreflang annotation now points to a URL Google has been instructed to ignore. The Canadian-French targeting evaporates.
The rule that resolves it: every page in an hreflang cluster must be self-canonical. Canonical and hreflang must agree. Cross-canonicalizing between language or region variants is almost always a mistake — they are not duplicates in Google's international model; they are alternates.
The legitimate exception: if /fr/ and /fr-ca/ truly are identical with nothing region-specific, the correct fix is to delete /fr-ca/ entirely and let <code>fr</code> serve both, not to keep two URLs glued by a canonical.
Diagnostic: for each cluster member, confirm <code>rel=canonical</code> is self-referential. Any cross-pointing canonical inside an hreflang set is the bug.
Caveat we flag: parameter-based duplicates (sort, session) should still canonicalize to the clean URL — that's orthogonal to the language cluster and not what this warning is about.
Hreflang Lab
@HreflangLab
<b>When hreflang and canonical fight, hreflang loses</b>
Этот пост опубликован в Telegram-канале Hreflang Lab. Подписаться можно по ссылке: @HreflangLab.