sfw/fix
Canonical → 3xx medium

Canonical Points to a Redirecting URL

The rel=canonical names a URL that itself redirects, giving Google a conflicting signal it may ignore in favor of its own pick.

What you see

<link rel="canonical" href="https://example.com/page" />
The canonical URL returns 301 → https://example.com/final
Google: "Alternate page with proper canonical tag" / canonical mismatch

What’s actually happening

Your page says canonical = URL B, but URL B 301s (or 302s) to URL C. Google sees a canonical that points at a non-200 response and treats the hint as unreliable — in Search Console you'll see "Duplicate, Google chose different canonical than user" or the page indexed under a URL you didn't intend. Link equity gets muddy and near-duplicate URLs can both linger in the index.

Common causes

  • A site-wide HTTPS or www migration moved the real page to C, but the canonical tag still hard-codes the old B that now redirects.
  • A trailing-slash change (page→page/) where the canonical points to the pre-slash version that 301s to the slashed one.
  • A CMS generating canonicals from a stored 'permalink' field that's out of date with the current routing.
  • Canonical built from a base URL constant (http:// or apex) that a server rule then redirects to the real host.
  • Pagination or parameter handling pointing canonical at a 'view all' URL that itself redirects.

How to fix it

  1. Find the redirecting canonicalsCrawl with Screaming Frog (or a script) and report pages where the canonical target's status is 3xx, not 200. Sort by the canonical's response code. These are the ones sending Google a broken signal.
  2. Point canonical at the final 200 URLUpdate rel=canonical to the URL that returns 200 directly — C, not B. The canonical should always be self-referencing or point at a live page, never at a redirect hop. Fix it at the source (the CMS field or the template that builds the tag).
  3. Align canonical with your host/scheme rulesIf a server rule forces HTTPS+www, make the canonical emit HTTPS+www too. The tag and the redirect layer must agree on the same final URL, or every page will canonical to something that redirects.
  4. Recheck with URL InspectionIn Search Console, inspect an affected URL and compare 'User-declared canonical' vs 'Google-selected canonical.' After the fix they should match and point at a 200. If Google still disagrees, the canonical target may still be redirecting somewhere.
  5. Don't chain it againWatch out for the next migration re-breaking this. A canonical to B that redirects to C that redirects to D is worse — Google may drop the hint entirely. Keep canonicals pointing one hop to a 200, ideally zero hops.

Stop it recurring

Always point rel=canonical at a URL that returns 200 directly — never at one that 301/302s, and update it during any host or slug migration.

Related errors