Free canonical checker
Check the canonical tag on 50 pages at once
Paste your URLs. Get the canonical each page declares, alongside its robots directive, its status code and the URL you asked for, one row per page, exported as CSV.
- The useful comparison is between the URL you requested and the canonical the page hands back. When those two disagree and you did not intend it, that disagreement is the finding.
50 URLs per run
52 Fields per page
10 CSV exports
Paste up to 50 URLs
Each address is fetched once, parsed in your browser, and added to the tables below as it completes.
Ready.
One row per URL. The CSV carries every column, including all Open Graph and Twitter tags.
0 rowsOne row per URL: title and meta description with their lengths and how many of each the page has, plus canonical, robots and language. Lengths are characters, not pixels.
0 rowsOne row per URL: the address you asked for, where it ended up, and the canonical it declares, both as written and as resolved, with the robots directive beside it.
0 rowsOne row per URL: Open Graph and Twitter Card tags next to the page title, with the status code of og:image. The CSV carries every og and twitter tag found.
0 rowsEvery h1-h6 in document order. Level and order together show the outline a crawler sees.
0 rowsTop 20 words per page after common stop words are removed. Share is measured against the total word count of the page.
0 rowsEvery anchor with an href, classified internal or external, with its anchor text.
0 rowsOne row per image. A missing alt attribute and an empty one mean different things, so they are separate columns.
0 rowsStructured data blocks: JSON-LD, microdata and RDFa types. A block that fails to parse is reported, not hidden.
0 rowsAnything that went wrong. An empty table here is the result you want.
0 rowsThe tag, next to the URL you asked for
A canonical makes most sense next to the URL that returned it.
-
The canonical each page declares
Read out of the HTML exactly as written, absolute or relative, with no normalizing and no cleaning up on the way to the table.
-
Requested URL and canonical side by side
Both columns in the same row, so a mismatch across fifty pages is a sort rather than an investigation.
-
The robots directive in the same row
A canonical and a noindex are separate signals that get confused for each other constantly. Seeing both together usually clears up the confusion.
-
Status codes and the rest of the head
A canonical on a page that returns a 404 or redirects elsewhere is a different problem, and the status column tells you which problem you have.
Five ways a canonical goes wrong
All five are common, all five are quiet, and all five are visible in one column.
-
No canonical at all
Not fatal, but it leaves the decision to a search engine on any page reachable at more than one address, which most pages are.
-
A whole section canonicalized to the homepage
A plugin default that quietly removes every page below it from the index. It is the single most expensive item on this list.
-
A canonical pointing at staging or preview
It happens at launch, it survives for months, and it points a public page at a domain nobody outside the team can reach.
-
Trailing slash and protocol mismatches
A page and the same page with a trailing slash are two URLs. A canonical naming the other one is small, common and real.
-
A canonical and a noindex on the same page
Two contradictory instructions. Google resolves the conflict its own way, and the choice is no longer yours.
What it will not tell you
Worth knowing before you rely on the results.
-
It reads the tag, it does not judge it
Whether the canonical you declare is the right one is a question about your site's structure, and the answer is not on the page.
-
Canonicals sent as an HTTP header are not read
A canonical delivered as a Link header rather than in the HTML is invisible here. That method is rare outside PDFs and APIs, but it does happen.
-
Static HTML only
A canonical written by JavaScript after load is not in the HTML the server sent, and search engines may or may not pick it up.
-
Fifty URLs per run
It runs in a browser tab. Canonical problems are usually site-wide, so use this to confirm a pattern, then fix it at the template.
Common questions
Should every page have a self-referencing canonical?
It is the safe default and most platforms add one automatically. It costs nothing and it removes the ambiguity on any page reachable at more than one address.
Is a canonical an instruction or a hint?
A hint. Google treats it as one signal among several and will overrule a canonical it disagrees with. That is exactly why pairing one with a noindex is a bad idea: you are guessing which signal wins.
What is the difference between a canonical and a redirect?
A redirect sends the visitor somewhere else. A canonical leaves the page where it is and tells search engines which version to index. Use a redirect when the page should not exist; use a canonical when it should exist but should not be indexed separately.
Why does my canonical not appear in the table?
Either it is set by JavaScript after the page loads, or it is sent as an HTTP Link header rather than written into the HTML.
Canonicals are one column of the checker
The same run also returns titles, meta descriptions, headings, word counts, links, images and structured data. One run gives you all ten tables, each with its own CSV.
Open the Bulk SEO Checker See the auditsOther checks the same tool runs: Bulk SEO Checker, Meta tag check, Heading check, Alt text check, Word count check, Open Graph check, Schema check