XML Sitemap Generator and Validator
Build a sitemap from a list of URLs, or check the one you already have. Nothing you paste leaves your browser.
Upload this to your site root so it loads at yourdomain.com/sitemap.xml, add a Sitemap: line to robots.txt, then submit it in Search Console.
Checking beats building
Most people looking for a sitemap generator already have a sitemap. Their CMS or SEO plugin made one, and the real question is whether it is any good. That is why the Check tab is first.
Paste a sitemap in and it reports the faults that actually break things:
- Malformed XML. One unescaped ampersand is enough to make the whole file unreadable, and Search Console reports it as a generic fetch error that tells you nothing.
- The wrong namespace. The
xmlnshas to be exactlyhttp://www.sitemaps.org/schemas/sitemap/0.9. Anything else and the file is ignored, silently. - A byte order mark or whitespace before the declaration. The XML declaration must be the very first thing in the file. A BOM in front of it is invisible in an editor and fatal to some parsers.
- Invalid lastmod dates.
21/09/2026is not a W3C datetime, and the whole entry can be discarded because of it. - Relative URLs in
<loc>. They must be absolute, including the protocol. - Duplicates, and double-escaped ampersands (
&amp;), which parse cleanly and produce the wrong URL. - Size limits. 50,000 URLs or 50MB uncompressed, whichever comes first.
It also points out <changefreq> and <priority> if they are present. Neither is read by Google, and has not been for years.
What the checker cannot tell you
It reads the file. It cannot fetch the URLs inside it, because that would mean sending them to a server.
So it cannot tell you the one thing that matters most: whether those URLs are the right URLs. That check is manual, and worth doing on five of them at random. Each should return 200, carry a canonical tag pointing at itself, and have no noindex. Any URL that redirects, 404s, or canonicalises elsewhere does not belong in a sitemap.
Every one of those is a contradiction: you are telling Google a page matters enough to list, while the page itself says otherwise. Google resolves it by trusting the page, and your sitemap loses a little credibility each time.
On the builder, and its honest limits
The Build tab takes a list of URLs you supply and produces valid XML. What it does not do — and what most people mean when they search for a sitemap generator — is crawl your site to discover those URLs. A browser cannot do that.
That is a real limitation and I would rather state it than bury it. If you need a crawl, use a desktop crawler and export the list of 200-status HTML pages, then paste it here. If you only want to check what you already have, the other tab needs nothing.
What the builder does get right is the escaping. A URL like /search?a=1&b=2 must have its ampersand written as & inside the XML. Plenty of generators emit the raw character and produce a file that will not parse. This one escapes properly.
lastmod, and why honesty matters
<lastmod> is the one optional tag worth filling in, because Google does use it as a hint about what to recrawl. The catch is that the hint has to be trustworthy.
If your system stamps today's date on every URL every night, Google works out within a few weeks that your lastmod carries no information, and stops paying attention to it. You have then spent the one signal you had. Only update the date when the content genuinely changed, and a corrected typo does not count.
If you cannot produce honest dates, leaving the tag out entirely is better than filling it with noise. That is why Leave it out is the default here.
After you upload it
Put the file at your site root so it loads at yourdomain.com/sitemap.xml. Add a line to robots.txt, which every major crawler reads:
Sitemap: https://example.com/sitemap.xml
That line stands on its own and is not affected by any User-agent block. The robots.txt generator adds it for you.
Then submit it in Search Console, which is the only way to get the report back telling you how many URLs were discovered and how many made it into the index. Come back a day later: you want status Success and a discovered count in the same ballpark as your real page count. Wildly off in either direction means something is wrong. The sitemap guide covers reading that report.
Frequently asked questions
Why does it not crawl my site to find the URLs?
Because a browser cannot. Crawling your site would need a server to fetch every page, which means sending your domain and your URLs somewhere. Everything here runs on your own machine, so the builder works from a list you supply. The Check tab is the half that needs no crawling at all, and is usually the more useful one.
Where do I get a list of my URLs?
Export from your CMS, or run a crawler such as Screaming Frog, which is free up to 500 URLs, and export the list of 200-status HTML pages. If you already have a sitemap and only want to verify it, use the Check tab instead.
Should I set changefreq and priority?
No. Google ignores both and has said so for years, because too many sites set every page to priority 1.0 and changefreq daily. This tool does not emit them at all. If your current sitemap has them, they are harmless, just pointless.
What counts as a valid lastmod?
A W3C datetime: 2026-09-21, or a full timestamp with a timezone. The more important rule is honesty. If your CMS stamps today on every URL every night, Google learns within weeks that your lastmod means nothing and stops using it as a recrawl hint.
My sitemap is valid but pages still are not indexed. Why?
A sitemap is a suggestion about what to crawl, not an instruction to index. Google decides what to index on the merits of the page. If Search Console reports "Crawled - currently not indexed", the file is doing its job and the page is the problem.