We respect your privacy.

We use strictly necessary cookies to keep you signed in and to protect against CSRF. With your permission we also use a small amount of first-party analytics to improve the product. We do not sell your data and we do not use third-party advertising trackers. See our cookie policy and privacy policy .

← All learn topics

Rule site.hreflang.canonical-conflict

hreflang and canonical disagree

site.hreflang.canonical-conflict is a check in Crawlmind's site audit that grades high-impact issues of this kind. This page explains why the rule matters and the exact fix.

Impact: highEffort: mediumFixable: 1-click

Why it matters

The page declares `<link rel="alternate" hreflang="en-us" href="/en-us/page">` but its `<link rel="canonical">` points elsewhere (a non-localised version, or a different language). Google explicitly documents this as undefined behaviour: the canonical wins for indexing but the hreflang cluster is dropped, so neither the canonical hint nor the locale targeting works as expected.

The fix

The contract: every URL in an hreflang set should be its own canonical.

```html
<!-- /en-us/page (the US English variant) -->
<link rel="canonical" href="https://example.com/en-us/page">
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/page">
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">

<!-- /en-gb/page (the UK English variant) -->
<link rel="canonical" href="https://example.com/en-gb/page">
<link rel="alternate" hreflang="en-us" href="https://example.com/en-us/page">
<link rel="alternate" hreflang="en-gb" href="https://example.com/en-gb/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
```

Each variant points to ITSELF as canonical and lists every sibling (including itself) in the hreflang set. The `x-default` is the fallback when no locale matches.

If you genuinely want one variant to be the canonical for all locales, do not use hreflang: use a single canonical URL and let the engine pick a language version itself.

References