Home/Free SEO tools/Canonical Checker
Free tool · step 01 of 04 · Reachable & indexable

Canonical CheckerOne preferred URL for every page.

Check rel=canonical tags: present, self-referencing where they should be, resolving to live 200 URLs, and never pointing at a redirect.

Last reviewed · 1 Oct 20266 primary sources →Kalenux engineering
https://
PresenceSelf-referenceTarget statusConsistencySingle tagHost & protocol
canonical checker · example.com
75/ 100
1 to fix · 1 to review
4 passed · 1 warning · 1 failed
Canonical presentyesPASS
Self-referencingno: points elsewhereWARN
Target status301 → /shoes/FAIL
Protocol & hostmatchesPASS
Duplicate tags1 tag onlyPASS
HTML vs headerconsistentPASS
illustrative result
fetched as crawler · 0.4s
6checks on the tagtarget, method, self-reference
21canonical checksin the full site audit
5Google sourcesevery claim linked
0signups neededpaste a URL and run it
the problem canonicals solve

Six addresses, one pair of shoes.

Nobody sets out to publish the same page six times. Each of these appears on its own — a migration, a server default, a filter, a link someone shared — and to a crawler every one is a separate page competing with the others.

  1. Protocolhttp://site.com/shoesthe pre-HTTPS address, still resolving
  2. Hostnamehttps://www.site.com/shoeswww and bare domain both answering
  3. Trailing slashhttps://site.com/shoesthe same path with and without it
  4. Filterhttps://site.com/shoes/?color=reda facet that narrows but does not change the page
  5. Campaign taghttps://site.com/shoes/?utm_source=mailadded by the newsletter, not by you
  6. Index filehttps://site.com/shoes/index.htmlthe file the directory already serves
CANONICAL · THE ONE GOOGLE KEEPShttps://site.com/shoes/

Every link, every mention and every bit of ranking history from the six above counts towards this URL instead of being divided between them.

THE FIX
  1. Redirect what you control. http and www, the index file, the slash variant: send each one 301 to the chosen URL so the duplicate stops existing rather than being explained away.
  2. Canonicalise what you cannot remove. Filters and campaign parameters have to keep working, so leave them reachable and have every one of them name the clean URL.
  3. Make the chosen page name itself. A self-referencing canonical on the target, absolute, matching the URL exactly — otherwise the page you want kept is the only one not voting for itself.

Without this Google still picks a winner, but it picks on its own evidence, and the other five keep their share of the links.

why canonicals get ignored

A hint, not a command.

Google treats the canonical as a strong signal, not an instruction, and weighs it against everything else the page says [1]. When the tag contradicts another signal, the tag is what gets dropped — and Google chooses a URL on its own evidence. These are the six contradictions the checker looks for, in the order it tests them.

  1. 01

    The target redirects

    The canonical names a URL that answers with a 301.

    GoogleIt follows the redirect and usually canonicalises to the destination instead, so your declared URL never wins.

    FixPoint the canonical at the final URL, the one that returns 200. Never at a URL you also redirect.

  2. 02

    The target errors

    The canonical names a URL returning 404, 410 or a 5xx.

    GoogleIt cannot index a page that is not there, so the tag is discarded and the choice is made without you.

    FixFetch the canonical target yourself and confirm it returns 200. A canonical to a dead URL is worse than none.

  3. 03

    The canonical chains

    A names B as canonical, and B names C. The chain has no end on the page you started from.

    GoogleIt does not follow canonical chains the way it follows redirects, so a chained tag is unreliable and may be dropped entirely.

    FixFlatten the chain. Every duplicate should name the final URL directly, never a page that itself canonicalises elsewhere.

  4. 04

    The target is noindex

    The page says index this one instead, and that one says do not index me.

    GoogleThe two directives contradict, so the signal is unreliable and both pages may fall out.

    FixDecide which you meant. If the target should be indexed, remove its noindex; if it should not, canonicalise somewhere else.

  5. 05

    There are two tags

    Two rel="canonical" tags on one page, usually a theme and an SEO plugin both writing one.

    GoogleConflicting tags are treated as unreliable and Google may ignore both.

    FixFind which plugin emits which and switch one off. View-source and count the tags; there must be exactly one.

  6. 06

    HTML and header disagree

    The <link> tag names one URL and the HTTP Link: header names another.

    GoogleSame contradiction, harder to spot, because the header never appears in view-source.

    FixCheck the response headers as well as the HTML. Serve the directive one way only, usually the tag, and drop the header.

what a passing tag looks like

One line, five details.

Most failures come down to one character in the wrong place.

<head> of /shoes/?color=red
<linkrel="canonical"href="https://site.com/shoes/">
FLAGGEDhref="http://site.com/shoes" → redirects to the HTTPS slash URL
1Absolute URL, never a relative path2HTTPS, matching the live protocol3Preferred host, www or not, whichever is live4Exact trailing slash, so it doesn't redirect5Exactly one tag on the page
pick the right target

Where should this page point?

A quick decision table for the page types the checker sees most often.

PAGE TYPECANONICAL POINTS TOEXAMPLE
A unique pageItselfSelf-referencing
Filter or sort parametersThe clean category URL?color=red → /shoes/
Tracking parametersThe clean URL?utm_source → /shoes/
Paginated pagesEach page itself/blog?page=2 → /blog?page=2
A syndicated copyThe original articlePartner copy → your URL
what canonicals are for

Duplicate content is almost never copied content.

It is the same page reachable at several addresses, which happens on its own: a store adds filters, a CMS keeps both www and non-www alive, a campaign link picks up a tracking parameter. Google then has to pick one URL to keep, and it splits the signals between them until it does [1].

Same page, different addresses

https://site.com/shoes
https://www.site.com/shoes
http://site.com/shoes
https://site.com/shoes/

www and non-www, http and https, trailing slash or not. Four URLs, one page, and Google has to choose.

Parameters that change nothing

/shoes?color=red&sort=price
/shoes?sort=price&color=red
/shoes?utm_source=newsletter
/shoes?ref=homepage

Filters, sort orders and tracking tags multiply one page into hundreds, each looking distinct to a crawler.

The same product in several places

/shoes/running/model-x
/sale/model-x
/brands/acme/model-x
/search?q=model-x

Category paths, campaign landing pages and internal search results that all render the same item.

There is no penalty for any of this. The cost is quieter: links and ranking signals divided between duplicates, crawl budget spent fetching the same content repeatedly, and the version Google keeps possibly not being the one you would have chosen [1].

in depth · 6 primary sources

What Google documents about canonical URLs.

What the search engines document about each check this tool runs, with every claim linked to its source.

01A strong hint, not a directive

WHAT IT MEANS“a hint”Something Google weighs rather than obeys. Your canonical is the strongest single vote you get, and it is still a vote.

Google uses rel="canonical" as one signal among several when picking which URL to index, and may choose differently [1]. When it does, Search Console reports the URL it chose rather than yours.

THE FIXWhen Google picks differently, do not re-declare the same tag harder. Find the signal contradicting it — the sitemap, the internal links or a redirect — and make them all name the same URL.
WHAT YOU DECLARED
<!-- on /product?color=red -->
<link rel="canonical"
href="https://site.com/product">
A clear instruction, correctly formed.
WHAT GOOGLE MAY REPORT
User-declared canonical
https://site.com/product
Google-selected canonical
https://site.com/product?color=red
Usually because other signals disagreed: internal links, the sitemap, or redirects pointing the other way [2].

02Point at a live, final URL

WHAT IT MEANS“the canonical target”The page you are nominating to be indexed. It has to be a page that actually exists and answers directly, because Google will not chase a nomination through a redirect.

A canonical naming a URL that redirects, 404s or carries a noindex is a nomination Google cannot honour [1], so it falls back to choosing on its own evidence.

THE FIXFetch every canonical target and confirm it returns 200 without redirecting. Then confirm that page carries a self-referencing canonical, because the nominated page not voting for itself is the commonest inconsistency.
NOMINATIONS THAT CANNOT BE HONOURED
canonical → /old → 301 to /new
canonical → /gone → 404
canonical → /draft → noindex
Each one asks Google to index something it has just been told not to index.
WHAT IT SHOULD BE
canonical → /new
GET /new → 200 OK
/new canonical → itself
Live, final, and naming itself. The last line is the one people forget [1].

03One method, one answer

WHAT IT MEANS“conflicting canonicals”Two or more declarations that disagree. Google treats contradictory signals as unreliable rather than picking the first, so both can be discarded.

Google supports the <link> element and the HTTP Link: header [2]. Using several at once, or emitting the tag twice, is how a correct URL ends up ignored.

THE FIXChoose one mechanism and disable the others. The HTML tag is the usual choice; keep the header for PDFs and other non-HTML files, which have nowhere to put a tag.
THE PLUGIN COLLISION
<!-- theme -->
<link rel="canonical" href="/page">
<!-- SEO plugin -->
<link rel="canonical" href="/page?v=2">
Two tags, two answers. View-source and count; there must be exactly one.
THE INVISIBLE ONE
HTTP/1.1 200 OK
Link: <https://site.com/a>; rel="canonical"

<link rel="canonical" href="/b">
The header never appears in view-source, so this contradiction survives every visual check [2].

04Canonicals and hreflang together

WHAT IT MEANS“a language cluster”A set of pages that are translations of one another. Each is a separate page meant to be indexed, not a duplicate to be consolidated away.

Every page in an hreflang cluster should carry a self-referencing canonical, and hreflang annotations must point at canonical URLs [4]. Canonicalising the translations to one language removes them from the index.

THE FIXUse canonicals for duplicates and hreflang for translations; they answer different questions. Where a cluster exists, every member points at itself and lists all the others.
THE MISTAKE THAT DELETES TRANSLATIONS
<!-- on /de/produkt -->
<link rel="canonical" href="/en/product">
→ the German page asks not to be indexed
Translations are not duplicates, and a canonical says they are.
WHAT EACH PAGE SHOULD SAY
<!-- on /de/produkt -->
<link rel="canonical" href="/de/produkt">
<link hreflang="en" href="/en/product">
<link hreflang="de" href="/de/produkt">
Self-canonical, plus the cluster, on every page including itself [4].

05The sitemap is a canonical signal too

WHAT IT MEANS“conflicting signals”The sitemap listing one URL while that page nominates another. Google reads both, so the file quietly votes against your tag.

Google uses sitemaps among the signals for choosing a canonical [1][5]. Listing non-canonical URLs is a common way to weaken the tag without anyone editing a page.

THE FIXGenerate the sitemap from the canonical URL of each page rather than from the crawl. If a URL would not be its own canonical, it does not belong in the file.
THE CONTRADICTION
<!-- sitemap.xml -->
<loc>https://site.com/p?sort=new</loc>

<!-- that page says -->
canonical → https://site.com/p
The sitemap nominates one URL, the page nominates another.
WHAT THE FILE SHOULD CONTAIN
• canonical URLs only
• each returning 200
• each self-referencing
→ the file agrees with the pages
A sitemap listing only canonical URLs reinforces every tag in it [5].

06Cross-domain and syndicated content

WHAT IT MEANS“a cross-domain canonical”A canonical pointing at a different site. Legitimate when the same article appears in more than one place and you want the original credited.

Google supports canonicals across domains for syndicated content, which lets the original keep the ranking [1]. The risk is pointing at a domain you do not control, or being pointed at by one.

THE FIXCheck that every canonical stays on your own domain unless syndication is deliberate. A cross-domain canonical you did not intend hands the page away silently.
SYNDICATION, DONE RIGHT
<!-- on partner.com/article -->
<link rel="canonical"
href="https://you.com/article">
→ credit stays with the original
The partner nominates you. Agree it before syndicating, because you cannot add it yourself [1].
THE ONE TO WATCH FOR
<!-- on your page -->
<link rel="canonical"
href="https://othersite.com/…">
→ you nominated someone else
Usually a template copied between projects, or a staging domain left in the build.

07Canonicals written by JavaScript

WHAT IT MEANS“the rendered canonical”A tag that only exists after scripts run. Google reads the rendered DOM, so it works, but only if rendering succeeds and only after the delay.

Google crawls the HTML, queues the page, then renders it and reads what is there [6]. A canonical injected at render time is therefore slower to take effect and fails entirely when the script does.

THE FIXServe the correct canonical in the HTML rather than replacing it later. If a framework writes it client-side, render it server-side instead, so the first fetch already carries the right answer.
TWO CANONICALS, ONE PAGE
<!-- served HTML -->
<link rel="canonical" href="/default">

<!-- after JS -->
<link rel="canonical" href="/real-page">
Google may act on the first before it ever renders the second [6].
WHAT TO COMPARE
view-source → canonical A
rendered DOM → canonical B
→ they should be identical
Any difference is a window where the wrong URL is the one Google sees.

08Canonicals do not stop a crawl

WHAT IT MEANS“consolidation”Merging the signals of several URLs onto one. It affects which URL is indexed and shown, not whether the others are fetched.

A canonical consolidates ranking signals to the chosen URL [1]. The duplicates are still crawled, so canonicals are not a way to save crawl budget on thousands of parameter URLs.

THE FIXUse canonicals to decide which duplicate wins, not to hide URLs. Where the real problem is crawl waste, reduce the URLs themselves or disallow the parameters that generate them.
WHAT IT DOES AND DOES NOT DO
indexing → one URL kept
ranking → signals consolidated
crawling → unchanged
All three are often assumed to move together. Only the first two do [1].
WHEN TO REACH FOR SOMETHING ELSE
filters nobody should land on
→ robots.txt disallow
pages that should never rank
→ noindex
Different problems, different tools. A canonical answers only the duplicate question.

References

  1. [1]What is URL canonicalization · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/canonicalization
  2. [2]How to specify a canonical URL with rel="canonical" and other methods · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
  3. [3]Redirects and Google Search · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/301-redirects
  4. [4]Tell Google about localized versions of your page · Google Search Centraldevelopers.google.com/search/docs/specialty/international/localized-versions
  5. [5]URL Inspection tool · Search Console Helpsupport.google.com/webmasters/answer/9012289
  6. [6]Understand the JavaScript SEO basics · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics
CITE THIS PAGEKalenux. (2026). Canonical checker: verify rel=canonical on any page. Kalenux SEO Guide. Last reviewed 1 Oct 2026. kalenux.com.tr/seo-canonical-checker
other free tools

Keep checking.

All tools →
one tag, every page it renders

Canonicals are written by templates, so they break by template too.

A canonical is almost never wrong on one page alone. It is wrong in the layout that writes it, and that layout renders every product, every category, every paginated page. Checking one URL proves the tag is wrong. The full audit runs 21 canonical checks across every URL you have and groups the failures by the template that caused them.

01

Where the canonical actually lands

Following each one to its destination: canonicals pointing at redirects, at 404s, at noindex pages, or chaining through several URLs before they stop.

02

Where your signals disagree

The sitemap naming one URL while the canonical names another, hreflang pointing at non-canonical pages, internal links sending authority to the version you did not choose.

03

Where Google disagreed with you

Pages where Search Console reports a different canonical from the one you declared, which is the signal that your hint was not convincing enough.

Run the full auditCreate an account and your first audit is free, up to 500 pages. No card needed.