Docs

Issue guide · International

Page with hreflang has a canonical to another URL

SeverityMedium
CategoryInternational
ScopeWhole site
EffortSmall
Verified byRe-crawl after you mark the task done
Rule keyhreflang_canonical_conflict

Short answer

This page lists language versions with hreflang, but its own canonical points to a different URL. Google treats the page as a duplicate of the canonical target, drops it from the index and ignores its hreflang, so this language version cannot appear in search. Each language version must be canonical to itself; use canonical only between true duplicates of the same language.

Why it matters

hreflang tells Google "these pages are equivalent, in different languages"; canonical says "this page is a copy of that one". Together they contradict each other. The most common cause is a setting that points every translation's canonical at the original language, which quietly removes all other languages from Google. The effect is that searchers in those markets see the original language, or a competitor.

How Glimana detects it

Glimana reads the hreflang set of every page that returns 200 and checks the page's own canonical. The rule fires when a page with hreflang annotations has a canonical (in HTML or in the HTTP header) pointing to another URL. The evidence shows the canonical target. Targets of hreflang are checked separately under hreflang points to a noindex or canonicalised page.

How to fix it

  1. Find the affected pages in Glimana. Open Issues › Page with hreflang has a canonical to another URL. Every affected page is a row; open one to see the evidence Glimana recorded for it (the measured value, the offending element or the target URL). The same list sits on the task card under Tasks, and the page's own detail view under Pages shows its full signals.
  2. Apply the fix on your platform.

    If the page is a real translation: make its canonical point to itself (its own final URL), and keep it in the hreflang set.

    If the page is a duplicate in the same language (for example a tracking or print URL): keep the canonical and remove the page from the hreflang set, so only canonical URLs appear in the annotations.

    In WPML or Polylang, each translation should be its own post with its own URL. Check the SEO plugin on the translated post (Yoast: Advanced → Canonical URL; Rank Math: Advanced → Canonical URL): leave the field empty so the plugin outputs the post's own address. Remove any custom code that forces the original language's URL as canonical.

    Shopify Markets sets self-referencing canonicals for each market and language. A cross-language canonical usually comes from a theme edit or an app that writes its own <link rel="canonical">. Check theme.liquid for a hard-coded canonical and use {{ canonical_url }} instead.

    Render the canonical from the current page's own final URL (scheme, host and path of the language version being served). Never derive it from the default-language record. Add a test that fetches each language version and asserts canonical equals the request URL.

  3. Publish and clear caches. Save and publish, then make sure the crawler will see the new version: WordPress — clear the page cache in your cache plugin and purge the CDN; Shopify — theme and content changes go live on save, but purge any CDN in front of the store; custom code — deploy and purge the edge cache. Check in a private window or with curl -s https://your-domain/page | grep -i '<title\|canonical\|robots' that the live HTML has changed; Glimana reads what the server sends, not what your browser has cached.

  4. Verify in Glimana. Open the task under Tasks and click Mark as done. The affected pages are queued for a verification crawl within a few hours, and the task closes when every page with hreflang is canonical to itself. If the check still fails, the task returns to New with a note; when it passes, the task is listed under Resolved technical issues on Impact reports. To check sooner, use Re-crawl affected pages on the issue.

How the fix is verified

The next crawl re-reads the canonical of each page with hreflang; the task closes when none of them points elsewhere.

FAQ

Can a translation have a canonical to the original language to avoid duplicate content?

No. Translations are not duplicate content. Google expects each language version to be indexable and self-canonical, and connects them with hreflang.

Sources

Was this page helpful?

Last updated 2026-10-27 · Contact support