Technical SEO skill 05 of 13
Canonicalization and Duplicate Content SKILL.md
The Canonicalization and Duplicate Content skill makes Claude, Codex or another AI agent find duplicate and near-duplicate URLs and get Google and Bing to choose the version you want. It lines up every signal, from rel=canonical and redirects to internal links, sitemaps, hreflang and parameter handling, because a canonical tag is only a hint and Google picks its own canonical when signals disagree.
canonicalization/SKILL.md, version 1.1.0, 1,755 words.
By Afeez Adebayo, Marketing, SEO & Growth Expert with 10+ years of experience.
Created 9 October 2026. Updated 10 October 2026. Free to use under CC BY 4.0.
Google groups duplicate and near-duplicate URLs together and picks one as the canonical: the version it indexes, ranks and credits with signals. rel="canonical" is a strong hint in that choice, not a command. When your redirects, links, sitemaps and hreflang point one way and your canonical tag points another, Google decides for itself, and it often picks the URL you least want, such as a tracking-parameter version.
This skill makes every signal agree, so the URL you choose is the URL that ranks.
Operating principles
- One preferred URL per piece of content, decided once and written down (host, protocol, trailing slash, case, parameters).
- Signals must agree. Redirects, canonicals, internal links, sitemaps and hreflang all point to the preferred URL.
- Use the strongest tool that fits. If a duplicate has no reason to exist, redirect it. If people need it, canonicalise it.
- Different content isn't duplicate. If two pages serve different needs, make them clearly different and let both stand.
- Check Google's choice, not only your tag. URL Inspection shows the Google-selected canonical; that is the truth that matters.
Signals, strongest first
| Signal | Strength | Notes |
|---|---|---|
| 301 or 308 redirect | Strongest | The duplicate stops existing for users and crawlers |
rel="canonical" (HTML head or HTTP Link header) | Strong hint | Use the header for PDFs and other non-HTML files |
| Sitemap inclusion | Weaker hint | List canonicals only |
| Internal links | Weaker hint, but adds up | Thousands of links to a parameter version can outweigh a tag |
| hreflang references | Supporting | Must reference canonical URLs |
| HTTPS and clean URLs | Tie-breakers | Google prefers HTTPS and simpler URLs when other signals are equal |
When to use, and when not to
Use it for duplicate-content warnings, wrong URL versions ranking, parameter and path variants, near-duplicate programmatic pages, syndication, and canonical setup on any new template.
Don't use it for faceted navigation strategy as a whole (faceted-navigation-parameters), redirect implementation detail (redirects-status-codes) or keyword cannibalisation between different pages, which is a content decision.
Inputs to ask for, in one message
- Search Console examples for "Duplicate, Google chose different canonical than user", "Duplicate without user-selected canonical" and "Alternate page with proper canonical tag".
- A crawl with status, canonical (HTML and header), meta robots, inlinks, and a content hash or near-duplicate similarity score.
- The CMS and its URL rules: trailing slashes, case, parameters, how categories and filters build URLs.
- The preferred URL format, if the business has one.
- Systems that link to the site with parameters: email, ads, widgets, partners.
Raw SKILL.md file
This is the exact file agents read, including the credit header and licence notice. Save it as canonicalization/SKILL.md.
--- name: canonicalization description: "Find duplicate and near-duplicate URLs and make Google and Bing choose the canonical you want, by aligning rel=canonical, redirects, internal links, sitemaps, hreflang and parameter handling. Covers www and non-www, HTTP and HTTPS, trailing slashes, case, tracking and sort parameters, product paths inside collections, pagination, syndication, near-duplicate location or currency pages, and canonicals with hreflang. Use whenever someone mentions duplicate content, 'Google chose different canonical than user', 'Duplicate without user-selected canonical', 'Alternate page with proper canonical tag', wrong URLs ranking, pages competing with each other, or asks how canonical tags work." license: CC-BY-4.0 metadata: author: Afeez Adebayo author_url: https://afeezadebayo.com author_linkedin: https://www.linkedin.com/in/afeez-adebayo/ author_x: https://x.com/za_icon source: https://afeezadebayo.com/skills-md/marketing/technical-seo/canonicalization/ category: marketing subcategory: technical-seo version: "1.1.0" created: "2026-10-09" updated: "2026-10-10" --- # Canonicalization and Duplicate Content Google groups duplicate and near-duplicate URLs together and picks one as the canonical: the version it indexes, ranks and credits with signals. `rel="canonical"` is a strong hint in that choice, not a command. When your redirects, links, sitemaps and hreflang point one way and your canonical tag points another, Google decides for itself, and it often picks the URL you least want, such as a tracking-parameter version. This skill makes every signal agree, so the URL you choose is the URL that ranks. ## Operating principles 1. **One preferred URL per piece of content,** decided once and written down (host, protocol, trailing slash, case, parameters). 2. **Signals must agree.** Redirects, canonicals, internal links, sitemaps and hreflang all point to the preferred URL. 3. **Use the strongest tool that fits.** If a duplicate has no reason to exist, redirect it. If people need it, canonicalise it. 4. **Different content isn't duplicate.** If two pages serve different needs, make them clearly different and let both stand. 5. **Check Google's choice, not only your tag.** URL Inspection shows the Google-selected canonical; that is the truth that matters. ## Signals, strongest first | Signal | Strength | Notes | |---|---|---| | 301 or 308 redirect | Strongest | The duplicate stops existing for users and crawlers | | `rel="canonical"` (HTML head or HTTP `Link` header) | Strong hint | Use the header for PDFs and other non-HTML files | | Sitemap inclusion | Weaker hint | List canonicals only | | Internal links | Weaker hint, but adds up | Thousands of links to a parameter version can outweigh a tag | | hreflang references | Supporting | Must reference canonical URLs | | HTTPS and clean URLs | Tie-breakers | Google prefers HTTPS and simpler URLs when other signals are equal | ## When to use, and when not to Use it for duplicate-content warnings, wrong URL versions ranking, parameter and path variants, near-duplicate programmatic pages, syndication, and canonical setup on any new template. Don't use it for faceted navigation strategy as a whole (`faceted-navigation-parameters`), redirect implementation detail (`redirects-status-codes`) or keyword cannibalisation between different pages, which is a content decision. ## Inputs to ask for, in one message 1. Search Console examples for "Duplicate, Google chose different canonical than user", "Duplicate without user-selected canonical" and "Alternate page with proper canonical tag". 2. A crawl with status, canonical (HTML and header), meta robots, inlinks, and a content hash or near-duplicate similarity score. 3. The CMS and its URL rules: trailing slashes, case, parameters, how categories and filters build URLs. 4. The preferred URL format, if the business has one. 5. Systems that link to the site with parameters: email, ads, widgets, partners. ## Workflow ### Step 1. Fix host and protocol Choose HTTPS and either www or non-www. The other three combinations redirect to the preferred one in a single hop. Test all four from the command line: ```bash for u in http://example.com http://www.example.com https://example.com https://www.example.com; do echo "$u"; curl -sIL "$u/" | grep -iE "^HTTP|^location"; done ``` ### Step 2. Fix path variants Trailing slash versus none, uppercase versus lowercase, `/index.html` and `/index.php`, double slashes, and the same page reachable under two folders. Redirect each to one form. Set the rule in one place (server or framework configuration), not per page. ### Step 3. Handle parameters by type | Parameter type | Example | Treatment | |---|---|---| | Tracking | `utm_source`, `gclid`, `fbclid` | Canonical to the clean URL; never link internally with them | | Sort and view | `sort=price`, `view=grid` | Canonical to the clean URL; consider blocking crawl if volume is high | | Session | `sessionid=` | Remove from URLs; canonical to clean URL | | Pagination | `page=2` | Self-canonical on each page | | Filters that change content | `colour=black` | Decide with `faceted-navigation-parameters` | ### Step 4. Self-referencing canonicals everywhere Every indexable page outputs exactly one absolute canonical pointing to itself, in the server-rendered HTML. JavaScript-injected canonicals that differ from the server version create conflicts. ### Step 5. Find near-duplicates Use your crawler's near-duplicate report or compare main-content similarity. Pages above roughly 90% shared main content (location or currency pages that swap one word, product variants with identical copy) are at risk. Either make each page clearly different with real local or specific information, consolidate them into one page with options, or keep one and redirect the rest. ### Step 6. Check Google's choice For each duplicate group, inspect a sample URL. Where the user-declared and Google-selected canonicals differ, list every signal that points to Google's choice. Fix those signals, not just the tag. ## Diagnosing a disagreement, one URL at a time 1. Note the user-declared and Google-selected canonical in URL Inspection. 2. Fetch both URLs and compare status codes, canonical tags (HTML and header) and main content. 3. Count internal links to each version in your crawl. 4. Check which version the sitemap and hreflang list. 5. Check for a redirect from your preferred URL to the other one; that overrides everything. 6. Fix what disagrees, request indexing for a sample and validate the fix. Large sites take weeks. ## Decision table | Situation | Use | |---|---| | Old URL with no reason to exist | 301 redirect | | Variant users need (print view, sort order, tracking) | Canonical to the main URL | | Country or language versions with real differences | Self-canonical on each, plus hreflang | | Thin duplicate with no user value | Remove (410), or merge and redirect | | Paginated series | Self-canonical on each page, crawlable links between pages | | Syndicated copy on a partner site | Cross-domain canonical to the original if the partner agrees; otherwise a link back | | PDF that duplicates an HTML page | `Link: <https://example.com/page/>; rel="canonical"` header on the PDF | ## Canonicals and hreflang together Each language or country version is its own canonical. Never point the French page's canonical at the English page; that tells Google the French page is a duplicate and it may drop it from French results. Each version carries a self-referencing canonical and hreflang tags listing every alternate, including itself, all pointing at canonical URLs. ## Worked example A payments site serves `/send-money/uk-to-nigeria/` and `/send-money/uk-to-nigeria?currency=GBP`. The rate widget and marketing emails link to the parameter version, so after a few months Google selects it as canonical even though the clean URL declares itself canonical. The fix: change widget and email links to the clean URL, keep the self-canonical, keep the parameter version out of sitemaps, and canonicalise all parameter versions to the clean URL. Four weeks later URL Inspection shows the clean URL selected, and the parameter version stops appearing in results. ## Platform notes - **WordPress:** SEO plugins output canonicals automatically. Check the theme or a second plugin doesn't add another; two canonicals can make Google ignore both. Paginated archives should be self-canonical. - **Shopify:** products are reachable at `/products/handle` and inside collections at `/collections/name/products/handle`. Themes canonicalise to `/products/handle`; make collection templates link there too. - **Next.js:** set `trailingSlash` once in configuration, generate canonicals from the final URL with the Metadata API, and render them on the server. - **Webflow and hosted builders:** set the global canonical URL in site settings and check CMS collection pages output self-canonicals. ## Ticket template for developers ``` Title: [SEO] Enforce one URL format and self-canonicals Why: 12,400 URLs show "Google chose different canonical" (Search Console, 9 Oct 2026); internal links mix trailing-slash and non-slash forms. Change: 301 non-slash to slash URLs in one hop; output one absolute self-canonical in server HTML on all indexable templates; strip utm_* from internal links. Acceptance tests: - /pricing redirects once to /pricing/ (301). - View-source of 5 templates shows exactly one canonical, absolute, matching the URL. - Crawl shows 0 internal links to redirecting or parameter URLs. Metric: count of "Google chose different canonical" URLs, re-check after 4 weeks. ``` ## Output format ``` # Canonical audit: <site>, <date> ## Summary ## Preferred URL rules (host, protocol, slash, case, parameters) ## Duplicate groups | Group | URLs | Declared canonical | Google canonical | Conflicting signals | Fix | ## Near-duplicate templates and decision (differentiate, consolidate, remove) ## Fix list with owners, acceptance tests and re-check dates ``` ## Common mistakes - Canonicals pointing to redirected, noindex or 404 URLs. - Two canonical tags on one page from a theme and a plugin. - Canonicalising every page to the homepage. - Canonicalising page 2 of a series to page 1. - Using noindex or robots.txt to fix duplication; both stop Google from seeing your canonical signals. - Pointing hreflang alternates' canonicals at one language. ## Questions to ask before you recommend changes - Which URL format does the business want long term? - Which systems create links with parameters, and can they change? - Are some near-duplicates intentional, such as country versions with different prices or rules? ## Self-check before you answer - Do all signals in my plan point to the same URL? - Did I check Google's selected canonical, not just the tag? - Did I separate true duplicates from pages that only look similar? - Does every fix have acceptance tests and a re-check date? ## Official documentation - How to specify a canonical URL: https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls - What is canonicalization: https://developers.google.com/search/docs/crawling-indexing/canonicalization - Troubleshoot canonicalization: https://developers.google.com/search/docs/crawling-indexing/canonicalization-troubleshooting - URL structure best practices: https://developers.google.com/search/docs/crawling-indexing/url-structure - Localised versions (hreflang): https://developers.google.com/search/docs/specialty/international/localized-versions --- Created by Afeez Adebayo, Marketing, SEO & Growth Expert Website: https://afeezadebayo.com LinkedIn: https://www.linkedin.com/in/afeez-adebayo/ X: https://x.com/za_icon Source: https://afeezadebayo.com/skills-md/marketing/technical-seo/canonicalization/ Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). You may copy, share and adapt this skill, including for commercial use, as long as you credit Afeez Adebayo and link to the source URL above. Keep this notice in any copy or adapted version.
Workflow
Step 1. Fix host and protocol
Choose HTTPS and either www or non-www. The other three combinations redirect to the preferred one in a single hop. Test all four from the command line:
for u in http://example.com http://www.example.com https://example.com https://www.example.com; do
echo "$u"; curl -sIL "$u/" | grep -iE "^HTTP|^location"; doneStep 2. Fix path variants
Trailing slash versus none, uppercase versus lowercase, /index.html and /index.php, double slashes, and the same page reachable under two folders. Redirect each to one form. Set the rule in one place (server or framework configuration), not per page.
Step 3. Handle parameters by type
| Parameter type | Example | Treatment |
|---|---|---|
| Tracking | utm_source, gclid, fbclid | Canonical to the clean URL; never link internally with them |
| Sort and view | sort=price, view=grid | Canonical to the clean URL; consider blocking crawl if volume is high |
| Session | sessionid= | Remove from URLs; canonical to clean URL |
| Pagination | page=2 | Self-canonical on each page |
| Filters that change content | colour=black | Decide with faceted-navigation-parameters |
Step 4. Self-referencing canonicals everywhere
Every indexable page outputs exactly one absolute canonical pointing to itself, in the server-rendered HTML. JavaScript-injected canonicals that differ from the server version create conflicts.
Step 5. Find near-duplicates
Use your crawler's near-duplicate report or compare main-content similarity. Pages above roughly 90% shared main content (location or currency pages that swap one word, product variants with identical copy) are at risk. Either make each page clearly different with real local or specific information, consolidate them into one page with options, or keep one and redirect the rest.
Step 6. Check Google's choice
For each duplicate group, inspect a sample URL. Where the user-declared and Google-selected canonicals differ, list every signal that points to Google's choice. Fix those signals, not just the tag.
Diagnosing a disagreement, one URL at a time
- Note the user-declared and Google-selected canonical in URL Inspection.
- Fetch both URLs and compare status codes, canonical tags (HTML and header) and main content.
- Count internal links to each version in your crawl.
- Check which version the sitemap and hreflang list.
- Check for a redirect from your preferred URL to the other one; that overrides everything.
- Fix what disagrees, request indexing for a sample and validate the fix. Large sites take weeks.
Decision table
| Situation | Use |
|---|---|
| Old URL with no reason to exist | 301 redirect |
| Variant users need (print view, sort order, tracking) | Canonical to the main URL |
| Country or language versions with real differences | Self-canonical on each, plus hreflang |
| Thin duplicate with no user value | Remove (410), or merge and redirect |
| Paginated series | Self-canonical on each page, crawlable links between pages |
| Syndicated copy on a partner site | Cross-domain canonical to the original if the partner agrees; otherwise a link back |
| PDF that duplicates an HTML page | Link: <https://example.com/page/>; rel="canonical" header on the PDF |
Canonicals and hreflang together
Each language or country version is its own canonical. Never point the French page's canonical at the English page; that tells Google the French page is a duplicate and it may drop it from French results. Each version carries a self-referencing canonical and hreflang tags listing every alternate, including itself, all pointing at canonical URLs.
Worked example
A payments site serves /send-money/uk-to-nigeria/ and /send-money/uk-to-nigeria?currency=GBP. The rate widget and marketing emails link to the parameter version, so after a few months Google selects it as canonical even though the clean URL declares itself canonical. The fix: change widget and email links to the clean URL, keep the self-canonical, keep the parameter version out of sitemaps, and canonicalise all parameter versions to the clean URL. Four weeks later URL Inspection shows the clean URL selected, and the parameter version stops appearing in results.
Platform notes
- WordPress: SEO plugins output canonicals automatically. Check the theme or a second plugin doesn't add another; two canonicals can make Google ignore both. Paginated archives should be self-canonical.
- Shopify: products are reachable at
/products/handleand inside collections at/collections/name/products/handle. Themes canonicalise to/products/handle; make collection templates link there too. - Next.js: set
trailingSlashonce in configuration, generate canonicals from the final URL with the Metadata API, and render them on the server. - Webflow and hosted builders: set the global canonical URL in site settings and check CMS collection pages output self-canonicals.
Ticket template for developers
Title: [SEO] Enforce one URL format and self-canonicals
Why: 12,400 URLs show "Google chose different canonical" (Search Console, 9 Oct 2026); internal links mix trailing-slash and non-slash forms.
Change: 301 non-slash to slash URLs in one hop; output one absolute self-canonical in server HTML on all indexable templates; strip utm_* from internal links.
Acceptance tests:
- /pricing redirects once to /pricing/ (301).
- View-source of 5 templates shows exactly one canonical, absolute, matching the URL.
- Crawl shows 0 internal links to redirecting or parameter URLs.
Metric: count of "Google chose different canonical" URLs, re-check after 4 weeks.Output format
# Canonical audit: <site>, <date>
## Summary
## Preferred URL rules (host, protocol, slash, case, parameters)
## Duplicate groups
| Group | URLs | Declared canonical | Google canonical | Conflicting signals | Fix |
## Near-duplicate templates and decision (differentiate, consolidate, remove)
## Fix list with owners, acceptance tests and re-check datesCommon mistakes
- Canonicals pointing to redirected, noindex or 404 URLs.
- Two canonical tags on one page from a theme and a plugin.
- Canonicalising every page to the homepage.
- Canonicalising page 2 of a series to page 1.
- Using noindex or robots.txt to fix duplication; both stop Google from seeing your canonical signals.
- Pointing hreflang alternates' canonicals at one language.
Questions to ask before you recommend changes
- Which URL format does the business want long term?
- Which systems create links with parameters, and can they change?
- Are some near-duplicates intentional, such as country versions with different prices or rules?
Self-check before you answer
- Do all signals in my plan point to the same URL?
- Did I check Google's selected canonical, not just the tag?
- Did I separate true duplicates from pages that only look similar?
- Does every fix have acceptance tests and a re-check date?
Official documentation
- How to specify a canonical URL: https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
- What is canonicalization: https://developers.google.com/search/docs/crawling-indexing/canonicalization
- Troubleshoot canonicalization: https://developers.google.com/search/docs/crawling-indexing/canonicalization-troubleshooting
- URL structure best practices: https://developers.google.com/search/docs/crawling-indexing/url-structure
- Localised versions (hreflang): https://developers.google.com/search/docs/specialty/international/localized-versions
On this page
- When to use this skill, and when not to
- Example prompts
- Example output
- What the agent needs from you
- How this skill hands off to related skills
- How to run the Canonicalization skill step by step
- Situations this skill handles
- What makes this skill different
- Practical tips from real projects
- Frequently asked questions
- Changelog
When to use this skill, and when not to
Use it when Search Console reports “Duplicate, Google chose different canonical than user” or “Duplicate without user-selected canonical”, when the wrong URL version ranks (a tracking parameter, an HTTP or non-www variant, a product inside a collection path), when near-identical location or currency pages compete, or when you set up canonicals on a new template.
Don’t use it for filter strategy as a whole (use Faceted Navigation and URL Parameters), for redirect rules on their own (use Redirects and HTTP Status Codes), or for two different pages targeting the same keyword, which is a content decision.
Example prompts
- “12,000 URLs show Google chose different canonical than user. Here are the exports and a crawl.”
- “Google keeps ranking our ?currency=GBP URLs instead of the clean ones. Why?”
- “Our Shopify products are indexed under collection paths. Fix the canonicals and links.”
- “We have 300 city pages that differ only by the city name. Consolidate or differentiate?”
- “Set the canonical rules for our new Next.js site: trailing slashes, case and parameters.”
Example output
The skill returns a fixed structure. A shortened example for an imaginary site:
# Canonical audit: example.com, 10 October 2026 ## Preferred URL rules HTTPS, non-www, trailing slash, lowercase, no tracking or sort parameters. ## Duplicate groups | Group | URLs | Declared | Google chose | Conflicting signals | Fix | | Rate pages | 2 per page | /send-money/uk-to-nigeria/ | ?currency=GBP | 4,100 internal links from widget | Link widget to clean URL | | City pages | 300 | self | self | 94% shared copy | Add local data or merge |
For every group where Google overrides your choice, the skill lists the signals pointing the other way, because fixing those is what changes Google’s decision.
What the agent needs from you
The skill asks for Search Console examples of each duplicate status, URL Inspection results showing the user-declared and Google-selected canonicals, a crawl with canonical tags (HTML and header), status, inlinks and a near-duplicate score, the CMS URL rules, and every system that links to the site with parameters, such as emails, ads and widgets.
How this skill hands off to related skills
Canonical signals touch several other systems. Redirect implementation goes to Redirects and HTTP Status Codes, sitemap clean-up to XML Sitemaps, links that point at the wrong version to Internal Linking and Site Architecture, and canonicals injected or changed by JavaScript to JavaScript SEO and Rendering. When duplication is one symptom among many indexing problems, it routes back to the Crawlability and Indexation Audit.
How to run the Canonicalization skill step by step
- Install the skill as
canonicalization/SKILL.md. - Export duplicate statuses from Search Console with example URLs: Google chose different canonical, duplicate without user-selected canonical, and alternate page with proper canonical.
- Inspect a sample with URL Inspection to record user-declared and Google-selected canonicals.
- Add a crawl with canonical tags (HTML and header), status, inlinks and a near-duplicate score.
- Write down your preferred URL format (host, protocol, trailing slash, case, parameters) and list systems that create parameter links.
- Fix the signals that disagree, then re-check Google’s choice after a few weeks.
Situations this skill handles
Canonical problems usually come from signals pointing in different directions. These are the cases the skill sorts out:
| Situation | What the skill does |
|---|---|
| Tracking-parameter URL chosen as canonical | Finds the widgets, emails or ads linking to it and moves links to the clean URL |
| Shopify products indexed under collections | Aligns templates and links with the /products/ URL |
| Near-identical city or currency pages | Decides between differentiating, consolidating or removing, based on real local differences |
| Country versions treated as duplicates | Sets self-canonicals with complete hreflang on every version |
| Two canonical tags on one page | Finds the theme or plugin adding the second and removes it |
| Syndicated articles outranking the original | Requests cross-domain canonicals or links back from partners |
What makes this skill different
Most canonical advice starts and ends with the tag. This skill starts with Google’s choice, shown in URL Inspection, and lists every signal behind it: redirects, internal links, sitemaps, hreflang and parameters. Fixing those is what changes Google’s decision.
It also refuses common shortcuts that make things worse: canonicalising everything to the homepage, pointing page two of a series at page one, or using noindex and robots.txt to hide duplicates, which stops Google seeing your canonical signals at all.
Practical tips from real projects
- Decide the URL rules once and enforce them in one place (server or framework), not page by page.
- Count internal links per version. Thousands of links to a parameter URL can outweigh a canonical tag.
- Check JavaScript canonicals. If the server HTML says one thing and client-side code changes it, Google may see conflicting signals.
- Expect weeks, not days, on large sites. Set a re-check date and validate a sample rather than refreshing reports daily.
- Watch AI answers too. Duplicate URLs with different facts can lead AI engines to cite the wrong version of a page.
A quick way to start: pick the ten URLs with the most impressions in Search Console, inspect each one, and note any where Google’s selected canonical differs from yours. That short list usually reveals the pattern behind thousands of affected URLs, such as a widget adding a currency parameter or a template linking to collection paths. Fix the pattern at its source, and the long tail follows.
Frequently asked questions
Is rel=canonical a directive?
No. Google treats it as a strong hint and weighs it with redirects, internal links, sitemaps and other signals. If they point elsewhere, Google can pick a different canonical, which URL Inspection shows.
Should I use noindex or a canonical for duplicates?
A canonical, or a redirect if the duplicate has no reason to exist. noindex removes a page from results but doesn’t consolidate its signals into the preferred URL, and it sends mixed messages when combined with a canonical.
Should page 2 of a series point its canonical to page 1?
No. Each page in a series shows different items, so each should be self-canonical with plain links to the next and previous pages.
Can I use a canonical across domains?
Yes. Syndication partners can point a canonical to your original, and Google usually respects it if the content matches. If a partner won’t, ask for a clear link back to the original.
How long until Google switches to my canonical?
Usually days to a few weeks for well-linked pages once signals agree, and longer on large sites. The skill sets a re-check date and the URL Inspection test to confirm it.
Changelog
- 1.1.0, 10 October 2026: rewritten with a signal-strength table, a one-URL diagnosis routine, near-duplicate decisions, hreflang rules and platform notes for WordPress, Shopify, Next.js and Webflow.
- 1.0.0, 9 October 2026: first release.
Use, adapt and share this skill under CC BY 4.0: credit Afeez Adebayo and link to this page.
All Technical SEO skills
- Technical SEO Audit
- Crawlability and Indexation Audit
- Robots.txt and Robots Directives
- XML Sitemaps
- Redirects and HTTP Status Codes
- Site Migration SEO
- Core Web Vitals and Page Experience
- JavaScript SEO and Rendering
- Structured Data and Schema Markup
- Internal Linking and Site Architecture
- Log File Analysis for SEO
- Faceted Navigation and URL Parameters
- LCP Optimisation
- INP Optimisation
- CLS Optimisation
