What is a canonical URL?
A canonical URL is the address you want search engines to treat as the main copy of a page when the same content is reachable at several URLs. You declare it with <link rel="canonical" href="..."> in the page's <head>. This checker fetches a page and shows the href of that tag, or tells you there isn't one.
Duplicate URLs creep in easily: ?utm_source= tracking parameters, ?sort=price, trailing-slash variants, http:// and https://, www and bare domains, print views. Google groups the duplicates and picks one to show in results. The canonical tag is how you state which one you'd prefer.
How the checker works
Paste a full URL and click Check. The URL goes to our server, which requests the page (following up to ten redirects, waiting up to eight seconds per response) and parses the HTML it gets back. Private and reserved IP addresses are refused before any request is made.
The parser looks for the first <link> element whose rel attribute contains the token canonical, in any capitalisation, and returns its href unchanged. For a page with a self-referencing canonical, the whole output is one line:
https://www.example.com/shoes/trail
With no canonical tag at all, you get:
No canonical tag found on that page.
Because redirects are followed, the canonical you see belongs to the page the chain ended on. Enter http://example.com/shoes and you're reading the tag on wherever that redirects. The redirect checker shows that path hop by hop.
Reading the result
| What you see | What it means | Action |
|---|---|---|
| The same URL you entered | Self-referencing canonical | Usually correct for a primary page |
| A different page on your site | You're telling Google this page is a duplicate of that one | Fine for parameter variants; a mistake if this page has unique content |
An http:// URL on an https site |
Template is hard-coding the old scheme | Update the template; it contradicts your redirects |
| A staging or localhost domain | Environment config leaked into production | Fix the base URL setting and redeploy |
A path like /shoes/trail |
Relative canonical | Works, but switch to an absolute URL |
| "No canonical tag found" | Nothing declared | Add one to any page that can be reached by more than one URL |
Google's rules for canonicals
Google's guide to consolidating duplicate URLs is the reference here. The points that matter most when reading this tool's output:
- A redirect and a
rel="canonical"link are both described as strong signals; listing a URL in a sitemap is a weak one. Google treats all of them as preferences, not orders. - The link element is only accepted in the
<head>. This checker searches the whole document, so a canonical that a broken template dumped into the<body>is still reported here even though Google ignores it. If the result surprises you, view source and check where the tag sits. - Use absolute URLs. Relative paths are supported but Google says they can cause problems over time.
- Don't send mixed messages. Listing one URL in your sitemap and a different one in the canonical tag for the same page is called out as a mistake.
- Don't use robots.txt or
noindexto pick a canonical. A robots.txt block stops Google seeing the canonical tag at all, andnoindexremoves the page from Search entirely.
Auditing a set of duplicate URLs
- List the variants of one page: with and without
www,httpandhttps, trailing slash, common query parameters. - Run each through this checker. Every variant should name the same canonical URL.
- Run that canonical URL itself. It should return its own address (self-referencing), not point onward to yet another page.
- Confirm the canonical answers 200 directly, with no redirect in front of it.
- Check that the sitemap lists the canonical version and not the variants.
What the checker won't catch
It reads only the first matching tag, so a page carrying two conflicting canonical tags (often two SEO plugins fighting) shows just the first; search the source for rel="canonical" to find both. The rel match follows HTML's rules, so rel="Canonical" or a combined value like rel="alternate canonical" is detected, but a <link> placed in the body is reported too even though Google only honours canonicals in the head. HTTP Link header canonicals aren't read, and neither are canonicals added by JavaScript after load.
On multilingual sites, check that canonicals and hreflang don't contradict each other: a translated page whose canonical points at the English version is asking to be folded into it. The hreflang checker lists the alternates a page declares so you can compare the two. For a broader look at the same page's title, description and robots rules, use the on-page SEO checker.
Last updated