Non-Canonical Page in Sitemap: What It Means and How to Fix It
Short answer: your sitemap lists a URL, but that page’s canonical tag points to a different URL. Your two signals disagree about which version to index. Google’s sitemap guide says to list the URLs you want in search results, which means canonical URLs only. For each flagged URL, either replace it in the sitemap with the URL its canonical names, or, if the page really should be indexed, fix its canonical to point to itself.
Why it matters
Google’s canonicalization docs rank the signals it uses to pick the main version of a page. Redirects and rel="canonical" are strong signals; being listed in a sitemap is a weak one. A sitemap entry that contradicts the page’s own canonical tag gives Google mixed instructions. Usually it follows the canonical tag and ignores the sitemap entry, so the URL you submitted is never indexed. Your sitemap stats then count URLs that can’t succeed, which hides the real problems.
Where you see it
- Search Console: in Indexing → Pages, set the sitemap filter to All submitted pages. Submitted URLs with a canonical elsewhere usually show as Alternate page with proper canonical tag (Google agreed with your canonical) or as “Duplicate, Google chose different canonical than user”.
- Site audit tools: Ahrefs’ Site Audit reports it as “Non-canonical page in sitemap”; other crawlers use similar wording.
The usual causes
- Trailing slash or case mismatch. Sitemap lists
/post, canonical says/post/. See trailing slash SEO. - Protocol or host mismatch. Sitemap lists
http://or non-www URLs, canonical useshttps://www. - Parameter variants. Sort, filter or tracking URLs in the sitemap that canonicalize to the clean URL.
- Paginated or variant pages (product colors, print versions) that point to a main page.
- A wrong canonical tag. A template that points every page to the home page, or to page 1 of a series.
How to find them
For each sitemap URL, compare the URL with the canonical tag on the page:
curl -s https://example.com/sitemap.xml | grep -o '<loc>[^<]*' | sed 's/<loc>//' | head -50 \
| while read -r u; do
c=$(curl -s "$u" | grep -oiE '<link[^>]+rel="canonical"[^>]*>' | grep -oE 'href="[^"]+"' | cut -d'"' -f2)
[ -n "$c" ] && [ "$c" != "$u" ] && echo "$u -> $c"
doneOr use the free canonical checker: it reads your sitemap, checks the canonical tag on 30 of its URLs, and flags the ones pointing somewhere else (it resolves relative canonicals first).
How to fix each case
The canonical is right
The sitemap is listing a variant. Replace the entry with the canonical URL, and fix the generator so it outputs canonical URLs only. Most often that means one setting: the site URL (protocol, www, trailing slash) in your CMS or framework.
The canonical is wrong
The page should be indexed on its own, so give it a self-referencing canonical. See self-referencing canonicals and canonical issues.
Then resubmit the sitemap. A clean sitemap has one rule: every URL returns 200, isn’t noindexed, and names itself as canonical. That’s exactly what our free sitemap generator checks before adding a page.
Frequently asked questions
What is a non-canonical page in a sitemap?
A URL listed in your sitemap whose rel="canonical" tag names a different URL. The sitemap says "index this URL", the page says "index that other URL".
Is it a serious problem?
Not usually a crisis, but it weakens your signals. Google treats sitemap inclusion as a weak canonical hint and the canonical tag as a strong one. When they disagree, Google decides, and your sitemap reports fill with URLs that will never be indexed.
Should I remove the URL from the sitemap or change the canonical?
If the canonical tag is right (the URL is a variant, such as a parameter or a slash version), replace the sitemap entry with the canonical URL. If the page should be indexed itself, fix its canonical tag to point to itself.
Where does Search Console show this?
Filter the Page indexing report to "All submitted pages". Submitted URLs that point elsewhere usually appear as "Alternate page with proper canonical tag" or "Duplicate, Google chose different canonical than user".