XML Sitemap Validator
Paste or upload sitemap.xml to check it against the sitemaps.org protocol — well-formed XML, the correct root element and namespace, one <loc> per entry, valid W3C Datetime lastmod values, and the 50,000-URL and 50 MB limits. Every finding names the line that caused it. The file is parsed in your browser and never uploaded.
Sitemap XML
Nothing is uploaded — the file is parsed in your browser. The parser rejects DOCTYPE declarations outright, so no entity is ever expanded or resolved.
Result
Paste or upload a sitemap to check it.
Build a site whose sitemap writes itself
Moda generates and hosts marketing sites, so the sitemap stays correct as pages come and go.
Try Moda free →What actually invalidates a sitemap
Most rejected sitemaps fail on one of four things. Relative URLs in <loc> — the protocol requires a fully qualified http or https URL, so /about is invalid where https://example.com/about is fine. A missing or wrong xmlns on the root element, which is easy to lose when a template is hand-edited. Unescaped ampersands and angle brackets inside URLs, which break well-formedness outright. And lastmod values that are not W3C Datetime — 30/08/2026 and "August 30, 2026" are both rejected where 2026-08-30 is accepted.
urlset vs. sitemapindex
A sitemap lists pages: <urlset> at the root, <url> entries inside. A sitemap index lists sitemaps: <sitemapindex> at the root, <sitemap> entries inside. The two structures are not interchangeable, and an index may not nest another index — one level only. Index entries take <loc> and <lastmod> and nothing else, so a <changefreq> or <priority> inside a <sitemap> entry is an error even though it is valid inside a <url>. This validator tells the two apart from the root element and applies the right rule set.
The limits, and what to do when you hit them
One file holds at most 50,000 URLs and 50 MB uncompressed. Past either, split the sitemap into parts and list the parts in a sitemap index — an index itself holds up to 50,000 sitemaps, so the ceiling is far higher than any site needs. Gzipping helps with transfer but not with the limits: the 50 MB is measured uncompressed. This tool shows both numbers against their caps on every check so you can see the headroom before you run out of it.
Parsed defensively, on purpose
A validator that reads arbitrary XML is a good place to be careless, so this one is not. DOCTYPE declarations are rejected rather than processed, which removes entity declarations entirely — there is no external entity to resolve and no recursive expansion to run away with. Only the five predefined entities and numeric character references are recognized; anything else is reported as undeclared. Nesting depth and element count are capped, so even a deliberately hostile file costs bounded work in your tab.
Frequently asked questions
Does a valid sitemap mean my pages will be indexed?
No. A sitemap is a hint about which URLs exist and when they changed, not an instruction to index them. This tool checks structure only — it never fetches your URLs, so it cannot tell you whether they return 200, are canonical, are blocked by robots.txt, or carry a noindex tag. Those are separate checks, and Search Console’s coverage report is where they live.
Do changefreq and priority do anything?
Very little. Google has said publicly that it ignores both. They remain valid elements of the protocol and other crawlers may read them, so this validator checks that their values are legal — changefreq from the fixed list, priority between 0.0 and 1.0 — without implying that setting them changes how you are crawled. lastmod is the one optional element that is broadly used, and only when it is honest.
Can I check a gzipped sitemap?
Decompress it first and paste the XML. The size limit applies to the uncompressed file, which is what this tool measures, so checking the .xml is checking the thing the limit is about.
What counts as a valid lastmod?
W3C Datetime: 2026, 2026-08, 2026-08-30, or a full timestamp with a timezone such as 2026-08-30T09:00:00+00:00 or 2026-08-30T09:00:00Z. A timestamp without a timezone is invalid, and calendar validity is enforced — 2026-02-30 fails rather than silently rolling into March.
Why is my image or video markup flagged, or not flagged?
Extension namespaces — image:, video:, news:, xhtml: — are legitimate children of a <url> and are left alone. Unprefixed elements that are not part of the core protocol are flagged, because an unnamespaced <image> is a typo rather than an extension.