CanonicalTag.com logo, a canonical tag referenceCanonicalTag.comThe canonical tag, explained
Free canonical tool · Server-side fetch

Bulk Canonical Checker

Paste up to 25 URLs and compare their final status, declared canonical and self-referencing result side by side, then export the table as CSV.

Checked one at a time by this site's server, with a short pause between requests.

What a bulk canonical check is good for

The bulk canonical checker runs the same server-side fetch as the single-URL checker across up to 25 URLs and lays the results side by side. Its value is comparison. One URL tells you what a page declares; twenty-five related URLs tell you whether a template, a parameter rule or a migration is behaving consistently.

The list you paste decides what the check can reveal, so build it with a question in mind:

  • Variants of one page: the clean URL plus its http, trailing-slash, uppercase and utm_ versions. All of them should end at, or point to, one URL.
  • A template sample: several product or article pages from the same layout, to see whether each self-references or whether one hardcoded value leaked across all of them.
  • A paginated series: page 1 through page 10 of one category.
  • A locale set: each language version of one page.
  • A migration sample: old URLs, to confirm they redirect and that the destinations carry sensible canonicals.

Reading the table column by column

URL is what you entered. Final status is the code of the last response after redirects were followed, so a 200 here can hide a multi-hop chain in front of it. Where the hops matter, put that one URL through the single-URL checker to see each step.

Canonical is the URL the final response declares. Reading this column down the page is the fastest part of a bulk check: identical values across a set of variants is what you want; identical values across a set of different pages usually means a template is printing a fixed URL.

Self-referencing compares the canonical with the URL that returned the content. Its meaning depends entirely on the row. "Yes" is right for a clean, indexable page and wrong for a parameter variant that should consolidate. "No" is right for that variant and wrong for the page you want to rank.

Issues collects the per-URL problems the fetch detected, such as a missing canonical, multiple canonicals, a relative or http target, or a noindex sitting next to the canonical. Treat it as a list of places to look, not a verdict on the page.

Patterns across rows that point to a real problem

Pattern in the tableLikely causeWhy it matters
Pages 2 onward all canonicalize to page 1A pagination template or plugin settingGoogle's pagination guidance says each page should have its own canonical; later pages list different items
Every language version names the English URLA shared head includeContradicts hreflang; each locale should self-canonicalize
Canonicals name an http or non-www URL that the site redirectsA hardcoded base URL left over from before a moveThe hint points at a redirect source, which RFC 6596 advises against
Parameter variants self-referenceThe canonical is built from the requested URLEach variant nominates itself, so nothing consolidates
Mixed "missing" and present on one templateConditional output or caching differencesInconsistent signals across similar pages

A useful cross-check: if a canonical value in one row is also one of the URLs you pasted, look at that URL's own row. It should return 200 and reference itself. If it redirects or declares a different canonical, the first page is pointing at a URL that is not itself the endpoint.

Working with the CSV export

The CSV export turns a one-off check into a record. Sorting by the canonical column groups pages that nominate the same target, which makes a leaked hardcoded value obvious. Filtering on the self-referencing column separates the pages that consolidate elsewhere from those that stand alone, and each group can be checked against what you intended.

Two other uses repay the effort. Compare the canonical column with the URLs in your XML sitemap: Google treats sitemap inclusion as a weak signal, but a sitemap that lists URLs your pages canonicalize away from works against you. And keep the export from before a fix, then run the same list afterward, so the change is documented rather than remembered.

Limits of a 25-URL sample

  • It does not crawl. The checker fetches only the URLs you paste. It does not follow links, so it cannot find pages you did not know about. A site crawler (Screaming Frog and Sitebulb are two examples) is the tool for coverage.
  • It reads server HTML only. As with the single checker, JavaScript is not executed, so script-injected or rewritten canonicals do not appear.
  • It is not Googlebot. Responses that vary by user agent or IP may differ from what Google receives.
  • It shows consistency, not correctness. A column of identical canonicals is consistent; whether that URL is the right page is a judgment about content.
  • It does not show Google's choice. For that, open the Page indexing report and look for statuses such as "Duplicate, Google chose different canonical than user," then inspect individual URLs.

Frequently asked questions

How many URLs can I check at once?

Up to 25 per run. That suits a deliberate sample, such as one page's variants, a paginated series or a template spot check. For a whole site, a crawler that follows links and records canonicals for every page is the better fit.

Why does a URL show a 200 status when I know it redirects?

The status column reports the final response after redirects are followed. A URL that redirects to a working page ends on 200. Run that URL through the single canonical checker to see every hop and its status code.

Is "self-referencing: no" always a problem?

No. It means the page names another URL as canonical, which is correct for duplicates such as tracking-parameter or alternate-path versions. It is a problem only on a page you want indexed in its own right, such as page 3 of a category or a French-language product page.

Does the bulk checker tell me which pages Google has indexed?

No. It reports declarations, not indexing. Search Console's Page indexing report and URL Inspection show which URLs Google indexed and which canonical it selected for each.

Can the bulk checker read canonicals added by JavaScript?

No. It fetches server-delivered HTML without running scripts. If the site renders its head with JavaScript, compare the rendered DOM in browser DevTools, or use a crawler with JavaScript rendering enabled.

What should I paste to check a paginated category?

Paste the first page and a run of later pages from the same series. Each should return 200 and carry a canonical to itself; Google's pagination guidance says not to use the first page as the canonical for the others. A column in which every page names page 1 points to a template or plugin setting that needs changing.

Top