Canonical URL Checker

Follows the redirects, reads the canonical tag, and says whether it agrees with the URL that was actually served, the robots rules and og:url.

This tool needs JavaScript: the server makes the request, because a browser cannot read another site headers.

The exact URL to check. Redirects are followed and listed, because the canonical has to agree with where you end up rather than where you started.

Result

This is one of the few tools here that asks the server rather than your browser, because a browser cannot do it. Nothing you put in is stored; the request is rate limited by address and the answer is not cached.

A canonical tag says “this is the original, index that one instead”. Most of the time it should point at the page it is on, and most of the time that is exactly what it does. The interesting cases are the other ones, and they are invisible without following the redirects first.

This fetches the page, follows every redirect, and then asks whether the canonical agrees with where you actually ended up.

How to use

Put in the exact URL. The redirect chain is part of the answer: a canonical has to agree with the page that was finally served, not the one you asked for.

Example

Asked for                                  https://example.com/blog/post
Ended at                                   https://www.example.com/blog/post/
Redirects                                  2, which the canonical has to agree with
  1                                        https://example.com/blog/post
  2                                        https://www.example.com/blog/post/
Status                                     200

Canonical
  href                                     https://example.com/blog/post
  absolute                                 yes
  self-referencing                         no: this page says the original is somewhere else, so it is
                                           asking not to be indexed on its own

Indexing
  meta robots                              not set, which means index, follow

That is the common failure: the canonical was written before the site moved to www and a trailing slash, so every page now points at a URL that redirects back to itself. Search engines can usually work it out, and they should not have to.

Pitfalls

A canonical is a hint, not an instruction. Google follows it when the pages really are duplicates and ignores it when they are not. A canonical pointing at an unrelated page does nothing at all, except make the report in Search Console confusing.

Self-referencing is the right default. Every indexable page should name itself, so that a version with a tracking parameter or a session ID still consolidates to the clean URL.

Canonical plus noindex is a contradiction. One says “index this other page instead and pass the signals across”, the other says “drop this page”. Crawlers cannot do both, and which one wins is not something to rely on.

A canonical that redirects is a signpost pointing at a signpost. If the canonical URL 301s somewhere else, name the destination directly.

Two canonical tags cancel each other out. It happens when a theme and an SEO plugin both write one. Google ignores both when they disagree.

A relative canonical is legal and unwise. href="/page/" resolves differently depending on the base URL and is read inconsistently. Use the absolute URL.

The Link: rel=canonical header is a second source. Useful for PDFs and images, easy to forget when the HTML changes, and it has to say the same thing.

http and https are different pages. So are www and bare, and in most setups so are /a and /a/. A canonical is how you say which one is real, and a redirect is how you make it stick.

Compatibility

One request from the server, following up to three redirects, with each hop checked before it is followed. This is one of the few tools here that asks the server, because a browser cannot read another origin’s headers or its response after redirects.

No JavaScript runs. The page is read as delivered, which is also what a crawler sees first: a canonical injected in the client is a canonical that may or may not be seen, and this shows the document without it.

Comparison ignores the differences that do not change what is served — case in the host, a default port, a missing trailing slash on the root — and keeps the ones that do, because /a and /a/ genuinely can be different pages.

The x-robots-tag header is read as well as the meta tag, since the header is the one people forget is there.

Frequently asked questions

Should every page have a canonical?
Every indexable page benefits from a self-referencing one. Pages you do not want indexed want noindex instead, not a canonical pointing elsewhere.
Does a canonical stop duplicate content penalties?
There is no duplicate content penalty to stop. What duplicates cost you is split signals and wasted crawl budget, and consolidating with canonicals or redirects is how you avoid that.
Canonical or redirect?
A redirect when the old URL should stop existing. A canonical when both URLs need to work but only one should rank, such as a printable version or a filtered listing.
Do parameters need their own canonical?
They need the clean URL as their canonical, which is the whole reason self-referencing canonicals matter: ?utm_source=x then consolidates automatically.
Why does Google show a different canonical from mine?
Because it is a hint. When Google’s own signals disagree strongly enough — internal links, sitemaps, redirects — it picks its own, and Search Console tells you which one it chose.
Weekly drops

New tools, when there are new tools

One email when something worth using ships. No schedule to fill, so no filler.

Your address goes nowhere else, and one click unsubscribes.