Skip to content
SERPCompass

Canonical tags that are missing, conflicting or pointing at the wrong URL

Give every indexable page one canonical tag: a link element with rel="canonical" in the page's head, holding the full https address of the URL you want search engines to index, usually the page's own. Declare it once, in one place, and point it at a live page that answers 200, not a redirect or an error. Google treats it as a strong hint, not a rule.

Last updated 28 October 2026, when every step was checked against the vendor's documentation.

Why it matters

Many sites answer the same content at more than one address: with and without www, over http and https, or with tracking parameters such as ?utm_source=newsletter added. Google groups such duplicates, picks one URL to show in results, the canonical, and crawls the others less often. A rel="canonical" link tells it which URL you prefer. Google calls that a strong signal, but a hint, not a rule: it may still choose another URL.

Google does not require a canonical; without one, it picks a version itself. It does recommend a self-referencing canonical on the preferred page, and SERPCompass flags indexable pages without one because the tag states your choice instead of leaving it to a guess. Pages marked noindex are left out of all five canonical checks.

A canonical only helps when it is unambiguous. Google asks you not to name different canonical URLs for the same page by different methods, and its 2013 guidance on common mistakes says that when a page declares more than one, all of them are likely to be ignored. Two usually appear when a theme and an SEO plugin each print one, or when the HTML says one URL and the Link HTTP header, or a script that runs after the page loads, says another.

The target has to be a page worth indexing. Google's guidance asks you to check that it exists and is not an error page, and the canonical link specification (RFC 6596) says not to point at a URL that returns an error or permanently redirects. A canonical that names a redirect, a 404 or a server error sends two contradictory instructions; SERPCompass treats it as one search engines are likely to ignore, so the page is counted as standing for itself.

Google supports relative URLs in a canonical but recommends absolute ones, because relative ones can cause problems later. example.com/page without https:// is read as a path on your own site, and a relative canonical on a page copied to another host, such as a staging copy, points at that host.

A canonical on another domain asks search engines to index that site's page instead of yours. That is deliberate when the same content lives on two sites and you prefer the other copy; it is a mistake when a template, an old domain or a staging address was left in the tag. Google's troubleshooting guide also names a cross-domain canonical inserted by attackers as one result of a hacked site.

In SERPCompass a correct canonical also changes the counts: a page whose one canonical names another live page of your site is treated as that page's copy, so a tracking-parameter variant is not reported again as a duplicate title or description.

SERPCompass also lists every page whose one canonical names another URL, as a notice that never lowers your score, because the list is worth a look. A canonical names the URL you want people to see in search results, so for a copy, such as a page with tracking parameters or a print version, pointing at the original is right; Google also asks you to link to the canonical URL, not the copy, within your site. It is a mistake when the listed page should appear in results itself, such as a product, an article or page 2 of a list: give it a canonical that points at itself. Search Console's URL Inspection tool shows the canonical you declared and the one Google selected.

The audit findings this guide fixes: Missing canonical tag; Conflicting canonical URLs; Canonical points to a broken or redirecting URL; Relative canonical URL; Canonical points to another domain; Pages canonicalised to another URL.

Find every page with this problem

Run the free scan on your domain. It reads the canonical of every page it crawls, from the HTML and from the Link HTTP header, notes when one names a URL that redirected or failed during the crawl, and shows your most urgent findings with the number of pages each affects; the Gap Report and a SERPCompass workspace list the affected pages themselves, and also list the pages whose canonical names another URL, for you to confirm. To check one page by hand, view its source and search for canonical: there should be exactly one <link rel="canonical">, inside the <head>, with a full https:// address. The Link header is in the browser's developer tools, under Network, in the page's response headers. In Google Search Console, the URL Inspection tool shows the canonical you declared and the one Google selected.

Scan my site free

How to fix it on your platform

Choosing between language versions with hreflang, and setting up redirects, are separate jobs with their own guides.

WordPress (no SEO plugin)

  1. Know what WordPress does on its own: its rel_canonical() function, run on the wp_head hook, prints a canonical on single items only: posts, pages, attachments and other single entries. The blog's post list and the category, tag, author and date archives get none, so the scan reports them as missing a canonical.
  2. Check that a classic theme calls wp_head() just before </head>, usually in header.php: that is where WordPress prints the canonical.
  3. To give the archives a canonical too, use an SEO plugin: Yoast SEO, for one, adds canonical tags to pages and archives by default (steps below).
  4. If the theme prints its own <link rel="canonical"> in header.php, the page can end up with two that disagree. Remove the theme's line in a child theme, so the next theme update does not bring it back.
  5. A developer can change the URL WordPress prints with the get_canonical_url filter, available since WordPress 4.6.

Sources: rel_canonical() (WordPress developer reference); default-filters.php (WordPress source); wp_head() (WordPress developer reference); rel=canonical: the ultimate guide to canonical URLs (Yoast); Child themes (WordPress theme handbook); wp_get_canonical_url() (WordPress developer reference).

WordPress with Yoast SEO

  1. Leave Yoast's own canonicals in place: it adds canonical tags to pages and archives by default, with nothing to switch on.
  2. Expect no canonical on a page set to noindex: Yoast leaves it out there on purpose, and the scan does not count noindex pages as missing one.
  3. To point a post, page, category or tag at a different URL, open it in the editor and, in the Yoast SEO sidebar, open Advanced.
  4. Type the full address into the Canonical URL field, including https://, and www if your site uses it.
  5. Click Publish, Save or Republish.
  6. If another plugin or the theme also prints a canonical, remove that one, or ask a developer to adjust Yoast's output with its wpseo_canonical filter. Keep exactly one source.

Sources: rel=canonical: the ultimate guide to canonical URLs (Yoast); How to change the canonical URL in Yoast SEO for WordPress (Yoast).

WordPress with Rank Math

  1. Leave the default in place: even if you never fill in the field, Rank Math sets the post's own URL as its canonical.
  2. To change it, open the post or page in the editor and click the Rank Math icon at the top right of the screen to open its tabs.
  3. Open the Advanced tab and type the full URL, starting with https://, into Canonical URL.
  4. Save or update the post.

Sources: Advanced tab in Rank Math's meta box (Rank Math); General tab in the meta box (Rank Math).

Shopify

  1. Know the default: themes from the Shopify Theme Store already print canonical URLs, with the line <link rel="canonical" href="{{ canonical_url }}"> in the theme's layout file, usually theme.liquid in the Layout folder.
  2. Before you edit anything, duplicate your theme as a backup. Then, from your Shopify admin, go to Online Store, click the ... menu and select Edit code.
  3. Open theme.liquid and search for canonical. If there is no such line, as in some third-party themes, add <link rel="canonical" href="{{ canonical_url }}"> just before </head> and click Save.
  4. If a page's source shows two canonicals, find the second one in theme.liquid or a snippet it includes and delete it, keeping the {{ canonical_url }} line.
  5. To point one product, collection, page or blog post at a different URL, Shopify's own guide adds a URL-type metafield and changes the canonical line to use it, with canonical_url as the fallback.

Sources: How to set a canonical URL for a Shopify page using metafields (Shopify); Editing theme code (Shopify Help Center); canonical_url (Shopify Liquid reference).

Wix

  1. Leave the default in place: Wix gives every page a canonical that points at the page's own URL, and recommends not changing it.
  2. To point a page at a different URL, open the Wix Editor, click Pages & Menu on the left, click the More Actions icon next to the page and choose SEO basics.
  3. Click the Advanced SEO tab, then Additional Tags, then the More Actions icon next to canonical, and select Edit.
  4. Type the full URL under Tag Value and click Apply.
  5. Click Publish at the top right of the editor.
  6. Wix warns that a page whose canonical you change may disappear from your sitemap. To undo the change, follow the same path, click Reset to Default and then Apply.

Sources: Changing the canonical tags for your site's pages (Wix Help Center); Default SEO settings (Wix Help Center); Adding SEO title tags and meta descriptions to your pages (Wix Help Center).

Squarespace

  1. Leave Squarespace's own canonicals in place: it writes them itself, for example naming the static address of a blog's filtered tag and category pages, such as /blog/category/dogs, as the one to index, and asking Google to index your domain's root rather than the /home copy of your homepage. Its help centre documents no setting for changing them.
  2. If Search Console lists your /home URL as an alternate page with proper canonical tag, leave it: Squarespace says no change is needed.
  3. If the scan reports conflicting canonicals, open the Code Injection panel, delete any <link rel="canonical"> from the Header field and click Save. Code there is added to the <head> of every page, so a canonical in it gives every page a second one.
  4. Then check each affected page: hover over it in the Pages panel, click the gear icon, click Advanced and delete any canonical from Page Header Code Injection.

Sources: How blog tags and categories appear in search (Squarespace Help Center); Understanding Google SEO emails and console errors (Squarespace Help Center); Customize parts of your site with code injection (Squarespace Help Center); Editing page titles (Squarespace Help Center).

Webflow

  1. In Site settings, open the SEO tab and enter your site's address in Global canonical tag URL, for example https://www.example.com. Webflow then gives every page a self-referencing canonical: that address plus the page's slug.
  2. Write it exactly as your default domain: with https://, with www if your default domain uses it, and with no slash at the end, which would give every subpage a double slash such as //contact.
  3. Save, then publish the site: the canonicals are not live until you do.
  4. To point one static page at a different URL, open its Page settings with the cog icon and, in SEO settings, type the full URL into Page canonical URL; it overrides the global one for that page. Save and publish.
  5. If you add canonicals in custom code or through a tag manager instead, clear the Global canonical tag URL, or every page will carry two.

Sources: Set canonical tags to improve SEO (Webflow Help Center); Site-level SEO (Webflow Way); How to use canonical tags to improve your site's SEO (Webflow Blog).

Plain HTML

  1. Put one <link rel="canonical" href="..."> inside the <head> of every indexable page, as early in the head as you can. Google only accepts it in the <head>.
  2. Write the full address, scheme and host included, such as https://www.example.com/services/, never /services/ or example.com/services/.
  3. On the preferred page, point the canonical at the page itself; on a copy, such as a print version, point it at the preferred page.
  4. Point it at the final URL: one that answers 200 itself, not one that redirects, returns an error or carries noindex. Leave out #fragments.
  5. For a PDF or another file with no <head>, send the canonical as an HTTP header instead: Link: <https://www.example.com/brochure.pdf>; rel="canonical". Never send a header and an element that name different URLs.
  6. If JavaScript builds your pages, put the canonical in the HTML the server sends and make sure no script changes it afterwards.

Sources: How to specify a canonical URL with rel="canonical" and other methods (Google Search Central); 5 common mistakes with rel=canonical, 2013 (Google Search Central Blog); RFC 6596: The Canonical Link Relation (IETF).

Examples

  • Bad
    <!-- on https://www.example.com/services/ -->
    <link rel="canonical" href="example.com/services/">

    No https://, so it is a relative path: it resolves to https://www.example.com/services/example.com/services/, a page that does not exist.

  • Bad
    <link rel="canonical" href="/services/">

    Relative. It works on this host, but breaks when the page is copied or served on another one.

  • Bad
    <head>
      <link rel="canonical" href="https://www.example.com/services/">
      ...
      <link rel="canonical" href="https://www.example.com/services/?ref=nav">
    </head>

    Two canonicals naming different URLs, typically one from the theme and one from a plugin. Search engines are likely to ignore both.

  • Bad
    <!-- on https://www.example.com/services/ -->
    <link rel="canonical" href="http://example.com/services">

    Old scheme and host: if that address redirects to the https://www page, the canonical points at a redirect.

  • Bad
    <!-- on https://www.example.com/services/ -->
    <link rel="canonical" href="https://staging.example.net/services/">

    A staging address left in a template: it asks search engines to index another domain instead of this page.

  • Good
    <!-- on https://www.example.com/services/ -->
    <link rel="canonical" href="https://www.example.com/services/">

    One tag, absolute, pointing at the page itself.

  • Good
    <!-- on https://www.example.com/services/?utm_source=newsletter -->
    <link rel="canonical" href="https://www.example.com/services/">

    The tracking-parameter copy names the clean URL, so the two are treated as one page.

  • Good
    Link: <https://www.example.com/brochure.pdf>; rel="canonical"

    For a file with no <head>, the canonical travels as an HTTP header.

Common mistakes

  • Copying a page or template from another site and keeping its canonical, so your page asks search engines to index the other site's copy.
  • Running two SEO plugins, or a plugin and a theme that each print a canonical, so every page ends up with two.
  • Pointing many pages' canonicals at the home page. Google's guidance is that most of the main text of a duplicate should also appear on its canonical page, and that a canonical between pages that are only topically similar may be disregarded.
  • Pointing page 2, 3 and later of a paginated list at page 1. They are not copies of page 1, and Google says this keeps their content from being indexed: give each its own canonical.
  • Moving to https:// or a new domain and leaving canonicals on the old addresses, so every canonical points at a redirect.
  • Using noindex or a robots.txt block to choose between duplicates. Google advises against both for this: noindex removes the page from Search entirely, and a blocked URL can still be indexed without its content.
  • Setting a canonical with JavaScript on a page whose HTML already has one, which leaves two values to choose from.
  • Linking from your menus and articles to a copy, such as a URL with a tracking parameter, when its canonical names another URL. Google asks you to link to the canonical URL within your site.

Questions and answers

Does every page need a canonical tag?

Google does not require one: if a page has none, Google picks the canonical itself. It does recommend a self-referencing canonical on the preferred page, and SERPCompass flags indexable pages without one, because the tag states your choice instead of leaving it to a guess. Pages set to noindex do not need one, and our scan does not count them.

Does Google always follow the canonical tag?

No. Google calls it a hint, not a rule. It lists redirects, then canonical links, as strong signals and sitemaps as a weak one, and it may choose a different URL, for example when the pages are not really duplicates. The URL Inspection tool in Search Console shows the canonical you declared and the one Google selected.

Can a canonical tag point to another domain?

Yes. Google has supported cross-domain canonicals since 2009, but such a tag asks search engines to index the other site's page instead of yours, so it must be deliberate. For articles other sites republish, Google no longer recommends relying on a canonical: it says the most effective solution is for the republishing site to block indexing of its copy.

What does Alternate page with proper canonical tag mean in Search Console?

The page names another URL as its canonical and Google has indexed that URL, so results usually show that one instead. Google says there is nothing you need to do. Act only if this page should appear in results in its own right: then its canonical should point at itself.

Should I use a canonical tag or a redirect?

Redirect when the old address should stop serving the page, for example after you move a page or switch to https: Google treats a redirect as a strong signal and recommends it only for retiring a duplicate. Use a canonical when both addresses must keep working, such as a page with tracking parameters or a print version.

Sources

Every step above was checked against these documents on 28 October 2026. Vendors change their menus; if a step no longer matches, the vendor's page is the authority.

Start with a free scan of your site.

Two to five minutes, no account. You get your three most urgent findings, and the exact count of everything else.

Free, 2–5 minutes, no account needed.