The Canonical Tag Checker reads all three canonical signals Google recognizes — the <link rel="canonical"> tag in the <head>, the Link: <url>; rel="canonical" HTTP header, and the og:url hint — resolves them to absolute URLs, and checks whether they agree with each other and with the page's final URL after redirects. It optionally follows the canonical target itself to confirm it returns HTTP 200 and has a matching reciprocal canonical, which is when the signal actually works. It flags every common mistake: multiple conflicting canonicals (Google throws them all out), canonicals pointing to a 4xx or a redirect (silently ignored), hreflang self-references that don't match the canonical (whole hreflang cluster discarded), mixed http/https protocols, cross-domain canonicals, and relative URLs. Each finding comes with a fix and a plain-English explanation of the ranking consequence.
What a canonical tag does — and doesn't — do
A canonical tag tells search engines which URL is the preferred version when the same content is reachable at multiple URLs. It's not a redirect — the duplicate URLs remain accessible — but it consolidates ranking signals (backlinks, freshness, engagement) onto the canonical version. What it doesn't do: it doesn't force Google to obey it. Google treats the canonical tag as a hint. Google can and does override it if other signals point to a different preferred URL: internal links, HTTP headers, hreflang clusters, sitemaps, and the page's own content. When you see "Duplicate, Google chose a different canonical than user" in Search Console, that's Google saying: your canonical said one thing, everything else said another, and Google went with the majority.
The three canonical signals Google reads
Google collects canonical signals from three sources and picks the strongest one it can trust. 1. <link rel="canonical"> in the <head> — the most common and recommended. Set it on every page, even to itself. 2. HTTP <code>Link</code> header, e.g. Link: <https://example.com/page>; rel="canonical". Used mainly for non-HTML resources like PDFs where you can't add a link tag. Applies to HTML too, and takes precedence over the tag if Google is unsure. 3. og:url is not officially a canonical signal but Google uses it as a fallback when everything else is missing. Our checker inspects all three and reports whether they agree — because if they disagree, Google may go with any of them.
Self-referencing canonicals — the boring answer that's usually right
The safest default is: every canonical page points to itself. On example.com/pricing, the canonical is https://example.com/pricing. This makes explicit what would otherwise be an implicit assumption and protects against Google picking a duplicate you didn't expect. Self-references are especially important when URL variations creep in: ?utm_source=…, ?ref=…, trailing slashes, uppercase paths, session IDs, pagination parameters. Without a self-referencing canonical, each variation is a potential ranking dilution. Non-self-referencing canonicals are only appropriate when you genuinely want signals consolidated on another URL — duplicate content (same product on multiple category pages), syndicated articles, paginated series pointing to a "view all" page.
Common mistakes that silently kill canonicals
Multiple canonical tags. If a page has two <link rel=canonical> tags pointing at different URLs, Google ignores both. Common cause: a CMS emitting one and a plugin emitting another. Canonical to a redirect. If the canonical URL 301s to another URL, Google follows the redirect and picks whatever it lands on. Better: point the canonical directly at the final URL. Canonical to 4xx. A canonical URL that returns 404 is discarded. Google falls back to picking a canonical itself. Cross-protocol. Canonical http:// on an https:// page confuses Google. Relative URL. Some parsers resolve relatives correctly, others don't. Always use an absolute URL. Hreflang mismatch. If your self-referencing hreflang uses a different URL than the canonical, Google discards the whole hreflang cluster. Our checker catches all six.
Reciprocity — the check most tools skip
A canonical only works when it's reciprocal. If page A points its canonical at page B, page B's canonical should point at itself — not back at A, not at page C. Non-reciprocal chains break the signal: Google sees A → B and then B → C, treats it as a canonical chain, and often just picks its own preferred URL. Our checker optionally fetches the canonical target and reads its canonical to detect this exact problem. Two ways it fails: (a) the canonical target has a canonical of its own pointing at a third URL (broken chain), or (b) the canonical target has no canonical at all (weak signal). Fix by ensuring every canonical target self-references.