SEO

Canonical Tag

By Jake Luo · Published 2026年8月12日

A canonical tag is a link element in a page's head that names the preferred URL when several URLs serve near-identical content, so search engines consolidate ranking signals onto one address instead of splitting them across variants. It is a hint rather than an instruction: Google weighs it against your redirects, internal links and sitemap, and can still choose a different URL as the canonical one.

What it consolidates, and what it only suggests

Duplicate URLs are rarely something you set out to create. A store lists the same product under two categories, a tracking parameter turns one page into a hundred, a print view and a mobile view coexist, or the same content is reachable at both www and the bare domain over both http and https. Each variant can accumulate links and impressions separately, which is how a page ends up competing with itself for one query — the same self-inflicted split described in keyword cannibalization. A canonical tag names the version you want kept and asks that the others' signals be credited to it.

The part founders most often get wrong is the strength of the request. Google treats a declared canonical as one input among several and picks its own preferred URL from the whole picture:

  • Your declared canonical — the link element inside the head of the page.
  • Redirects — a 301 is a far stronger statement than a tag, because it removes the duplicate rather than annotating it.
  • Internal links — if every link on your site points at the variant you did not declare, the declaration is arguing with your own navigation, which is why internal linking is part of this decision and not separate from it.
  • The sitemap — a URL you list is a URL you are asking to have indexed.
  • The [hreflang](/glossary/hreflang) cluster — language variants that reference each other are read together, and a canonical contradicting the cluster tends to lose.

When those signals agree, the tag is almost always honoured. When they disagree, Google resolves the conflict itself and reports the URL it chose in Search Console — which is how a canonical that is technically present can still have no effect at all.

The failure modes worth checking first

Most broken canonicals fall into a handful of shapes. A canonical pointing at a URL that redirects somewhere else asks Google to consolidate onto an address that no longer serves the page. A canonical pointing at a noindexed page asks for signals to be gathered onto something you have also asked to be excluded. A template that hardcodes the homepage canonical onto every page — a genuinely common bug — tells Google your entire site is one document. And a canonical that is correct in your source but never reaches the head, because a script or a rendering layer moved it, is broken in the way that is hardest to notice, because every tool you would naturally reach for still shows it.

Search Console distinguishes two states that read similarly and mean opposite things. "Alternate page with proper canonical tag" means Google saw your declaration, agreed with it, and consolidated — the healthy end state for a duplicate, not an error to chase. "Duplicate without user-selected canonical" means Google found near-identical pages, could not use a canonical, and picked one for you. The second is the one to act on, and the first thing to test is not your tag's target but whether Googlebot receives the tag at all.

What we learned when Google stopped seeing ours

This part is from operating agentceres.com rather than from documentation. In August 2026, Search Console reported 88 URLs on our own site as duplicates without a user-selected canonical. Our canonical tags had been present and correct in the source the entire time. The cause was two layers deep: a dozen marketing and legal routes had quietly stopped being prerendered as static pages, and our framework streams metadata for dynamically rendered pages — so the title, robots directives, canonical and hreflang were emitted into the body, after the head had already closed about 1.5KB into the document. A canonical link outside the head is not a canonical link, so Google recorded precisely what it received: near-identical pages with nothing declared, and it chose for us.

The detail that cost us the most time is the one worth passing on. Search Console's live-URL test fetches with a different user agent than the crawler, and that agent sat on our framework's default list of bots served fully blocking, non-streamed metadata — while Googlebot deliberately did not. The live test therefore rendered a correct canonical in the head every single time we ran it, while the crawl that actually builds the index saw none. If a page is reported as a duplicate, trust the indexed result and the raw HTML over any live test: use view-source and find where the head closes. The plainer half of the same incident is worth a look on your own site too — our www hostname served every page with a 200 and no redirect, so Google had indexed www as the canonical host over the apex domain, which one 301 fixed. Validation for a change at this scale typically runs a couple of weeks before Search Console confirms it. If you are working backwards from missing traffic rather than from a canonical report, why is my website not getting traffic covers the checks that come before this one.

FAQ

Is a canonical tag the same as a 301 redirect?
No, and the difference is whether the duplicate stays reachable. A 301 removes the duplicate: anyone who requests it, human or crawler, ends up at the target, and the instruction to search engines is unambiguous. A canonical tag leaves both URLs live and serving content, and asks that ranking signals be credited to one of them. Use a redirect when nobody needs the old address — a migration, a renamed slug, folding www onto the apex domain. Use a canonical when both URLs genuinely have to work, which is the usual case for tracking parameters, filtered listings and syndicated copies.
Should a page canonicalise to itself?
Yes, as a default. A self-referencing canonical on every indexable page costs nothing and removes the ambiguity created when a parameter, a trailing slash or an uppercase character produces a variant you never meant to publish. It also fails safe: if a template bug ever points canonicals at the wrong target, self-referencing is the state you want to have regressed from rather than the state you regressed to. The exception is a page that genuinely should consolidate elsewhere, such as a paginated view or a republication of someone else's article.
Why does Google ignore my canonical tag?
Usually because something else on the site contradicts it, or because Googlebot never received it. The contradictions are ordinary: internal links and the sitemap point at the other variant, the canonical target redirects, or the target is noindexed. The delivery problem is subtler and more common than it sounds — the tag has to sit inside the head element of the HTML the crawler actually receives, not be injected later by a script and not be emitted into the body by a rendering layer. Check the raw response with view-source rather than the browser inspector, which shows the DOM after scripts have run and will happily show you a tag Googlebot never got.
Related terms
hreflangKeyword cannibalizationInternal linkingSchema markup

An AI growth team that runs this for you

AgentCeres is a managed AI marketing team — you approve what ships. 14-day free trial, from $39/month.

Start free trialBrowse the glossary