A canonical URL tells Google “of all the URLs that show this content, this one is the original.” Set it right and duplicate content stops eating your rankings. Set it wrong and Google quietly drops half your pages from the index.
TL;DR
- Put a self-referencing canonical on every page. As of June 2026 Google treats this as the expected baseline, not a nice-to-have.
- For real duplicates (parameter URLs, syndicated copies), point the duplicate at the master URL.
- Canonical is a strong hint, not a command. Google can and does overrule it when your other signals disagree.
- Never canonical across languages (use
hreflang) or to your homepage (deindexes the site). Pair host canonicalization with a301, because canonical alone does not redirect anyone.
What the tag actually does
The <link rel="canonical" href="..."> tag was introduced to fix the URL-duplication mess of the web: the same page reachable at www and bare domain, with and without a trailing slash, with tracking parameters, paginated, or as language variants. Canonical points all of those at one preferred URL so Google consolidates ranking signals (links, content quality) onto a single page instead of splitting them across near-identical copies.
Crucially, it is one signal among several. Google’s own documentation ranks the inputs it uses to pick a canonical:
| Signal | Strength (Google) | What it means |
|---|---|---|
301/308 redirect | Strong | The redirect target should become canonical |
rel="canonical" link | Strong | The declared URL should become canonical |
| Internal links | Medium | The URL most pages link to looks canonical |
| Sitemap inclusion | Weak | Listed URLs get a small nudge toward canonical |
These stack. A page that 301s to the master, declares it as canonical, and lists only the master in the sitemap gives Google a clean, unanimous answer. Conflicting signals are exactly how you end up with “Google chose a different canonical than user.”
How to tell you have a canonical problem
- Your Pages report shows “Duplicate without user-selected canonical” or “Google chose different canonical than user”.
site:yourdomain.comreturns bothwww.and bare-domain versions of the same article.- Tracking-parameter URLs (
?utm_source=...) are getting indexed instead of the clean URL. - You ship the same content in English and Chinese and Google is confused about which version to rank.
Step by step
- Audit your current canonical. View source on 5-10 pages and search for
rel="canonical". Confirm every page has exactly one, pointing at the public, https, no-tracking-parameter version of itself. Two canonical tags on one page is as bad as zero: Google may ignore both. - Pick one host:
https://yoursite.comorhttps://www.yoursite.com. The other should301redirect to it. Canonical alone is not enough; without the redirect, the other host still resolves and still competes. - For paginated lists (
/blog/page/2), canonical each page to itself, not to page 1. Pointing all pages to page 1 tells Google the deeper pages are duplicates, so anything that only appears past page 1 stops getting indexed. Note that Google has not usedrel="prev"/rel="next"as indexing signals since 2019, so self-referencing canonical is now the whole pagination strategy. - For URLs with tracking parameters, the canonical should drop the parameters: a request to
?utm_source=twittershould still emit<link rel="canonical" href="https://yoursite.com/articles/slug/">. - For multilingual sites, do NOT canonical zh to en or vice versa. Each language version has its own self-referencing canonical, and they reference each other via
hreflang. Canonical andhreflangsolve different problems: canonical picks the master among duplicates,hreflangsays “these are the same page in other languages.” - After deploy, use Search Console URL Inspection on 3-4 sample URLs and check “Google-selected canonical” matches your declared one. If it does not, your hint is being overruled. Fix the conflicting signal before touching anything else.
When Google overrules your canonical
The Pages report status “Duplicate, Google chose different canonical than user” means your declared canonical lost to a stronger or more consistent signal. Per Google’s troubleshooting docs, the usual culprits, in order of how often they bite:
- Internal links disagree. Most of your pages link to URL A, but A’s canonical points at B. Internal links are a medium-strength signal and they outvote a lonely tag. Make your links point where your canonical points.
- Sitemap lists a different URL than the canonical declares.
- The declared canonical redirects or 404s, so Google can’t honor it and falls back to its own pick.
- A higher-authority duplicate exists (a scraper or syndication partner with more links). That is a links problem, not a tag problem.
Realign every signal so they all name the same URL, then request indexing and wait for a recrawl. Canonical changes are not instant; budget days to weeks.
Common pitfalls
- Canonical-ing every page to the homepage (a real anti-pattern from broken CMS plugins and bad theme defaults). This tells Google every page is a copy of the homepage and deindexes your entire site.
- Canonical-ing zh pages to the en version. Google drops the Chinese pages from the Chinese index and you lose half your traffic.
- Setting canonical to a URL that returns
404or301. Google ignores it and picks its own canonical, usually the wrong one. - Using the absolute URL on the staging domain (
staging.yoursite.com) and forgetting to flip it for production. Now your live pages canonical to a private staging server Google can’t even crawl. - Mixing http/https or www/non-www between canonical and the actual URL. They must match exactly, byte for byte; Google prefers the https variant but will not silently fix a mismatch for you.
- Pointing canonical at a URL fragment (
#section). Google ignores fragments outright, so it’s the same as having no canonical.
Who this is for
Site owners who already have duplicate-content reports in Search Console, or who run any combination of pagination, tracking links, and multiple subdomains.
When to skip this
Brand-new 5-page sites with no parameters, no pagination, and one language. A self-referencing canonical is enough — you can come back to this when you scale.
FAQ
- What is a self-referencing canonical?: A canonical that points the page at its own clean URL. Every page should have one — it tells Google “this URL is the canonical version of this content.” It is the safest default and prevents Google from picking a weird canonical on its own.
- What if Google picks a different canonical than I declared?: It usually means your declared canonical conflicts with other signals — internal links pointing at a different URL, sitemap listing a different URL, or
hreflangreferencing a different URL. Make all signals agree and Google will respect your hint. - Can I canonical across domains?: Technically yes, and it’s the right tool when you syndicate content and want your original to keep the ranking. In every other case use a
301redirect instead; it is the stronger signal and it actually moves users to the right place. - Should I canonical or
noindexduplicate pages?: Usecanonicalif both URLs serve real users (e.g. a category page and a search-result page show the same product). Usenoindexif one URL is purely internal (cart, admin, filtered views nobody should land on from search). They are not interchangeable, and Google explicitly advises against usingnoindexto pick a canonical within one site. - How long until a canonical change takes effect?: Google has to recrawl both URLs and re-evaluate the signals, so expect days to a few weeks. Use URL Inspection to confirm; do not keep changing the tag while you wait.
Google’s official references are worth bookmarking: How to specify a canonical with rel=“canonical” and the canonicalization troubleshooting guide.
Related
- Search Console canonical explained
- Title tags and meta descriptions that don’t suck
- hreflang for bilingual sites
- Reading the Pages report
- AI Check Your Hreflang Setup (Bilingual / Multi-Locale)
- How to Generate a Technical SEO Checklist with AI (Tailored to Your Stack)
- Noindex vs Nofollow vs Disallow: When to Use Each