Enter a public URL or paste HTML to see what each canonical tag actually declares. Resolve relative URLs, expose base-tag surprises, and compare the result with the URL you intended.
Live URL + local HTMLNo accountSource HTML only
XML and XHTML aren't supported. The checker doesn't render JavaScript or check Google indexing.
Check a live URL
Or inspect pasted HTML
Pasted HTML stays in this browser. It isn't uploaded, and its JavaScript doesn't run.
Try an example:
Declaration report
Observed HTTP response
HTTP Link headers are listed separately, not merged into these findings.
Canonical link elements found in the supplied HTML
# / location
Raw href
Resolved target
Assessment
Markup for your intended canonical
Your preference as markup. The destination isn’t validated.
This checks declarations only. Robots, page content, and Google’s selected canonical need separate review. “No declaration issues” isn’t proof of indexability.
Three URLs, three different questions
The document URL identifies where this HTML is served. A relative canonical uses this URL, unless a base element changes resolution. HTML base URL rules.
The declared canonical is the target expressed by your markup. It can legitimately differ from the document URL, for example when consolidating tracking parameters.
The Google-selected canonical is the representative Google chose during indexing. A declared canonical is a preference; Google can choose a different URL. Google's canonical selection explanation. Find it in Search Console's indexed URL Inspection data; the live test can't predict that choice. Read Google's explanation.
What to fix first
Resolve missing or unusable href values and declarations outside the parsed head.
Keep one canonical link relation, as RFC 6596 advises. A duplicate of the same target is redundant; two different targets disagree.
Check the resolved URL against your intended URL, including its path case, query string, and trailing slash.
Verify the destination separately. Check for a successful response, appropriate content, and consistent canonical signals.
Cross-domain declarations are permitted. They deserve a content and ownership review, rather than an automatic failure. RFC 6596.
Methodology and reproducible checks
The fetch service accepts public HTTP(S) pages, follows up to five redirects, and reads at most 1 MB of source HTML. An oversized response, unsupported content, a timeout, or a fetch failure produces an error rather than a partial verdict.
The response may differ from a browser or Googlebot response. Login-only pages and JavaScript-generated canonical tags aren't supported.
The checker parses HTML into a detached document, identifies canonical link tokens on HTML elements, resolves targets, then compares declarations. The document URL is the fallback. When base elements have an href, the first HTML base href in document order governs resolution. A misplaced body base still affects resolution and is flagged for review. HTML base element specification and document base URL rules.
SVG and MathML elements named link aren't HTML canonical declarations. HTML namespace definitions. Findings separate syntax errors, review items, and information. The rule references below distinguish Google-specific behavior from HTML parsing.
Download the same input cases used by this tool's fixture runner. Each case includes its input and the expected finding codes. The runner calls the checker and compares those codes; it doesn't contact a website.
A source declaration in practice
A capture on 8 September 2026 fetched 16 URLs from this site's pre-sprint sitemap once each using Python urllib, following redirects and parsing source HTML. All 16 returned HTTP 200 and 16 contained exactly one canonical declaration. The capture covers one owned site; it isn't a representative sample of the web.
No. Google can select a canonical without an explicit declaration. This checker reports absence as information, not an automatic failure. A deliberate declaration is useful when managing duplicate or very similar pages. Google's canonical guidance.
Are relative canonical URLs invalid?
Google supports relative URLs but recommends absolute URLs. This checker resolves a relative target and shows the result, then flags it for review. A base tag or a staging-domain URL can make the resolved target surprising. Canonical URL best practices.
Why was my canonical annotation marked as ignored?
Google doesn't use canonical annotations that also carry hreflang, lang, media, or type attributes. Keep alternate-language and media annotations separate. Google also requires the HTML canonical link element to be in the head. Supported annotations.
Should every page point to the homepage?
Only if the homepage actually represents duplicate content or a superset. Canonical targets should represent the source content. Pointing unrelated pages or later pagination pages at a page that lacks their content is inappropriate. Canonical link relation, sections 3–5.
Does this validate my HTTP canonical header?
No. Live mode displays HTTP Link headers for separate review. A server can declare a canonical in an HTTP Link response header, including for PDFs. Check that header against your HTML declaration, and keep sitemap and canonical signals consistent. HTTP Link method.