Canonical tags, explained without the jargon
A canonical tag says: of the several URLs where this content can be found, this one is the real address.
<link rel="canonical" href="https://example.com/blue-widgets">
It exists because the same content is routinely reachable at several URLs — with and without www, with tracking parameters, with a trailing slash, through a category path and a flat path, in http and https. Google needs to pick one to rank, and would rather you told it than guessed.
The part that surprises people
It is a hint, not a directive. Google treats a canonical as strong evidence and frequently ignores it. If your canonical points at a page with different content, or the internal links all point somewhere else, or the sitemap disagrees, Google resolves the contradiction its own way.
This is why "I set the canonical and nothing happened" is such a common complaint. The canonical was outvoted.
The three mistakes that cause most of the damage
Canonical to the homepage. A well-meaning plugin sets every page's canonical to the site root. Every page is now claiming to be a duplicate of the homepage. Traffic collapses and the cause is invisible in the browser.
Canonical to staging. The tag was written with an absolute URL on a staging domain and shipped. Every production page hands its ranking signals to a host nobody outside the office can reach.
Canonical pointing at a redirect, or at a noindexed page. Both create a contradiction: this is the real address, but the real address either moves or asks not to be indexed. Google resolves it by ignoring you.
Getting it right, briefly
- Every page should have exactly one canonical, absolute, including protocol and host.
- Self-referencing canonicals are correct and normal. A page whose canonical is itself is not a wasted tag; it is the clearest possible signal.
- Make internal links, the sitemap, and the canonical all agree. Disagreement is what causes Google to make its own decision.
- Parameters that do not change content — tracking, session, sort order that produces the same items — should canonical to the clean URL.
- Parameters that do change content — a genuinely different filtered set — should not.
How to check
Fetch the page and read the tag. Then check what Google actually chose, in the URL inspection tool: it reports both the canonical you declared and the canonical it selected. When those differ, that difference is the finding, and it will not appear in any crawl of your own site.