A missing canonical tag is a notice: search engines infer a reasonable one on their own,
usually the URL you requested. Two canonical tags naming different URLs on the same page is a
danger: the page's own <head> is contradicting itself, and only the
first tag found is ever honored -- the rest are silently ignored, by design, not as an error either side
reports back to you.
A blog post at /guide/ runs an SEO plugin that auto-generates
<link rel="canonical" href="https://example.com/guide/"> from the page's own URL on
every request. The theme's template -- written before the plugin was installed, and never removed --
also emits its own tag: <link rel="canonical" href="https://example.com/blog/guide/">.
Fetching that page and checking it:
| Finding | Severity | What it reports |
|---|---|---|
multiple-conflicting-canonical |
danger | "2 canonical tags naming 2 different URLs" -- evidence:
https://example.com/guide/ | https://example.com/blog/guide/ |
Which of the two wins is decided by markup order -- whichever the plugin or the template happens to print
first in <head> -- not by which one anyone actually intended. Neither the plugin nor the
template knows the other one already added a tag, so nothing on the page itself ever surfaces the conflict.
Because more than one system on the page believes it owns the job. A common pairing: an SEO plugin (Yoast, RankMath, and similar) auto-generates a canonical tag from the page's own URL on every request, while a hand-written template -- left over from before the plugin was installed, or added by a developer who did not know the plugin already handled it -- emits its own canonical tag pointing at a different path. Neither system checks whether the other already added one.
Browsers and search engines honor only the first <link rel="canonical"> tag found in the page's <head> and ignore every one after it. Which tag renders first depends on template output order -- something no one on the team necessarily controls or has looked at -- so the winner is effectively arbitrary from the page author's point of view, and can change silently the next time the template or plugin output order shifts.
In one concrete sense, yes: with zero canonical tags, search engines infer a reasonable one on their own -- typically the URL you requested. With two conflicting ones, the page is actively telling crawlers two different things about itself, and which instruction wins is decided by markup order rather than intent. A missing canonical is a gap a search engine fills in sensibly; a contradicting pair is the page's own head disagreeing with itself.
View-source or the Elements panel shows every tag in <head>, including duplicates, but only if you think to scroll past the first canonical tag and check for a second one -- most manual checks stop at the first match. This tool's CLI fetches the page, collects every <link rel="canonical"> tag in <head> rather than stopping at the first, and flags a danger finding the moment two of them name different URLs.
← Back to the Canonical Tag Checker · checking a URL that already redirects? See what view-source can't tell you about the target it points at.