The Canonical Tag Checker shows which URL a page declares as its preferred version and whether the checked signals contain problems. Enter a public page URL to inspect its HTML canonical links, HTTP Link headers and immediate canonical target. A valid declaration is useful evidence, but it does not confirm indexing or show which URL Google has selected.
Check the exact page URL
Start with the address causing concern, including its query parameters. If an email campaign links to https://example.com/products/blue-shirt?utm_source=email, check that variant rather than only the homepage. Then compare its declared target with the URL you actually want to represent that content.
If the submitted address redirects, the declarations come from its final response. The URL flow helps you distinguish that redirect from a canonical pointing elsewhere.
The checker examines one source and, when a single eligible target can be identified, at most one different target. A self-referencing canonical reuses the source. It reads delivered HTML and HTTP headers without executing JavaScript. It does not crawl your website, compare page content or inspect robots.txt and sitemap files.
Read the canonical checker's results
Read the result together with its coverage. The colors and icons help you find the next action; they are not an SEO score.
| Result | What it tells you | Next action |
|---|---|---|
| Green ✓ | No problems found in the checked signals | Confirm that the declared target matches your intention |
| Red ✕ | A confirmed problem, such as conflicting targets or a target with noindex | Open the finding and repair its cause |
| Yellow ⚠ | A warning, such as a missing, relative or repeated canonical | Decide whether the declaration needs changing |
| Gray — | Data could not be checked | Resolve access or retry; do not assume the target is valid |
“Complete” refers only to the supported source-and-target checks. “Partial” means some pages or declarations could not be fully examined. Read the stated reason before treating the report as confirmation.
A missing canonical is a warning, not proof that a page cannot rank. A timeout is an unavailable check, not proof that the destination returns an error. The analysis details and JSON download let you keep the observed evidence for a later comparison.
Check the canonical declaration
A canonical pointing to another page can be deliberate. For example, if a tracking URL serves the same blue-shirt product page, it can nominate the clean product address. The preferred page can nominate itself. This illustrative HTML belongs inside the page's head:
<link rel="canonical" href="https://example.com/products/blue-shirt">
Before applying that pattern, compare the actual content. A different product, language or substantially different listing should not be consolidated simply because its URL looks similar. A target on another domain also needs an intentional explanation; the checker does not verify content equivalence or ownership.
Inspect where each declaration appears. A canonical link in the HTML body is not a valid head declaration. An HTTP Link header can declare a canonical too, including for a non-HTML document. If HTML and HTTP declarations nominate different eligible URLs, the report flags the conflict rather than choosing one for you. Repeated identical declarations are a separate warning.
Check both the original and resolved URL. A relative path may resolve successfully, but an HTML base URL can affect its destination. Prefer a complete absolute URL and remove fragments from the canonical. These placement and URL recommendations follow Google's canonical documentation.
Check the canonical target
Look beyond the presence of the tag. Does the nominated address return the expected page with HTTP 200? Does it redirect, declare another canonical or contain a noindex directive?
If the target redirects, verify the intended final destination before updating the source. If the target carries noindex, review why a page excluded from indexing is being nominated. The absence of noindex alone does not prove that a page is indexable.
For a canonical chain A → B → C, the checker can read B's declaration of C after inspecting A and B. It does not fetch C. Run C separately before using it as the preferred destination. A loop A → B → A needs a consistent destination instead of circular declarations. RFC 6596 recommends avoiding targets that declare another canonical or return an error.
If the target could not be retrieved, its response and directives remain unverified. Resolve that limitation before deciding that the relationship is healthy.
Fix the cause and confirm the change
- Choose the preferred address for this content. Keep meaningful product, language and pagination differences in mind; do not point unrelated pages at the homepage.
- Update the setting, template or HTTP header that writes the declaration. Remove conflicting writers so the response gives one consistent preference.
- Check the preferred target itself. Review its response, redirects, canonical and noindex directives. Confirm that its content represents the source appropriately. Use Noindex Checker to inspect the page’s HTML and HTTP directives, including their source and applicability to Google web search.
- Retest the original variant. Compare the new declarations, URL flow and coverage with the earlier report, including any query parameters that triggered the problem.
For a property you can access in Search Console, use URL Inspection to compare the user-declared and Google-selected canonicals in indexed data. Its live test cannot predict Google's canonical selection. A repaired response today and Google's stored indexed version are separate observations.
If access remains the question, use the Robots.txt Tester for that URL and crawler. Use the Sitemap Checker to validate your XML file, or the On-Page SEO Checker for broader page signals. These checks complement the canonical report; none replaces a manual review of whether the chosen page is the right representative.
To compare response codes and redirect chains across a list of pages, use the Bulk HTTP Status Checker.