XML sitemap validator

Check a sitemap or sitemap index against the sitemaps.org protocol, and confirm robots.txt declares it.

Give a bare domain and the tool tries /sitemap.xml, /sitemap_index.xml and /sitemap-index.xml in that order. Free, no sign-up, full result shown.

What this checks

The validator fetches your sitemap, parses it, and reports every rule it breaks. It also reads your /robots.txt to check whether the sitemap is declared there. Findings are reported as errors and warnings with the offending value quoted — there is no score, because the rules below are pass or fail and averaging them into a number would hide which one you actually broke.

An error means a crawler will reject or ignore something. A warning means it will work but you are leaving a signal on the table.

The rules, in full

RuleSourceDetail
Root element is <urlset> or <sitemapindex>sitemaps.org 0.9Anything else is not a sitemap. An HTML page returned with a 200 status is the usual cause.
Root carries the sitemaps.org 0.9 namespacesitemaps.org 0.9Without xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" a strict parser rejects the file.
At most 50,000 URLs per sitemap filesitemaps.org 0.9Past that, split into child sitemaps and list them in a sitemap index.
At most 50 MB uncompressed per filesitemaps.org 0.9Measured on the response body as fetched.
At most 50,000 sitemaps per indexsitemaps.org 0.9Indexes may not nest — an index may not list another index.
Every <loc> is a fully-qualified absolute URLsitemaps.org 0.9Relative paths are silently dropped by crawlers.
Every <loc> is on the same host as the sitemapsitemaps.org 0.9A sitemap at example.com may only list example.com URLs unless cross-submission is set up in Search Console.
<lastmod> is a W3C Datetimesitemaps.org 0.92026-09-03 and 2026-09-03T10:00:00+02:00 are both valid; 03/09/2026 is not and is ignored.
<changefreq> is one of the seven allowed valuessitemaps.org 0.9always, hourly, daily, weekly, monthly, yearly, never.
<priority> is a number between 0.0 and 1.0sitemaps.org 0.9It is a hint about relative priority within your own site, nothing more.
No duplicate <loc> entriesCrawl efficiencyDuplicates waste crawl budget and signal a generation bug.
robots.txt declares this sitemapsitemaps.org 0.9A Sitemap: line in robots.txt is how a crawler that was never told about the file finds it.

Limits and formats come from the sitemaps.org 0.9 protocol at sitemaps.org/protocol.html.

Why a sitemap still matters when AI systems are the reader

A sitemap does not make a page rank and never did. What it does is tell a crawler that a URL exists and when it last changed, which decides how often the page is refetched. That matters more for AI answers than it used to: assistants preferentially use recent sources, and a page whose update a crawler never noticed is answered from a stale copy.

Three things a sitemap is genuinely load-bearing for:

  • Discovery of pages with few internal links. A page nothing links to is found through the sitemap or not at all.
  • Freshness. An honest lastmod is the cheapest way to get a substantially rewritten page recrawled.
  • Catching your own bugs. A sitemap listing URLs that 404, redirect, or are blocked in robots.txt is a generation bug you can only see by comparing the two. It is the most common real finding this tool surfaces.

That last one is worth pairing with a crawler check: a URL you have submitted in your sitemap and simultaneously blocked from GPTBot in robots.txt is a page you have asked to be indexed and refused to serve. Both files have to agree.

How to fix the common failures

  • The response is HTML, not XML. Your framework is serving a page at that path. Check that the sitemap route actually returns application/xml, and that a catch-all route is not intercepting it.
  • Unescaped ampersands. A raw & in a URL breaks XML parsing for the whole file. It must be &amp;. This is the single most common way a hand-assembled sitemap dies.
  • lastmod that always says today. Emitting the build timestamp for every URL makes the field meaningless and crawlers learn to ignore it. Emit the real last-content-change date, or omit the field.
  • Over 50,000 URLs. Shard into child sitemaps and publish a sitemap index. Keep each child under both the URL and the byte limit.
  • URLs on another host. Move them to a sitemap on that host and declare it in that host's robots.txt.
  • No Sitemap: line in robots.txt. One line, absolute URL, anywhere in the file. It costs nothing and is honoured by every major crawler.

Questions people ask about sitemaps

Does the tool follow a sitemap index into its children?

For validation, no — it reports the index itself: entry count, limits, formats and whether each child URL is well-formed. Run the tool again on a child sitemap URL to validate that file. Keeping it to one file per run means the result you share is about a specific file rather than an aggregate that hides where the problem is.

Should I set priority and changefreq?

They are optional and widely ignored. Google has said publicly it does not use them. If they are present they must be valid, which is why this tool checks them — but the honest advice is to omit both and spend the effort on an accurate lastmod.

Can a gzipped sitemap be checked here?

Only if your server sends it with Content-Encoding: gzip, in which case the fetch decompresses it transparently. A .xml.gz file served as a binary download will not parse, and the tool will say so rather than pretending to have read it.

How many URLs should be in my sitemap?

Every URL you want indexed, and none you do not. Pages that are noindex, canonicalised elsewhere, or blocked in robots.txt should not be listed — including them sends contradictory instructions and is a common cause of coverage warnings.

Do you store the sitemaps I check?

No. The file is fetched and parsed inside the request and the result goes straight back to your browser. There is no email field and no saved history; the shareable link re-runs the check.

Where to go next

Related reading: generate an llms.txt from the same sitemap.

See Where You Rank in AI Search Results

Get your free AI visibility report in 60 seconds. Track how often ChatGPT, Claude, and Google AI mention your brand—and discover exactly what your competitors are doing to outrank you.