Canonical conflict resolution
Canonical is a hint, not an instruction, and search engines override it when other signals disagree. This skill finds where your declared canonical conflicts with your internal links, sitemap, hreflang or redirects, and makes them agree.
Use when pages are being consolidated into the wrong URL, or when Google reports a canonical different from the one you declared.
The skill file
What you need first
- A crawl exporting declared canonical per URL
- Search Console page indexing data showing Google-selected canonical
- Sitemap URLs
Method
- 01 List every URL where the declared canonical differs from the Google-selected canonical.
- 02 For each, check the four signals that override a canonical: internal links pointing elsewhere, sitemap listing a different URL, redirects to a third URL, and hreflang naming a different self-reference.
- 03 Make every signal agree with the canonical you actually want. The canonical tag alone is rarely enough.
- 04 Confirm each canonical points at a URL that returns 200 - a canonical to a redirect or a 404 is ignored.
- 05 Check for self-referencing canonicals on paginated and filtered URLs, where a canonical to page one silently removes deeper pages from the index.
- 06 Recrawl and confirm the declared and selected canonicals now match.
What this produces
A conflict table showing, per URL, which signal disagreed and what was changed to resolve it.
Where this goes wrong
- Canonicalising paginated pages to page one and losing the deeper products
- Pointing a canonical at a redirecting URL
- Treating canonical as a directive that overrides internal linking
Use this skill in your own AI
The download is a plain markdown file with the name and trigger in its frontmatter. Where an assistant supports skills it can load itself, that frontmatter is what it reads to decide this one applies.
Questions about this skill
When do I work through the conflicting signals rather than just setting the canonical tag again?
When Search Console reports a Google-selected canonical different from the one you declared, or pages consolidate into the wrong URL. Restating the tag and waiting rarely works, because canonical is a hint that other signals outvote. This method starts from the signals doing the outvoting, which is why it resolves cases that a tag edit leaves untouched.
What do I need in hand before starting?
A crawl exporting the declared canonical per URL, Search Console page indexing data showing the Google-selected canonical, and the sitemap URL list. Without the selected value there is no conflict list, only a set of tags that all look correct. Without the sitemap you are blind to one of the four overriding signals, and it is a common one because sitemaps are generated separately.
What do I end up with, and which part gets used?
A conflict table showing, per URL, which signal disagreed and what was changed to resolve it. The signal column is the part that gets used: internal links pointing elsewhere, a sitemap listing a different URL, a redirect to a third URL and hreflang naming a different self-reference are four separate fixes, and the tag itself is usually already correct.
What is the mistake that ruins this, and what does it cost?
Canonicalising paginated pages to page one. It looks like duplicate cleanup and it quietly removes every product that appears only on page three onwards, which nobody notices until the long tail stops converting. Use self-referencing canonicals on paginated URLs instead. The related error is pointing a canonical at a URL that redirects or 404s, which is ignored outright, so the conflict survives.
More in Technical SEO
Crawl budget audit
Use when a large site has pages that stay unindexed for weeks, or when log files show crawlers s...
Indexation gap analysis
Use when the number of pages you publish and the number Google indexes do not match, and you nee...
Core Web Vitals triage
Use when field data shows failing LCP, INP or CLS and you need to know which fix will actually m...
JavaScript rendering check
Use when a site renders content client-side and you need to confirm search engines actually see...