Duplicate Canonical Tags on One Page: View Source, Then Pick One

Duplicate canonical tags on one page: Two-Then-One. View source when HTML and a plugin both print rel=canonical—pick one URL, not two hints.

Duplicate Canonical Tags on One Page: View Source, Then Pick One

Duplicate canonical tags on one page mean the live HTML (or headers) prints more than one rel="canonical"—often because a theme and an SEO plugin both think they own the head.

This page is Two-Then-One. It is not Google canonical tag explained (what the tag is). It is not WordPress canonical URL settings (where the plugin field lives). It is not Google-selected canonical in Search Console (Inspection disagreement after the fact)—though you may land there after you fix the duplicate.

View source on the live URL. If two canonicals disagree, remove the extra emitter until one URL wins. If they agree, delete the redundant copy anyway.

Official: Consolidate duplicate URLs.

Table of contents

  1. Two-Then-One
  2. How duplicates show up on small blogs
  3. Same URL twice versus two different URLs
  4. Fix order that sticks
  5. After one tag remains
  6. FAQ
  7. Open view source on a money post

Two-Then-One

        TWO-THEN-ONE
  1. LIVE     → open the public URL (not only the editor preview)
  2. SOURCE   → search rel="canonical" and Link: rel="canonical"
  3. COUNT    → one intentional tag, not zero, not two fighters
  4. EMITTER  → disable theme snippet OR plugin duplicate (not both "on")
  5. PROOF    → view source again + URL Inspection on the keeper

A canonical is a hint. Two hints that name different keepers is how a clean article still looks "broken" in Inspection even when the prose is fine.

How duplicates show up on small blogs

Common stacks on WordPress and similar CMS setups:

  • SEO plugin + theme SEO block both print <link rel="canonical" …>
  • Old hard-coded canonical in header.php left over from a migration
  • Page builder SEO panel plus Rank Math or Yoast
  • Staging plugin that injects a staging host into one tag while the plugin prints production
  • Translation plugin that adds a second head partial

Less common but painful: a cache or optimization plugin serves an old head while the origin already changed. Purge cache after you fix the emitter.

You will not see this fight in the WordPress admin preview if the preview domain differs from the live host. Always test the URL Search Console already knows.

Same URL twice versus two different URLs

Two tags, same href — redundant noise. Google may ignore one, but you still maintain two emitters that can drift later. Turn off the duplicate source.

Two tags, different hrefs — active conflict. Example: theme canonicals to http:// while the plugin canonicals to https://www. Example: plugin points at ?page_id=12 while the pretty permalink is /blog/topic/. Pick the 200 URL you want indexed and make every emitter match it.

Do not "fix" conflict by canonicalizing to the homepage. That is a different mistake and often behaves like a soft consolidation you did not mean.

If the fight is header versus HTML, read canonical in HTTP header vs HTML link—same page, different channel.

Fix order that sticks

  1. Name the keeper URL — the HTTPS address already in the sitemap and internal links. Align with one host URL policy if www or slash still wobble.

  2. View source on the keeper — copy the exact canonical href you want.

  3. Find emitters — disable the theme's SEO canonical first or the plugin's duplicate output, following whichever tool you trust for sitemaps. The WordPress canonical field post covers plugin settings; this post assumes two outputs exist.

  4. Purge caches — page cache, CDN, and browser hard refresh.

  5. Re-check — one tag, one href. Then verify before publish habits on the next post so the duplicate does not return on new templates.

One mistake: fixing only the homepage while category templates still print a legacy tag. Spot-check one post, one category, and one paginated /page/2/ if it exists.

After one tag remains

Run URL Inspection on the keeper. User-declared should match what view source shows. If Google-selected still differs, you have a cluster problem (sitemap, redirects, internal links)—not a missing essay on duplicates.

Internal links should already use the keeper. The canonical signal checklist on the owner page is the wider audit; this URL only closed the "two tags on one response" line.

FAQ

Can a page have two canonical tags?

The HTML should emit one clear rel=canonical. Two tags pointing at different URLs create mixed signals. View source and pick one source of truth.

Why does WordPress sometimes print two canonicals?

Theme plus SEO plugin plus legacy snippets. Disable the duplicate emitter.

Is this the same as canonical tags explained?

No. That owner defines the tag. This URL is the duplicate fight on one response.

Should I delete both tags and leave none?

Usually keep one intentional tag on indexable pages after you remove the duplicate source.

Do HTTP header and HTML tags count as duplicates?

Yes when they disagree. See the header-versus-HTML owner for that channel split.

How do I test after the fix?

View source, optional curl for Link headers, URL Inspection, then request indexing after deploy.

Can duplicate canonicals cause keyword cannibalization?

No. Different problem, different owner.

Where is Google’s guidance?

Consolidate duplicate URLs.

Open view source on a money post

Pick one URL that already earns impressions. Search rel="canonical" in view source. If you see two lines, trace which plugin or theme file printed each. Leave one emitter. Re-check after cache purge. Duplicates are a five-minute view-source job—not a reason to publish a second explainer on what canonical means.

Keep learning

More guides in the same topic lane.