Missing canonical tag: when it matters and how to add one
A missing canonical tag means the page does not declare its preferred URL with <link rel="canonical" href="...">. The fix is a self-referencing canonical: a tag on each page pointing at its own clean URL, so parameter and tracking variants of the page consolidate onto the one you want indexed.
It is an optimization, not an emergency. Google chooses a canonical for every page whether or not you declare one, and usually chooses sensibly. The tag is your way of stating a preference, which matters most when the same content is reachable at several URLs.
What it looks like in the HTML
Before
<head>
<title>Cold Brew at Home | Bean Notes</title>
<!-- no canonical; ?utm_source=newsletter copies look like separate pages -->
</head>
After
<head>
<title>Cold Brew at Home | Bean Notes</title>
<link rel="canonical" href="https://example.com/cold-brew-at-home/">
</head>
Why it matters
The same page is often reachable at more than one address: with tracking parameters from newsletters and ads, with sorting or filter parameters, with and without a trailing slash, or through print and preview variants. Search engines can treat each address as a separate page, splitting links and signals between them and choosing one to show on their own.
A self-referencing canonical tells search engines that, whatever address they arrived at, this is the URL to index and credit. It is a strong hint rather than a command, and Google may ignore a canonical that contradicts everything else, but a correct one is usually respected. For duplicate content across different pages, see duplicate content.
Why WordPress pages are missing it
WordPress core prints a canonical tag only on single posts and pages. The homepage, category and tag archives, author archives and other listing pages get none by default. So a site with no SEO plugin, or a plugin with canonicals turned off, will show this on every archive.
Other causes:
- The theme removed
rel_canonicalfromwp_head, or a custom template skipswp_head()entirely. - A plugin conflict where one plugin removes core's canonical expecting to print its own, and then does not.
- Headless front ends that do not print one.
How to fix it in WordPress
- Check which page types are affected. View source on a post, a page, the homepage and a category archive, and search for
rel="canonical". - Let Hydrogen SEO handle the default. It outputs a self-referencing canonical on every post, page, term and archive automatically, pointing at the clean permalink, and the homepage gets its clean root URL. For most sites there is nothing else to configure.
- Override only for real duplicates. In a post's SEO Settings sheet (Ctrl+E or Cmd+E), the Canonical URL field lets you point the canonical at another URL, for example when the post is syndicated from an original elsewhere. Enter the full absolute URL, including
https://. Leave it empty otherwise. - Avoid common mistakes. Do not point canonicals at URLs that redirect or return 404, do not point every page at the homepage, do not mix
httpandhttpsorwwwand non-www, and do not combine a canonical to another URL withnoindexon the same page. - Make sure only one plugin prints it. Two SEO plugins, or a plugin plus the theme, can print two canonical tags that disagree. Keep one source.
Other SEO plugins also output self-referencing canonicals by default; if yours is not, check whether the feature has been switched off.
How to check the fix
View source and confirm exactly one <link rel="canonical"> in the head, pointing at the page's own URL with the right protocol and host. Add ?test=1 to the URL and check again: the canonical should still point at the clean URL. In Google Search Console, the URL Inspection tool shows both the canonical you declared and the one Google selected. Rerun the free SEO audit to confirm the tag is found.
Common questions
Should every page have a canonical tag?
It is good practice. A self-referencing canonical costs nothing and consolidates tracking and parameter variants you may not know exist.
Is a canonical tag the same as a redirect?
No. A canonical is a hint about which URL to index; visitors can still reach the other URLs. A 301 redirect actually sends visitors and crawlers to the new URL.
Can Google ignore my canonical tag?
Yes. Google treats it as a strong hint and may pick a different URL if other signals, such as internal links or redirects, disagree.