Two Canonical Tags? Google Ignores Both
It's easy to think adding a rel=canonical tag means your SEO work here is done, but in practice "how many are there" matters just as much as "what does it point to." If a single page has two or more canonical tags, Google has no way to tell what the developer actually intended — so it discards the canonical signal entirely. This guide covers why duplicates happen, why Google's response is the extreme move of "ignore both" rather than picking one, and how to catch the problem.
1. Canonical is a "declaration," not a "vote"
Many people assume that adding multiple canonical tags means Google will just "pick one." But that's not how canonical was designed to work in the first place — it isn't majority rule. Canonical is a signal where the page owner explicitly declares, once, "this URL is the canonical version." When the same page emits two canonical tags pointing to different (or even the same) URLs, that's not a declaration anymore — it's a contradiction. Google's own guidelines state explicitly that when a signal like this becomes unreliable due to contradiction, Google stops trusting it and instead falls back to estimating the original URL using its own algorithm. In other words, the canonical URL you carefully specified can end up completely ignored, and Google may pick an entirely different URL as canonical based on its own criteria.
2. Why duplicates happen: three common causes
Duplicate canonical tags are rare in a hand-written single HTML file, but they become common the moment a CMS or framework enters the picture.
- SEO plugin + theme code conflict: a plugin like WordPress's Yoast SEO auto-inserts a canonical tag, but if the theme itself also hardcodes one into <head>, both get output at once.
- Server-side rendering + client-side insertion overlap: the server already rendered a canonical tag, but front-end JS (React Helmet, etc.) adds another one dynamically after page load.
- AMP/mobile page linking mistakes: wiring up the relationship between an AMP version and a regular version incorrectly can also cause the canonical and amphtml link relationships to be mis-routed, duplicating the same tag.
In all three cases, it's hard for a developer to spot the problem by looking at just one piece of code. The duplication only shows up when you inspect the actual rendered HTML the browser produces (via view-source or the Elements tab in DevTools).
3. A real example: outcomes by tag count
<link rel="canonical" href="https://example.com/page"><link rel="canonical" href="https://example.com/page?utm_source=x">Even though both appear to point at the "same" page, from Google's perspective this is nothing but a contradictory signal — "this page's canonical URL has been declared two different ways." As a result, Google ignores both tags and estimates the canonical URL on its own, using the page's link structure, internal navigation paths, and similar signals.
| Number of canonical tags | Google's handling |
|---|---|
| 0 | No canonical signal → Google estimates from scratch on its own |
| 1 | Normal — the declared URL is adopted as the signal (though it can still be overridden by conflicting signals) |
| 2 or more | Treated as a contradiction → all are ignored, effectively identical to having 0 |
In other words, adding a second tag isn't "doubling up on a safety net" — it's a mistake that produces the exact same outcome as adding none at all. You can check whether your own page has this problem with the Canonical Tag Checker — enter a URL or paste your HTML source directly, and the tool counts the tags and flags a separate warning if there are two or more.
4. After you find it: what to fix first
Once you've confirmed duplication, work through these steps in order.
- Search the page source for <link rel="canonical"> and trace, at the code level, exactly where each one is being output from (a theme template, an SEO plugin setting, a custom script).
- If you're using an SEO plugin, let its canonical feature take priority and remove the hardcoded one in the theme. If the theme is actually the better-maintained source of truth instead, turn off the plugin's auto-insertion.
- After fixing it, re-verify on the actually deployed page with the Canonical Tag Checker again — it's common to fix the local code, forget to check the cached deployed version, and mistakenly assume the problem is still there (or gone) when you haven't actually verified it.
- If the same CMS/theme structure is used site-wide, don't stop at fixing one page — use the Sitemap Validator to sample URLs listed in your sitemap and check whether the same duplication pattern shows up on other pages too.
5. Other signals worth checking alongside canonical
Canonical alone doesn't determine the final URL. Google weighs it together with internal link structure, the URLs listed in your sitemap, hreflang signals, and redirect history. Once your canonical tags are cleaned up, it's also worth checking that your hreflang tags don't conflict with the canonical URL, and that your redirect chains resolve correctly to the canonical URL.
Frequently Asked Questions
Q. Is it still a problem if both canonical tags point to the exact same URL?
A. Yes. Even if the values are identical, Google can still treat the mere fact that "two tags exist" as a contradictory signal. Whether the values match or differ, always keep exactly one.
Q. What happens if there's a canonical tag inserted by JavaScript alongside one rendered server-side?
A. In the final rendered DOM, that's very likely to be counted as two tags. Make it clear that only one side — server or client — is responsible for outputting the canonical tag.
Q. Will fixing a duplicate canonical restore rankings immediately?
A. No. It takes time for Google to recrawl and re-evaluate the page after the fix. If you want faster reindexing, requesting indexing for the URL through Search Console's URL Inspection tool can help.
Q. Is it fine to have one relative-path canonical and one absolute-path canonical?
A. No — both are still canonical tags, so the count is still 2, and it's still a problem. Regardless of relative vs. absolute, you must keep the tag itself to exactly one.