What a canonical tag does
Most sites serve the same content at more than one URL: with and without www, with a trailing slash, with ?utm_source= tags, over http and https. The canonical tag names the one you want indexed. Google then folds the signals from the duplicates, like links, into that URL instead of splitting them.
What this checker looks at
- Where it’s set. The
<link rel="canonical">tag and the HTTPLinkheader. Google only reads the tag inside<head>, so we flag tags that end up in the body. - Conflicts. Two tags with different URLs, or a header that disagrees with the HTML. Google’s docs say not to specify different canonicals with different methods. It’s usually a theme and an SEO plugin both writing the tag.
- Near misses. A canonical that is almost the page URL: http instead of https,
wwwvs bare domain, a trailing slash, different letter case. We compare against the final URL after redirects and name the exact difference. - The target. If the canonical points elsewhere, we request that URL and check it returns 200 without redirecting.
- Mixed signals. noindex plus a canonical to another page, and canonicals that point at a URL which redirects back here.
Fixing the usual problems
- Pick one host and protocol (normally https, with or without www) and 301 the others to it.
- Generate the canonical from the same function that builds your internal links, so they can’t disagree.
- Use absolute URLs. A relative canonical plus a wrong
<base>tag points somewhere you didn’t intend. - List only canonical URLs in your sitemap. Check it with the sitemap checker.
On our own product, Versely, one metadata helper sets the canonical for every page, across about 5,400 URLs, so no template can drift. The approach is in the Versely case study.
Limits
We read the HTML your server sends, without running JavaScript. A canonical added or changed by a script won’t show here, though Google may see it after rendering. We read the first 2 MB of HTML.