For the complete documentation index, see llms.txt. Every page on this site is also served as Markdown: append `.md` to any URL, or send `Accept: text/markdown`.
Skip to content

Free tool

XML sitemap validator

The XML sitemap validator fetches a sitemap or sitemap index and checks it against the sitemaps.org protocol: the namespace, the 50,000-URL and 50 MB limits, lastmod formats, duplicates and URLs on another host. It also checks that robots.txt declares the sitemap. Every finding quotes the offending value. Free, no sign-up.

Check a sitemap

Seconds, on our server · Free, no sign-up

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.

Or try one of ours:

Your result appears here

Found
where the sitemap was found
Index
child sitemaps, errors, warnings
A child sitemap
URLs and errors, on a second run
lastmod
URLs without a date
Declaration
whether robots.txt names it

See our own run

Share
Our runattensira.com

Inputattensira.com

Found
sitemap-index.xml, declared in robots.txt
✓ Passes
Index
12 child sitemaps, 0 errors, 0 warnings
✓ Passes
sitemap/0.xml
18 URLs, 0 errors
✓ Passes
lastmod
Missing on 1 of 18 URLs
◐ Weak
Declaration
robots.txt names the index, not this child
◐ Weak
XML sitemap validator, this site's route, n=2 runs (the domain, then sitemap/0.xml) ·

What does it check?

  1. The file

    A <urlset> or <sitemapindex> root with the sitemaps.org 0.9 namespace, within the 50,000 URL and 50 MB limits.

  2. Every entry

    Absolute URLs on the sitemap's own host, no duplicates, and valid lastmod, changefreq and priority values.

  3. Your robots.txt

    Whether it declares this sitemap, so crawlers that start from robots.txt find it.

Does our own sitemap pass?

We gave it attensira.com. It probed the default paths, found /sitemap-index.xml, and confirmed robots.txt declares it. The tool validates one file per run, so a second run on the first child, sitemap/0.xml, gave the last three rows.

The index is clean. One URL in the first child has no lastmod, so a crawler cannot tell when it changed. That is one line in the generator, and it is the only real finding.

The second warning, on the declaration, is the validator being literal: robots.txt declares the index, and the index lists the child, which is how sitemap indexes are meant to work. Read a warning before you fix it.

The run is the result panel at the top of this page. Read on 4 Oct 2026.

How does it report what it finds?

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.

Which rules does it apply?

RuleSourceDetail
Root element is <urlset> or <sitemapindex>Sourcesitemaps.org 0.9DetailAnything else is not a sitemap. An HTML page returned with a 200 status is the usual cause.
Root carries the sitemaps.org 0.9 namespaceSourcesitemaps.org 0.9DetailWithout xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" a strict parser rejects the file.
At most 50,000 URLs per sitemap fileSourcesitemaps.org 0.9DetailPast that, split into child sitemaps and list them in a sitemap index.
At most 50 MB uncompressed per fileSourcesitemaps.org 0.9DetailMeasured on the response body as fetched.
At most 50,000 sitemaps per indexSourcesitemaps.org 0.9DetailIndexes may not nest: an index may not list another index.
Every <loc> is a fully-qualified absolute URLSourcesitemaps.org 0.9DetailRelative paths are silently dropped by crawlers.
Every <loc> is on the same host as the sitemapSourcesitemaps.org 0.9DetailA sitemap at example.com may only list example.com URLs unless cross-submission is set up in Search Console.
<lastmod> is a W3C DatetimeSourcesitemaps.org 0.9Detail2026-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 valuesSourcesitemaps.org 0.9Detailalways, hourly, daily, weekly, monthly, yearly, never.
<priority> is a number between 0.0 and 1.0Sourcesitemaps.org 0.9DetailIt is a hint about relative priority within your own site, nothing more.
No duplicate <loc> entriesSourceCrawl efficiencyDetailDuplicates waste crawl budget and signal a generation bug.
robots.txt declares this sitemapSourcesitemaps.org 0.9DetailA 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.

What would the crew change in that sitemap?

Inside Attensira, each sitemap or redirect change ships as a pull request you approve. GitHub delivery.

Pull requestyour-site

Sitemap: lastmod on the one URL without it

attensirawaits for your review

sitemap/0.xml generator

  1. unchanged: <url>
  2. unchanged: <loc>…</loc>
  3. added: <lastmod>{page.updatedAt}</lastmod>
  4. unchanged: </url>
Web engineer agentWeb engineer · would hand you a pull request like thisExample · the kind of change this finding calls for, not one that shipped

Does a sitemap still matter 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 for AI answers too: if a crawler never noticed that a page changed, an answer built from its copy repeats the old version.

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 that emits duplicate URLs or lists a URL on the wrong host is a generation bug the validator flags directly. For URL sitemaps, it also flags omitted lastmod values. The same code path that writes the file is usually where these slip in.

What this validator does not do is fetch each listed URL, so it will not tell you which entries 404, redirect, or are blocked in robots.txt. That comparison is a crawler check, and a worthwhile one: 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 do you fix the common failures?

What it showsWhyWhat to do
The response is HTML, not XMLWhy: Your framework is serving a page at that path, often through a catch-all route.What to do: Make the sitemap route return application/xml, and check that no catch-all route intercepts it.
Unescaped ampersandsWhy: A raw & in a URL breaks XML parsing for the whole file.What to do: Escape it as &amp; wherever a URL carries one.
A lastmod that always says todayWhy: The build timestamp is emitted for every URL, so the field means nothing and crawlers learn to ignore it.What to do: Emit the real last-content-change date, or omit the field.
Over 50,000 URLsWhy: One file is past the protocol's URL limit.What to do: Shard into child sitemaps and publish a sitemap index. Keep each child under both the URL and the byte limit.
URLs on another hostWhy: A sitemap may only list URLs on its own host.What to do: Move them to a sitemap on that host and declare it in that host's robots.txt.
No Sitemap: line in robots.txtWhy: Crawlers that start from robots.txt have no pointer to the file.What to do: Add one line with the absolute URL, anywhere in the file. Robots.txt generator

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's Build and submit a sitemap page states that Google ignores both (checked 5 Oct 2026). 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.

This checks the sitemap. Attensira's crew keeps it in order.

7 days free · card required