---
title: "Canonical Tag Checker: Find Canonical URL Problems"
description: "Check a page's rel=canonical tag and HTTP header: multiple or relative canonicals, noindex conflicts, and whether the canonical target redirects or 404s."
image: "https://www.blackseoanalyzer.com/static/images/black-seo-analyzer-og-image.png"
canonical: "https://www.blackseoanalyzer.com/en/tools/canonical-tag-checker"
language: "en"
---

# Canonical Tag Checker

Enter a page URL to see the canonical URL it declares in HTML and HTTP headers, whether that canonical is self-referencing, and whether the canonical target returns 200, redirects, or is noindex.

## What this canonical tag checker tests

A canonical tag tells search engines which URL you want indexed when the same content is reachable at more than one address. This tool fetches one page, finds every canonical it declares, and flags the mistakes that make Google ignore the tag or pick a URL you didn't want: missing or empty tags, more than one canonical, tags in the `<body>`, relative or http URLs, fragments and tracking parameters, conflicts with `noindex`, and canonical targets that redirect, return 404, or point somewhere else again.

## What a canonical tag does

The tag goes in the `<head>` of the page:

```
<link rel="canonical" href="https://example.com/dresses/green-dresses">
```

It says: this URL is the representative version of this content. Google groups duplicate URLs together, picks one as canonical, and usually shows that one in search results. Google treats `rel="canonical"` as a strong signal, but [its documentation](https://developers.google.com/search/docs/crawling-indexing/canonicalization) is explicit that a canonical preference is "a hint, not a rule." Redirects are also a strong signal, and listing a URL in a sitemap is a weak one. Google also prefers HTTPS URLs over HTTP ones and URLs that are part of hreflang clusters. When your signals conflict, Google is more likely to choose a different URL than the one you declared.

### Use a self-referencing canonical on pages you want indexed

Google recommends putting a canonical on the canonical page itself, pointing at its own URL. That protects the page when someone links to it with `?utm_source=newsletter` or a session parameter, because each of those variants still declares the clean URL. Duplicate pages, such as a product reached through two category paths, point their canonical at the version you want indexed. Pages that aren't duplicates should never canonicalize to each other. For more on the pages on the other side of that relationship, see [what a non-canonical URL is](https://www.blackseoanalyzer.com/en/blog/what-is-a-non-canonical-url).

### HTML tag or HTTP header

PDFs and other non-HTML files have no `<head>`, so they declare a canonical in the `Link` response header instead:

```
HTTP/1.1 200 OK
Content-Type: application/pdf
Link: <https://www.example.com/downloads/white-paper.pdf>; rel="canonical"
```

HTML pages can use the header too. If you use both, they must point at the same URL. Google says not to specify different canonicals through different methods, and recommends choosing one because keeping two in sync is error prone. A common cause of disagreement is a CDN or server rule adding a header that the CMS doesn't know about.

### Cross-domain canonicals

A canonical can point at another domain. That's useful when the same content is served on two domains you control and you can't redirect one to the other. Google no longer recommends cross-domain canonicals for syndicated articles; its [troubleshooting guide](https://developers.google.com/search/docs/crawling-indexing/canonicalization-troubleshooting) suggests asking syndication partners to block indexing of your content instead. A cross-domain canonical you didn't add is worth investigating: it can come from a copied theme or from injected code on a hacked site.

## How to see which canonical Google chose

In Search Console, run the URL Inspection tool on the page. The indexed result shows the **user-declared canonical** (what your page says) and the **Google-selected canonical** (what Google actually uses). The live test can't tell you which URL Google will select; only the indexed data shows that. Across a whole site, the Page indexing report groups URLs under statuses such as "Alternate page with proper canonical tag" (working as intended) and "Duplicate, Google chose different canonical than user" (Google overrode your tag).

## Common canonical tag mistakes

### Canonicalizing paginated pages to page 1

Page 2 of a category is not a duplicate of page 1. Pointing it at page 1 asks Google to drop the products or articles that only appear on page 2. Google's [pagination guidance](https://developers.google.com/search/docs/specialty/ecommerce/pagination-and-incremental-page-loading) says to give each page its own canonical.

```
<!-- Wrong, on /shoes?page=2 -->
<link rel="canonical" href="https://example.com/shoes">

<!-- Right -->
<link rel="canonical" href="https://example.com/shoes?page=2">
```

This is one case where a [query string in the canonical](https://www.blackseoanalyzer.com/en/technical-seo/metadata-analyzer/canonical-url-has-query-string) is correct.

### Relative URLs and missing schemes

Google supports relative canonicals but recommends absolute URLs. A relative canonical copied to a staging server resolves to the staging URL, and a `<base href>` on the page changes what it resolves to. Worse is a full URL written without its scheme, which browsers and crawlers read as a relative path:

```
<!-- On https://example.com/shop/cupcakes, this resolves to
     https://example.com/shop/example.com/cupcakes -->
<link rel="canonical" href="example.com/cupcakes">

<!-- Right -->
<link rel="canonical" href="https://example.com/cupcakes">
```

### Building the canonical from the request URL

Templates that output the current request URL copy every tracking parameter, session ID and letter-case variant into the canonical, so the tag agrees with whatever URL was requested and consolidates nothing.

```
<!-- Wrong: echoes the request -->
<link rel="canonical" href="https://example.com/post?utm_source=x&utm_medium=email">

<!-- Right: built from the page's stored URL -->
<link rel="canonical" href="https://example.com/post">
```

Fragments are a related problem. Google generally doesn't support them in canonicals, so [remove anything after `#`](https://www.blackseoanalyzer.com/en/technical-seo/metadata-analyzer/canonical-url-has-fragment).

### Pointing at a redirect, a 404 or a noindex page

The canonical target should return 200, without redirecting, and be indexable. A canonical that points at a URL that redirects sends mixed signals; after a URL change, update the canonical to the final URL. A canonical to a 404 or to a page with `noindex` points Google at a page it can't index. This tool fetches the target and checks all three, and also flags chains (A points to B, B points to C) and loops (A points to B, B points back to A).

### Mixing canonical and noindex

A canonical says "index the other URL instead." A `noindex` says "don't index this page." Google recommends against using `noindex` to control canonical selection within a site, because it blocks the page from Search entirely. For duplicates, use the canonical alone:

```
<!-- Conflicting -->
<meta name="robots" content="noindex">
<link rel="canonical" href="https://example.com/product">

<!-- Right for a duplicate -->
<link rel="canonical" href="https://example.com/product">
```

### Multiple tags, empty tags and tags outside the head

When a page has more than one canonical with different URLs, Google has said it will likely ignore all of them. This usually happens when a theme and an SEO plugin each output one. An [empty canonical](https://www.blackseoanalyzer.com/en/technical-seo/metadata-analyzer/empty-canonical-url) usually means a template variable was blank. And Google only reads canonical tags in the `<head>`. That includes a subtle case: Google stops reading the head at the first element that isn't allowed there (anything other than `title`, `meta`, `link`, `script`, `style`, `base`, `noscript` and `template`), so an `<img>` or `<iframe>` injected high in the head can push a canonical below it out of reach. This tool reports where the head ends. If you add the canonical with JavaScript, Google says to set it to the same value as the canonical in the original HTML, or leave it out of the HTML entirely.

## Checking canonicals across a whole site

A single-page check finds template bugs, but canonical problems are usually systematic. To audit a site, crawl it, extract the declared canonical from every page, and compare: pages whose canonical isn't themselves, canonicals that differ from the crawled URL only by case, slash or parameters, and canonical targets that don't return 200 or aren't indexable. Then compare the results with the Page indexing report in Search Console to see where Google disagreed. Our guide on [finding and fixing every broken canonical tag on your site](https://www.blackseoanalyzer.com/en/blog/how-to-find-and-fix-every-broken-canonical-tag-on-your-site) walks through that process.

## Check every page, not just one

These tools look at one URL at a time. bseoa crawls your whole site on your own machine and checks every page for 300+ technical SEO issues across 16 analysis modules.

[Start the 14-day free trial](https://www.blackseoanalyzer.com/en/free-trial)

## More free SEO tools

- [Title & Meta Description Length Checker](https://www.blackseoanalyzer.com/en/tools/meta-description-length-checker)
Type or paste a title and meta description and see, as you type, whether Google or Bing will cut them off, measured in pixels rather than characters.

- [Robots.txt Tester](https://www.blackseoanalyzer.com/en/tools/robots-txt-tester)
Test whether a URL is allowed or blocked for Googlebot, Bingbot, GPTBot or any user agent, and see the exact rule that decided it.

- [XML Sitemap Checker](https://www.blackseoanalyzer.com/en/tools/xml-sitemap-checker)
Find a site's sitemap from its domain, then validate the XML, the URLs in it, lastmod dates and sitemap index files.

- [Schema Markup Validator](https://www.blackseoanalyzer.com/en/tools/schema-markup-validator)
Paste JSON-LD or enter a URL. Get JSON syntax errors with line numbers and a check of the properties Google requires for rich results.

- [Hreflang Checker](https://www.blackseoanalyzer.com/en/tools/hreflang-checker)
Validate a page's hreflang annotations, then fetch each alternate to confirm it links back, returns 200 and isn't canonicalized elsewhere.

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.blackseoanalyzer.com/#organization","name":"Fiscus Technology, LLC","url":"https://www.blackseoanalyzer.com/","logo":"https://www.blackseoanalyzer.com/static/images/black-seo-analyzer.png"},{"@type":"WebSite","@id":"https://www.blackseoanalyzer.com/#website","name":"bseoa","url":"https://www.blackseoanalyzer.com/","publisher":{"@id":"https://www.blackseoanalyzer.com/#organization"}},{"@type":"WebApplication","@id":"https://www.blackseoanalyzer.com/en/tools/canonical-tag-checker#app","name":"Canonical Tag Checker","url":"https://www.blackseoanalyzer.com/en/tools/canonical-tag-checker","description":"See which URL a page declares as canonical, in HTML or HTTP headers, and whether that target actually resolves to an indexable page.","applicationCategory":"DeveloperApplication","operatingSystem":"Any (web browser)","isAccessibleForFree":true,"offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"publisher":{"@id":"https://www.blackseoanalyzer.com/#organization"}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.blackseoanalyzer.com/"},{"@type":"ListItem","position":2,"name":"Free SEO Tools","item":"https://www.blackseoanalyzer.com/en/tools"},{"@type":"ListItem","position":3,"name":"Canonical Tag Checker","item":"https://www.blackseoanalyzer.com/en/tools/canonical-tag-checker"}]}]}
```
