Bulk Canonical Tag Checker & Validator
Data checkedCanonical
How to use the bulk canonical URL checker
Back to the toolEach URL is fetched once and every canonical it declares is listed raw, from the HTML head and from the Link response header alike.
- 01
Enter the URLs to check
Single mode checks one address and runs on Enter. Switch to Bulk to paste a list, one URL per line, up to 30 per run. Duplicate pages are the ones worth pasting together: a page and its printer version, its query-tagged copy, its www and non-www forms.
- 02
Choose the URL normalization level
Normalize URL rewrites each address before fetching. Full URL keeps the path and query but drops tracking parameters and the fragment; No query removes the query string; Domain only keeps the domain. Here it matters most: a query parameter is what splits a page in two, so dropping it checks the page you trust, not the suspect copy.
- 03
Read the Canonical column
Rows appear as URLs finish. The column lists what the page declares and judges nothing, so a self-referencing tag, a cross-domain one and a page declaring two look like what they are. Compare each entry with the URL column: the same address means the page nominates itself; a different one hands indexing elsewhere. A page that declared nothing shows —.
- 04
Inspect a row and export the results
View opens the one place a declaration is judged, and where each one’s source is shown: [html] for a tag in the head, [header] for a Link header. Two sources naming two addresses is what a plain column cannot expose. Copy table copies the rows tab-separated; Export CSV writes them to a file. Both keep every declaration with its source.
How to read the canonical tag report
A row reads left to right: the address checked, where it landed, and the address that page nominates for indexing.
Result table columns
- URL
- The address exactly as it was checked — after normalization, not always what you typed.
- Resolved URL
- Where the request ended and the status it ended on. Redirects are followed first, and the canonical is read from that final page.
- Canonical
- Every canonical the final page declares, one per line, resolved to a full address. — means none was declared.
- Result
- Whether the row finished, is still running, or stopped on an error. It says nothing about the canonical itself.
- Actions
- View opens the detail panel for that row; Retry appears instead when the request never got through.
Detail panel verdicts
- Canonical points to the checked URL itself.
- The page nominates itself. The ordinary, healthy case, and the one every indexable page should show.
- Canonical points elsewhere — this URL will not be indexed.
- The page hands indexing to another address. Correct for a duplicate; a mistake on a page meant to rank, and common after a site move leaves canonicals pointing at the old domain.
- No canonical declared.
- Nothing was declared. Not an error, since Google then indexes the address it crawled, but it leaves the choice to Google on any page reachable by more than one URL.
- 2 canonical tags — with more than one, Google ignores them all.
- More than one declaration on the same page. Google discards all of them and picks for itself, so the page ends up with no canonical rather than two.
Where a declaration can come from
- [html]
- A <link rel="canonical"> tag in the head of the page. The usual place, and the only one most sites use.
- [header]
- A Link: …; rel="canonical" response header. The only way to declare a canonical for a file with no head, such as a PDF, an image or a feed, and easy to forget because nothing on the page shows it.