See which URL a page names as its canonical, whether that is the page itself or somewhere else, and whether the URL it names actually answers. One fetch, a plain verdict, and a tag to start from when there is none.
4 rows, one URL. One GET of the page as VerandBot/1.0, redirects followed, 12 second timeout, the served HTML only. We read the first <link rel="canonical">, compare its href with the URL the fetch landed on (case, a trailing slash and a #fragment ignored) and, when it names another absolute URL, send it one HEAD request.
No tag, or a named target that answers with an error, is a fail. A canonical that points to another URL is marked review, not fail: it is right on a tracking-parameter or duplicate URL and wrong on the page you want ranked, and only you know which this page is. A relative href is marked review too; Google supports it but recommends absolute URLs.
Only the first canonical tag is read, so a second, conflicting one goes unreported. A canonical sent in an HTTP Link header, added by JavaScript or listed in a sitemap is not read. A relative href is not resolved or fetched. The HEAD follows redirects, so a target that redirects reads as the status of the page it lands on. Which URL Google actually chose is not visible from outside; Search Console shows that.
One fetch, one tag, one comparison, and one more request only when the tag points away. The card is the tool in motion on an example page, looped, and each step lights up while the card is doing it.
<link rel="canonical" href="https://example.com/services/">
The tool fetches the URL you typed as VerandBot, following redirects, giving up after twelve seconds. It keeps the served HTML and the address the redirects landed on, because that address is what the canonical is compared against.
It looks for the first <link> element whose rel is canonical and takes its href exactly as written. No JavaScript runs, so this is the tag a crawler sees on the first read.
The href is compared with the landed URL, ignoring letter case, a trailing slash and anything after #. A match is a self-referencing canonical. Anything else, a query string included, points elsewhere.
When the canonical names another absolute URL, one HEAD request goes there and its status is reported. A tag that points at a missing page is the fail this step exists to catch, and the card offers a self-referencing tag to replace it.
One line in the head decides which of a page's many addresses collects its links and its rankings. Here is how the tag works, where it is only a suggestion, and the mistakes that hand your ranking to a copy.
A canonical tag is a link element in a page's <head> that names the preferred address for that page's content. Search engines use it when the same content, or nearly the same content, can be reached at more than one URL. Instead of treating each address as a separate page competing with the others, Google can fold them into one and show that one in results. The syntax is a single line:
<!-- inside <head>, on every version of the page -->
<link rel="canonical" href="https://yourdomain.com/services/estate-planning/">
Three details matter. The tag only counts in the <head>; Google's documentation says a canonical link is only accepted there, so a theme that prints it in the body has no canonical at all. The href should be a full, absolute URL with the scheme and host; Google supports relative paths but recommends absolute ones because relative paths cause problems over time. And for files with no HTML head, such as PDFs, the same instruction can be sent as an HTTP response header, Link: <https://yourdomain.com/guide.pdf>; rel="canonical". This checker reads the HTML tag only, so a header canonical will show as missing here.
Most sites create duplicate addresses without meaning to. None of these is a problem on its own, and Google says some duplicate content on a site is normal and not a spam violation. The cost is that links, shares and ranking signals get split across addresses unless something tells Google which one is the real one.
?utm_source=newsletter, and now the article exists at two addresses with identical content. One of the saved runs above is exactly this case on Willowdale Equity./blog and /blog/ are different URLs to a crawler. Most servers redirect one to the other; many serve both.?sort= or ?page= parameters can generate hundreds of addresses from one template.A self-referencing canonical is a page whose canonical tag names its own address. It sounds redundant, and it is the most useful form of the tag. Every duplicate of the page, the parameter version, the trailing-slash version, the scraped copy that kept your markup, now carries a tag pointing back to the clean URL. Google's documentation recommends adding the same self-referential canonical to the canonical page itself, and most WordPress SEO plugins add one to every post by default. It is recommended practice rather than a requirement: a page with no canonical is not penalised, it just leaves the choice entirely to Google.
When this checker compares the tag with the page, it compares against the address the fetch landed on after redirects, ignoring letter case, a trailing slash and any #fragment. So https://yourdomain.com/about and https://yourdomain.com/about/ count as the same page. A query string does not get the same allowance: a URL carrying ?utm_source= whose tag names the clean address is reported as pointing elsewhere, which is exactly what it should be doing.
The tag is a request, not an order. Google's own wording is that indicating a canonical preference is a hint, not a rule, and that it may pick a different page than you did. Redirects are the strongest signal, the canonical tag comes next, and inclusion in a sitemap is the weakest. When those signals disagree, for example the sitemap lists one address and the tag names another, Google has less reason to follow any of them, and its documentation says not to specify different canonicals through different methods.
The only place to see what Google actually decided is Search Console. Open URL Inspection for the page and read two fields: User-declared canonical, which is the tag this checker reads, and Google-selected canonical, the page Google chose as the authoritative version. If they differ, Google has overridden you, usually because the content of the two pages is not as similar as the tag claims, because internal links and the sitemap point at the other version, or because the named target redirects or errors. No outside tool, this one included, can read the second field; it lives in your account.
This is where the tag decides the most for regulated firms. Many financial advisors, CPAs and insurance agents publish articles from a vendor's pre-approved content library, and the same article appears word for word on hundreds of other firm sites. For a set of identical pages, search engines will generally show one. The canonical tag on your copy is part of how that one gets chosen.
The practical step is short: if your articles come from a content library, check where the canonical points on two or three of them. If it names another domain, ask the vendor whether it can be changed, and treat the articles you want found as ones worth rewriting with your own experience, since an identical page has nothing to distinguish it whichever way the tag points. The same logic applies to a multi-office practice that publishes one disclosure or service page per location with only the city changed.
Three tools solve overlapping problems, and mixing them up is common. A 301 redirect is for an address that should not exist any more: visitors and crawlers are sent to the new URL, and it is the strongest canonical signal there is. A canonical tag is for an address that must keep working for people, like a tracking link or a filtered listing, while search engines consolidate onto the clean version. A noindex tag removes a page from search results entirely. Google advises against using noindex to steer canonical selection within one site, because it blocks the page from Search completely rather than pointing its signals anywhere, and against using robots.txt for canonicalization at all. If a page carries both a noindex and a canonical to another URL, it is sending two different instructions; the Noindex Checker reads the other half.
staging. or a preview host ships with every canonical still naming it. The pages look fine and quietly ask Google to rank an address that is password-protected or gone. The target status row on this card catches this when the staging host answers with an error.canonical if you suspect a second.On WordPress, an SEO plugin almost certainly adds a self-referencing canonical already; the plugin's settings for a post let you override it when a page really is a copy of another. On a static or custom-built site, put the tag in the shared head template and build the href from the page's own final URL, with the scheme, the host you actually serve and the trailing-slash style your server redirects to. Then run this checker on a few representative pages: the home page, a post, a listing page and a URL with a tracking parameter added. The first three should read self-referencing; the last should point to its clean version.
Six things that are true of this tool, each one backed by a line in the code that runs it.
The request carries a URL and nothing else. There is no account, no session and no database behind the tool, so there is nothing for us to keep about you.
When the canonical names another URL, the tool sends it a HEAD request and prints the status it gets back, so a tag pointing at a missing page shows up as a fail.
The tag is found by a fixed pattern and compared by a fixed rule. No model reads the page, so the same page gives the same answer every time.
The missing-canonical rule is the one Verand's deep crawl runs on every page of every customer site on the 1st and 15th of each month. The self-reference and target rows are added for this page.
A second canonical tag, an HTTP header canonical, a scripted one and Google's own choice are all out of reach, and the card says so beside the result rather than in a footnote.
Each run is one page fetch and at most one HEAD request, so it is never metered. The one limit is a courtesy to the sites being fetched: 20 checks a minute per visitor.
Missing tags that are there, self-references, and the cases the tag cannot settle alone.
Almost always because the tag is not in the HTML the server sends. This checker reads the served page without running JavaScript, so a canonical added by a script after load, or one sent in an HTTP Link header instead of the HTML, reads as missing. Two other causes: the tag sits in the body rather than the head, which Google does not accept either, or the URL you checked redirects to a different page that has no tag. To confirm, view the page source (not the inspector, which shows the page after scripts run) and search for canonical.
It is a canonical tag that names the page's own URL. Google's documentation recommends putting one on the canonical page itself, so that every duplicate address, a tracking-parameter link or a trailing-slash variant, points back to the clean version. It is recommended practice rather than a requirement, and a page without one is not penalised; it simply leaves the choice to Google. This checker counts a tag as self-referencing when it matches the final URL ignoring case, a trailing slash and any fragment.
You are asking Google to treat this page as a copy and to rank the other URL instead. That is right for a tracking-parameter or filtered version of a page, and wrong for the page you want found. This checker marks it for review rather than failing it, sends the target one HEAD request, and fails it only if the target answers with an error such as a 404. If the target is fine and the page really is the original, change the tag to name the page itself.
A hint. Google says indicating a canonical preference is a hint, not a rule, and that it may choose a different page. Redirects are a stronger signal than the tag, and sitemap inclusion a weaker one. To see what Google decided, open URL Inspection in Search Console and compare the User-declared canonical with the Google-selected canonical. This checker can show you the first; only Search Console shows the second.
If both name the same URL, nothing is lost. If they disagree, Google has two conflicting signals and may disregard them. The usual cause is a theme and an SEO plugin each printing a tag. This checker reads the first canonical in the HTML and does not report a second one, so if you suspect a duplicate, search the page source for canonical and remove whichever one your SEO plugin does not control.
Yes. Google accepts a Link response header with rel="canonical", and it is the only way to set one for files with no HTML head, such as PDFs. This checker reads the HTML tag only, so a page whose canonical is sent as a header shows as missing here. If you use both, make sure they name the same URL; two methods naming different canonicals is one of the things Google's documentation tells you not to do.
A clean canonical makes sure your signals land on one URL. What earns them is the page itself. Verand writes articles from your own expertise and credentials, so Google and the AI assistants have something of yours to name. It then tracks where you rank and where ChatGPT, Gemini, Perplexity, Claude and Google's AI answers mention you, and gates every draft so a claim your regulator would not allow never publishes.
Content built to rank in
Google and get cited by
ChatGPT
Perplexity
Gemini
Claude, with every claim checked before it goes live.