Home/Free SEO tools/Sitemap Validator
Free tool · step 01 of 04 · Reachable & indexable

Sitemap ValidatorA sitemap that only lists pages worth crawling.

Locate and validate your XML sitemap: discovery, structure, URL count, HTTPS consistency and the live status of every URL it lists.

Last reviewed · 1 Oct 20269 primary sources →Kalenux engineering
https://
DiscoveryXML validitySize limitsLive statusProtocolIndexability
sitemap validator · example.com
75/ 100
1 to fix · 1 to review
4 passed · 1 warning · 1 failed
Discoveryfound via robots.txtPASS
XML validitywell-formedPASS
URL count1,387 / 50,000PASS
Redirected URLs37 listedFAIL
HTTP URLs4 on an HTTPS siteWARN
lastmodpresent on 96%PASS
illustrative result
fetched as crawler · 0.4s
4checks on the filestructure, size, URLs, location
19sitemap checksin the full site audit
5primary sourcesprotocol and Google docs
0signups neededpaste a URL and run it
what a valid file looks like

Four lines carry the whole sitemap.

Everything else is optional or ignored.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">1
<url>
<loc>https://site.com/shoes/</loc>2
<lastmod>2026-09-28</lastmod>3
<priority>0.8</priority>4
</url>
</urlset>
  1. 1NamespaceThe sitemaps.org namespace, exactly as written
  2. 2Absolute, canonical URLSame host and protocol, returning 200
  3. 3Honest lastmodThe date the content really changed, not today
  4. 4Ignored by Googlepriority and changefreq do nothing there. Leave them or drop them
a sitemap is a list of pages you want indexed

Every URL in it should be one you want found.

Anything that redirects, errors, is noindexed or isn't canonical sends a mixed signal. The checker flags each one. Illustrative counts:

Every URL the CMS knows
− redirects500 · 301s
− errors180 · 404s
− noindex420 · noindex
− non-canonical600 · ?filters
In the sitemap3,100 · all 200, indexable, canonical
the hard limits

50,000 URLs or 50 MB per file. Then split it.

Big sites use a sitemap index that lists child sitemaps. The checker follows the index and validates every child. Illustrative structure:

sitemap_index.xml
sitemap-products-1.xml · 50,000 URLs
sitemap-products-2.xml · 18,400 URLs
sitemap-blog.xml · 1,250 URLs
sitemap-pages.xml · 96 URLs
two ways to point crawlers at it

Don't make crawlers guess where it is.

List it in robots.txt so every crawler can find it, and submit it in Search Console to see processing errors.

robots.txt
User-agent: *Disallow: /cart/Sitemap: https://site.com/sitemap_index.xml
An absolute URL on its own line. Read by every major crawler.
Search Console
Submittedsitemap_index.xmlStatusSuccessDiscovered URLs3,100
Shows you what Google read, and what it couldn't. Values are illustrative.
getting it in front of Google

A sitemap nothing points at is a file on a server.

Publishing the file does nothing on its own. There are two ways that still work and one that no longer does, and the difference matters most when a tutorial tells you to use the third.

01

Search Console

the one that reports back
Indexing › Sitemaps
https://site.com/sitemap.xml
→ Success · 1,284 discovered

The only method that tells you what Google made of it: how many URLs it read, when it last fetched the file, and which entries it could not parse. Submit once; Google rechecks on its own schedule.

02

robots.txt

found by every crawler, not just Google
User-agent: *
Sitemap: https://site.com/sitemap.xml

An absolute URL on its own line, anywhere in the file. Bing and the others read this too, so it is the one line worth adding even if you have already submitted in Search Console.

03

The ping endpoint

retired, do not script it
GET /ping?sitemap=…
→ deprecated by Google in 2023

Google removed the unauthenticated ping, so scripts that still call it achieve nothing. If a tutorial tells you to hit this URL after every deploy, the tutorial is out of date.

Submitting does not make Google index anything. A sitemap is a hint about which URLs exist and are worth crawling, not a request to index them, and a URL listed there can still be skipped on its own merits.

in depth · 9 primary sources

What the protocol and Google say about sitemaps.

What the search engines document about each check this tool runs, with every claim linked to its source.

01The format is an open standard

WHAT IT MEANS“the sitemaps protocol”A shared specification, not a Google invention. Bing and the others read the same file, which is why there is one format rather than one per search engine.

A single file may hold up to 50,000 URLs or 50 MB uncompressed [1][2]. Google ignores <priority> and <changefreq> entirely, so time spent tuning them is wasted [2].

THE FIXEmit the minimum that is true: <loc> always, <lastmod> when you genuinely track it. Drop priority and changefreq rather than maintaining values nothing reads.
THE MINIMUM THAT VALIDATES
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org
/schemas/sitemap/0.9">
<url>
<loc>https://site.com/page</loc>
</url>
</urlset>
Only <loc> is required, and it must be a fully qualified absolute URL [1].
WHAT GETS IGNORED
<priority>0.8</priority> → ignored
<changefreq>daily</changefreq> → ignored
<lastmod>2026-10-01</lastmod> → used
Two of the four optional tags do nothing at Google. The third only helps when it is accurate.

02List canonical URLs only

WHAT IT MEANS“a URL you want found”Every entry is a claim that this exact address is worth crawling and is the version you want in results. A URL that contradicts that claim weakens the whole file.

Google generally shows canonical URLs in results, and the sitemap is one of the signals it uses to choose one [2]. Listing a URL that redirects, 404s or carries a noindex sends the opposite message.

THE FIXGenerate the sitemap from the same rule that decides indexability, so a page carrying noindex or a redirect can never appear in it. A generator that crawls and lists whatever it finds will not do this.
ENTRIES THAT CONTRADICT THE FILE
<loc>https://site.com/old</loc>
→ 301 to /new
<loc>https://site.com/tag/x</loc>
→ carries noindex
<loc>https://site.com/gone</loc>
→ 404
Each one spends crawl budget proving the file wrong.
WHAT BELONGS IN IT
• returns 200
• self-referencing canonical
• no noindex, not disallowed
• a page you would link to yourself
A file listing only indexable URLs is a far stronger signal than one listing everything [2].

03lastmod has to be honest

WHAT IT MEANS“last modified”The date the content meaningfully changed, not the date the file was rebuilt. A deploy that touches every page is not a change to every page.

Google uses <lastmod> when it is consistently accurate and ignores the field entirely when it is not [4]. A nightly build that stamps today on all 10,000 URLs trains it to disregard yours.

THE FIXDerive lastmod from the content record, not the build. If you cannot track it accurately, omit the tag — an absent date is better than one that is always today.
A FILE THAT TRAINS GOOGLE TO IGNORE IT
<lastmod>2026-10-26</lastmod>
<lastmod>2026-10-26</lastmod>
<lastmod>2026-10-26</lastmod>
→ every URL, every night
Identical dates across the whole file say nothing about which page changed.
DATES THAT MEAN SOMETHING
<lastmod>2026-10-24T09:12:00+03:00</lastmod>
<lastmod>2026-03-02</lastmod>
<lastmod>2025-11-18</lastmod>
W3C datetime format, and spread across real editing history [1].

04Where crawlers find it

WHAT IT MEANS“discovery”How a crawler learns the file exists at all. Publishing it to a path nobody knows about is the same as not publishing it.

A Sitemap: line in robots.txt is read by every crawler that reads robots.txt [5], and Search Console submission tells you what Google made of the file [3]. The unauthenticated ping endpoint was retired and now returns 404 [4].

THE FIXPut the file at the site root, name it in robots.txt, and submit it once in Search Console. Those two cover every crawler; nothing else needs automating.
IN robots.txt, ABSOLUTE
User-agent: *
Disallow: /admin/

Sitemap: https://site.com/sitemap.xml
Anywhere in the file, on its own line, with the full URL including the scheme [5].
SCOPE IS BY LOCATION
/sitemap.xml → covers the whole site
/shop/sitemap.xml → covers /shop/ only
A sitemap affects only URLs at or below its own directory, which is why the root is the place to put it [2].

05One file, or an index of files

WHAT IT MEANS“a sitemap index”A sitemap that lists other sitemaps instead of pages. It is what you submit when one file cannot hold the site, and it has its own, different root element.

Past 50,000 URLs or 50 MB you split the file and list the parts in an index [1]. Nesting an index inside another index is not allowed, and gzip compression counts against the 50 MB uncompressed, not the transferred size [6].

THE FIXSubmit the index, not the individual files. Split along lines that mean something to you, because Search Console reports indexing per sitemap and arbitrary chunks make that report useless.
THE INDEX, WHICH IS NOT A urlset
<sitemapindex xmlns="…/0.9">
<sitemap>
<loc>https://site.com/sm-1.xml</loc>
<lastmod>2026-10-24</lastmod>
</sitemap>
</sitemapindex>
A different root element and a different child: <sitemap>, not <url>.
SPLIT BY SOMETHING YOU CAN READ
/sitemap-products.xml
/sitemap-categories.xml
/sitemap-blog.xml
→ Search Console reports each separately
Splitting by section rather than by number means the coverage report tells you which part of the site has the problem [3].

06Images, video and news have their own tags

WHAT IT MEANS“an image sitemap”Not a separate file in most cases, but extra tags inside the normal one. They tell Google about media it might not discover by crawling the page alone.

Image and video extensions live inside the ordinary <url> entry under their own namespace [7][8]. Google News sitemaps are the exception: a separate file, limited to 1,000 URLs and to articles from the last two days [9].

THE FIXAdd media tags to the sitemap you already have rather than creating a second one. Build a news sitemap only if you are in Google News, and prune it on a schedule, because stale entries make the whole file invalid.
AN IMAGE ENTRY, IN THE SAME FILE
<urlset xmlns:image="…/image/1.1">
<url>
<loc>https://site.com/shoes</loc>
<image:image>
<image:loc>…/shoe.jpg</image:loc>
</image:image>
</url>
The namespace goes on <urlset>; the image sits inside the page that shows it [7].
WHEN A SEPARATE FILE IS REQUIRED
news → separate file, ≤1,000 URLs
→ last 2 days only
image → same file, extra tags
video → same file, extra tags
Only news is genuinely a different file [9].

07Submitting is a hint, not a request to index

WHAT IT MEANS“submitted”Google has been told the URLs exist. Nothing more. It decides separately whether each one is worth crawling, and separately again whether it is worth indexing.

Google states plainly that submitting a sitemap does not guarantee it will download the file or crawl the URLs in it [2]. The Search Console report says how many URLs it read, which is a different number from how many it indexed [3].

THE FIXTreat the sitemap as discovery and nothing else. When submitted URLs are not indexed, look at the pages themselves, because resubmitting the same file changes none of the reasons.
WHAT THE REPORT ACTUALLY TELLS YOU
Discovered URLs 1,284
Indexed 941
→ 343 read, considered, skipped
The gap is not an error. It is Google declining, which no change to the sitemap will fix.
WHAT WOULD FIX THE GAP
• pages that duplicate each other
• thin or templated content
• no internal links pointing in
• slow responses limiting the crawl
All of them live on the pages, not in the file listing them.

08robots.txt outranks the sitemap

WHAT IT MEANS“disallowed but listed”The two files giving contradictory instructions. robots.txt stops the fetch, so a listed URL that is also disallowed is a URL Google is told to find and forbidden to read.

Blocking wins, because the crawler never gets far enough to act on the listing [5]. The sitemap then describes pages nothing can reach, which is one of the quieter ways a file becomes misleading.

THE FIXRun the sitemap against robots.txt before publishing. Every listed URL must be allowed, and the sitemap file itself must not fall under any disallow rule.
THE CONTRADICTION
# robots.txt
Disallow: /private/

<!-- sitemap.xml -->
<loc>https://site.com/private/a</loc>
Listed as worth crawling, forbidden to crawl. The block is what happens.
ONE MORE WAY TO BLOCK YOURSELF
Disallow: /sitemap.xml
→ the file itself unreachable
A broad disallow rule can cover the sitemap, after which nothing reads it at all [5].

References

  1. [1]Sitemaps XML format · sitemaps.orgwww.sitemaps.org/protocol.html
  2. [2]Build and submit a sitemap · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap
  3. [3]Learn about sitemaps · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/sitemaps/overview
  4. [4]Sitemaps ping endpoint is going away · Google Search Central Blog, 2023developers.google.com/search/blog/2023/06/sitemaps-lastmod-ping
  5. [5]Introduction to robots.txt · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/robots/intro
  6. [6]Large sitemaps and sitemap index files · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/sitemaps/large-sitemaps
  7. [7]Image sitemaps · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/sitemaps/image-sitemaps
  8. [8]Video sitemaps and alternatives · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/sitemaps/video-sitemaps
  9. [9]Google News sitemaps · Google Search Centraldevelopers.google.com/search/docs/crawling-indexing/sitemaps/news-sitemap
CITE THIS PAGEKalenux. (2026). Sitemap validator: check XML sitemap health. Kalenux SEO Guide. Last reviewed 1 Oct 2026. kalenux.com.tr/seo-sitemap-validator
other free tools

Keep checking.

All tools →
the file is right, the contents may not be

A valid sitemap can still be full of the wrong URLs.

Validation proves the XML parses and the file is within its limits. It cannot tell you that 300 of the URLs inside redirect, that 40 carry a noindex, or that the canonical on each one names a different address. Those are contradictions between the file and the pages it lists, so they only surface when something fetches both. The full audit runs 19 sitemap checks across every URL you have listed.

01

Entries that contradict themselves

URLs listed as crawlable that answer with a redirect, a 404 or a 5xx, carry a noindex, or are disallowed in the robots.txt file sitting beside them.

02

Pages that should be listed and are not

Indexable pages missing from the file entirely, which is the quieter half of the problem: Google never learns they exist unless something links to them.

03

Signals that disagree with it

The sitemap naming one URL while the canonical on that page names another, the same page listed in several sitemaps, and lastmod dates in the future or missing.

Run the full auditCreate an account and your first audit is free, up to 500 pages. No card needed.