A site migration crawl returns 400 pages flagged for duplicate content: half have no canonical tag, and half point to URLs that no longer exist. The developer or technical marketer running the audit must decide, page by page, whether to add a rel=canonical tag or issue a 301 redirect, and the crawl report doesn't say which.
A canonical tag is an HTML link element, marked rel=canonical, that sits in a page's head section and tells search engines which URL, among a set of duplicate or near-duplicate pages, should be treated as the primary version for indexing and ranking signals.
Below, we break down how you can fix the crawl report with confidence instead of guessing. We’ll cover how to write a correct rel=canonical tag, when to choose it over a redirect for a given page, and which three implementation mistakes cancel it out.
Key takeaways
- Search engines weigh a 301 redirect more heavily than a canonical tag, making it the default choice when a URL should disappear for good.
- A canonical chain that points from page A to B to C rarely resolves cleanly, since crawlers can stop following it midway.
- A self-referencing canonical tag breaks when its URL doesn't exactly match the live page's protocol, trailing slash, or parameters.
- A cross-domain canonical tag works for syndicated content pointing back to its original source, but fails when used to borrow another domain's authority.
- Canonical tags frequently disappear entirely during a content management system (CMS) migration, since the field often lacks a direct equivalent in the destination platform.
What a canonical tag actually does
A canonical tag is a hint, not a command: it asks search engines to treat a set of pages as duplicates and consolidate their signals onto one preferred URL, but the search engine can still choose a different URL if other technical signals disagree.
When search engines honor the tag, links, relevance signals, and authority that would otherwise split across parameterized or tracked URL variants pool onto the representative URL instead.
Google selects that representative URL using HTTPS versus HTTP, redirects, and sitemap inclusion alongside the tag itself. Canonicalization isn't noindex: it names a preferred duplicate; it doesn't block indexing. For the fuller remedy framework, see our guide to keyword cannibalization.
Rel=canonical or a 301 redirect?
Does the old URL need to keep serving users or paid traffic, or should it disappear permanently? TL;DR: Use rel=canonical for the first case and a 301 redirect for the second.
Google treats redirects as the strongest canonicalization signal, ranking them above rel=canonical and sitemap inclusion in its own hierarchy of consolidation signals. When signals conflict, that hierarchy is why a redirect usually overrides a competing canonical tag.
A filtered product listing page, sorted by price and still linked from ad campaigns, needs to stay reachable. Canonicalize it to the default listing page. A pricing page retired after a product rebrand shouldn't exist anymore. Redirect it permanently to the new page instead of canonicalizing it.
Writing a correct rel=canonical tag
A correct rel=canonical tag lives inside the HTML head as a single link element, and its href must be a fully qualified absolute URL, not a relative path.
<head>
<link rel="canonical" href="https://www.example.com/products/widgets/" />
</head>
That format follows RFC 6596, the formal specification behind rel=canonical, so it's a documented web standard rather than a search engine trick.
On a page that isn't a duplicate, the href should still self-reference that page's own clean URL. Doing this locks in your preferred version before duplicates or parameters can dilute it.
Watch for mismatches. An href using http where the site serves https, a bare domain missing www, or a relative path all weaken the signal you're trying to send.
Implementing rel=canonical in Webflow
In Webflow, open a page's settings panel and go to the SEO section, where the Canonical Tag field lets you set or override that page's preferred URL directly.
Webflow generates a self-referencing canonical by default for every page and CMS item. Override it when a CMS collection item gets duplicated across multiple categories or tags and you need one version treated as the original.
Staging pages and duplicated collection items carry the biggest risk. If you clone a template and publish it without manually setting the Canonical Tag field, that new page can inherit the wrong value from the item it was copied from.
👉 For a full breakdown of Webflow's SEO settings, check out our Webflow SEO guide.
3 mistakes that break canonical tags
Technical audits should check first for mismatched self-references, canonical chains, and unsupported cross-domain canonicals, because each pattern sends an unclear preferred-URL signal.
Run a crawl on any live site and you'll likely find all three: hrefs that almost match the resolved URL, canonicals pointing to other canonicals instead of the final destination, and cross-domain tags used for the wrong reason. Each one gets its own broken example (and fix) below.
1. Self-referencing canonicals done wrong
A self-referencing canonical breaks when its href doesn't exactly match the page's resolved protocol, hostname, path, trailing slash, or parameter state. Here's a common version of the mismatch:
<link rel="canonical" href="http://example.com/pricing/" />
If the live page resolves to a clean HTTPS URL with no trailing slash, that tag is pointing search engines to a version that doesn't match what's actually being served. The fix is to make the href match exactly:
<link rel="canonical" href="https://example.com/pricing" />
Self-referencing canonicals remain the right default for most pages. The problem was never the pattern; it's the mismatched value that tells search engines to consolidate signals somewhere other than the page they're currently crawling.
2. Canonical chains that never resolve
A canonical chain forms when page A canonicalizes to page B, and page B canonicalizes to page C, instead of A pointing straight at the actual final URL.
Search engines don't always follow a chain to its end. Google can stop partway through and split consolidation between B and C rather than pooling every signal on C, which is the opposite of what a canonical tag is supposed to do.
The fix is to rewrite A's tag so it skips B entirely:
<link rel="canonical" href="https://example.com/page-c" />
This pattern usually accumulates after repeated redesigns, when old canonical values from a previous URL structure never get updated to reflect the current final destination.
3. Cross-domain canonicals used incorrectly
A cross-domain canonical is legitimate when it points a duplicate or syndicated copy back to its original source, and it breaks the moment you use it to claim authority from a domain your page has no real relationship to.
Pointing your homepage's canonical at a competitor's higher-ranking domain is not a shortcut to their authority. Google evaluates whether the relationship between the two URLs actually holds up.
If nothing else on the web supports that claimed relationship, no internal links, no redirects, no matching content, Google ignores the tag and indexes your page on its own.
You have a guest post or press release running on a partner's site. Set the canonical on that syndicated copy to point to the original URL on your own domain, and the credit consolidates where it belongs.
Canonical tags during migrations and consolidations
Migration audits should isolate stale, missing, and conflicting canonical signals before retired URLs or CMS mappings fragment the site's preferred-URL structure. Domain consolidations, replatforming projects, and CMS migrations all move URLs faster than canonical tags get updated to match.
Three failure modes account for most of the damage:
- Stale canonicals pointing to retired URLs
- Canonicals lost during the CMS switch
- Canonical tags that conflict with redirects
Stale canonicals pointing to retired URLs
Find stale canonicals by checking every href against the live sitemap and flagging destinations that return a 404, redirect, or no longer exist. After a migration, canonical values often get hardcoded during the build and never get re-crawled against the site's new URL structure.
That means a page can launch on the new domain with a canonical tag still pointing at a URL from the old site.
Run a crawl against your live sitemap, pull the response status of every canonical destination, and flag anything that returns a 404, a redirect chain, or no matching URL at all.
Left unresolved during a domain consolidation, those stale canonicals split authority between the old and new domain for months.
Canonicals lost during CMS migrations
Catch canonicals lost during a CMS migration by crawling the new site immediately after launch and flagging every URL with no canonical element at all, not just ones pointing to the wrong page.
This happens because your canonical value often lives in a custom field or a plugin setting on the old platform, and the export-and-import field mapping has no matching slot for it on the new one. The data doesn't transfer wrong. It just doesn't transfer. . . at all.
Crawl every URL on the new domain right after cutover and isolate the missing-canonical set before it sits uncrawled for weeks. If you're moving into Webflow, check the per-page canonical field on each template before you retire the legacy CMS.
Conflicting canonical and redirect signals
A canonical and redirect conflict when they name two different final destinations for the same URL.
- Before: /pricing-old carries a canonical tag pointing to /pricing, but a 301 redirect on that same URL sends crawlers to /plans instead.
- After: the redirect target and the canonical href both resolve to /plans, so every signal on that URL agrees.
This split happens during consolidations because the redirect map and the canonical implementation get built by separate teams on separate timelines, and nobody reconciles them before launch.
Search engines generally follow the redirect over a conflicting canonical, so the mismatch usually resolves itself in practice.
That doesn't make it safe to ignore. Log every canonical or redirect mismatch you find in an audit as a bug ticket, not a monitoring item, and fix it before it compounds across the migration.
Fix canonical tags before they compound
One rogue canonical tag on a single product page is a five-minute fix. The problem shows up when that same error, a stale rel="canonical" pointing at a URL retired during last year's platform migration, gets templated across 4,000 pages instead of caught on one. That's how a cheap mistake turns into a crawl budget Google spends on dead ends instead of your new content.
If you're mid-migration or just inherited a site you didn't build, don't wait for rankings to slide before you check. Pull a crawl this week and cross-reference canonical targets against your current URL map, not the one from before the last replatform.
This is the exact starting point for every Organic Growth Strategy engagement we run at Ten Speed: a technical SEO audit that surfaces stale, missing, and conflicting canonical signals before they get baked into a broader content or migration roadmap. Once that foundation is clean, prioritization actually means something.
Frequently asked questions
What happens if a page has more than one canonical tag?
When a page carries multiple rel=canonical tags, search engines generally ignore all of them rather than picking one to honor. That leaves the page without a reliable canonicalization signal, so ranking authority and duplicate-content decisions default to weaker signals like internal links or sitemaps. Technical teams should treat multiple canonical tags on one page as a bug to fix immediately, since plugin conflicts and templating errors are common causes.
How do you implement a canonical tag in WordPress or Shopify?
Most WordPress sites rely on an SEO plugin, such as Yoast or Rank Math, to manage canonical tags. These plugins add a canonical URL field to each post and page editor and generate a self-referencing tag by default. Shopify handles canonical tags automatically on product and collection pages, but merchants using multiple collections should confirm the canonical points to one preferred URL.
Can canonical tags affect how AI answer engines cite a page?
Canonical tags don't directly instruct answer engines like ChatGPT or Perplexity on what to cite, but they shape which URL search engines index as authoritative. Many AI answer engines lean on that same indexed, canonical version when sourcing information, so fragmented signals can dilute a page's chances of being cited. Cleaning up canonicalization is one of the foundational technical fixes that supports visibility across both traditional search and AI-generated answers.
How long does it take for Google to recognize a corrected canonical tag?
Google needs to recrawl a page before it processes an updated canonical signal. Recrawl timing depends on the page's crawl frequency, which is shaped by site authority and how often that URL typically changes. High-priority pages with strong internal linking and frequent updates often get recrawled within days, while low-priority or rarely linked pages can take weeks.
Do canonical tags need to match hreflang tags on multilingual pages?
Canonical tags and hreflang tags serve different purposes, so each localized page should carry a self-referencing canonical rather than pointing to another language version. Pointing every translated page's canonical at one master URL tells search engines to treat the other versions as duplicates, removing them from local search results. Hreflang tags then handle the job of telling search engines which language or regional version to serve, working alongside self-referencing canonicals rather than replacing them.
Discover how we can help
Book a call with us and we’ll learn all about your company and goals.
If there’s a fit, we will put together a proposal for you that highlights your opportunity and includes our strategic recommendations.




