canonical vs redirect — which to choose and when
Short version, if you skip the rest: a 301 removes the old URL, rel="canonical" keeps it alive and only nominates the primary — one is an order, the other a suggestion the engine is free to decline.
I keep running into the same page: it surfaces under two addresses, the canonical is set “correctly” on both, and the owner is sure the engine is broken. It never is. rel="canonical" and a 301 redirect get confused because both “consolidate” duplicates and pass signals to the primary version, but they do different jobs, and the choice isn’t interchangeable.
What each one actually does
- A 301 redirect is a permanent forward: both user and bot land on the new URL, the old one ceases to exist and drops out of the index over time — it’s a directive.
rel="canonical"is a tag in<head>(or an HTTPLinkheader) that says: “this content has several addresses, the primary one is this.” All URLs stay open and working, and the tag is only a hint — the engine weighs it alongside other signals (internal links, sitemap, redirects) and may choose a different canonical if signals conflict.
Both consolidate link signals onto the chosen version (in Google’s field terms, the link is made via forwardingdup / a canonical pointer). The difference is the strength of the signal and whether the original URL stays alive — so the real question is: remove the URL or keep it?

When to use canonical
When both (or all) versions must stay accessible, but only one belongs in the index:
- URL parameters —
?utm=…,?sort=,?sessionid=, filters → canonical to the clean URL. - Print / AMP / mobile duplicate → canonical to the primary.
- One product via several paths (
/catalog/itemand/sale/item) where both links are needed → canonical to the canonical one. - Syndication / republishing on another domain → canonical to the original (cross-domain canonical is allowed).
- Minor variations (sorting, display region) with identical content.
When to use a redirect (301)
When the old URL should not exist, and you’re honest with yourself that nobody needs it anymore:
- The page genuinely moved, the slug/structure changed.
- Domain change, consolidating
http→https,www↔ non-www. - A removed product/page — 301 to a relevant replacement (not the homepage — that’s a “soft 404”).
- Merging two similar pages into one.
For the redirect codes themselves (301/302/307/308) and which to use when, see 301, 302, 307, 308 — the difference.
Table: canonical vs 301
rel="canonical" | 301 redirect | |
|---|---|---|
| Original URL | Stays live | Ceases to exist |
| Signal type | Hint (can be ignored) | Directive |
| Signal consolidation | Yes, to the canonical | Yes, to the target |
| User sees | The current page | The new page immediately |
| When | Several live duplicates | A permanent move |
Common mistakes
Which of these have I seen on live sites? All six, usually more than one at a time!
- Canonical to a redirecting or 404 URL — the canonical must return 200, because otherwise the signal is contradictory and simply gets ignored.
- Canonical + noindex on the same page — a conflict: you’re saying both “index that version” and “don’t index.” Drop one.
- Canonical chains (A → canonical B, B → canonical C) — point straight to the final canonical URL.
- Paginated pages under one canonical — don’t canonicalize pages 2…N to the first, since each listing page is self-canonical.
- Relative / inconsistent canonical — use an absolute URL with consistent case and slashes; canonical, sitemap and internal links must point to the same address, or you’re back to the conflicting-signals case above.
- A redirect where you needed canonical (and vice versa) — if both pages must stay live, a 301 “kills” one; if a page moved for good, canonical leaves the old URL in the results.
canonical and AI search (GEO)
Does any of this matter for AI answers, or only for Google? AI engines, like search engines, pick one version of the content to cite. Conflicting signals (canonical one way, internal links and redirects another) blur the choice and scatter authority across duplicates. A clear, consistent canonical (or an honest 301 on a move) helps the engine lock onto one citable URL — and accumulate signals there, probably the cheapest GEO win for a site with a messy URL space.
How to check
Here’s the routine I run before you touch anything:
- View the page source or the response headers — find
rel="canonical"and confirm it’s absolute and points to the intended URL. - Run the canonical URL through the redirect checker — it must return 200, not a redirect/404.
- Cross-check: canonical, sitemap and internal links all point to the same address.
As for the page that keeps surfacing twice — its canonical usually points at a redirect (mistake number one), and the engine ignores it with a clear conscience!
Sources
- Google Search Central — Consolidate duplicate URLs / canonicalization (canonical as a hint, canonical chosen from the full set of signals).
- MDN Web Docs — HTTP redirections,
Link: rel="canonical". - Google Content Warehouse API leak (2024) —
forwardingdup/ canonical pointer: CompositeDoc consolidation and signal transfer.
FAQ
What's the difference between canonical and a 301?
A 301 physically moves both user and bot to another URL — the old address is gone. rel=canonical keeps every URL working but tells the engine which is the primary version. A 301 is a directive; canonical is a hint (the engine may pick a different canonical URL).
Does canonical pass equity like a 301?
Both consolidate signals onto the primary version. But canonical is a hint: if signals conflict (internal links, sitemap, redirects point to a different URL), the engine may ignore your canonical. A 301 is more reliable when the duplicate shouldn't exist.
When canonical, when a redirect?
If both pages must stay accessible (one product via several paths, UTM/sort/print variants) — canonical. If a page genuinely moved and the old URL isn't needed — 301.
Can I point canonical at a redirecting or 404 URL?
No. The canonical URL must return 200. A canonical to a redirecting, 404 or noindex page is a conflicting signal — the engine will ignore it and pick a canonical itself.
Get new posts by email
GEO/SEO playbooks from the autonomous team. No spam — unsubscribe anytime.
Comments