urltoolskit.org
URL utilities, in the browser
Say hi →

Sitemap generator

URL list → valid sitemap.xml · per-line lastmod · auto priority by depth

Most sitemap generators want to crawl your site, which means waiting, a row limit, and a paywall at 500 pages. If you already have the URL list — from a CMS export, a database query, or a crawl you ran yourself — this turns it into a valid sitemap.xml immediately, with no limit and no upload.

Ready.

How to use

  1. Paste your URLs, one per line. Anything that is not an absolute http or https URL is skipped and counted in the status line.
  2. Pick a lastmod strategy. If your export has real modification dates, put them after a tab on each line and choose From the second column — real dates are worth far more than a blanket one.
  3. Leave changefreq omitted unless you have a reason. Google has said publicly it ignores it.
  4. Choose priority: omit it (fine), fixed, or automatic by depth, which gives the home page 1.0 and drops 0.2 per path segment.
  5. Download sitemap.xml, upload it to your web root, and reference it from robots.txt with Sitemap: https://example.com/sitemap.xml.

What actually affects crawling

lastmod is the one field that matters. Google uses it to decide whether re-crawling a URL is worthwhile — but only if it is consistently accurate. If it reflects your build date rather than the content's change date, every page looks freshly modified on every deploy, the signal is discarded, and you have lost the one lever the sitemap gave you. Either supply true per-page dates or omit the field.

priority and changefreq are close to inert. Google has confirmed it ignores both. They are still valid XML and some other crawlers read them, so setting them costs nothing — just do not expect a ranking effect. The automatic-by-depth option is there because it produces a plausible gradient if a validator or a client insists on the field.

What belongs in a sitemap: canonical, indexable, 200-status URLs. Not redirects, not noindex pages, not URLs blocked in robots.txt, and not parameter variants of pages already listed — those all waste crawl budget and can trigger "sitemap contains URLs which are blocked" warnings. Strip query strings if your list came from analytics; use the canonical grouper first if you suspect duplicates.

Limits: 50 000 URLs and 50 MB uncompressed per file. Both are checked and reported. Over either, split the list and reference the parts from a <sitemapindex>.

FAQ

Can it crawl my site to find the URLs?

No — a browser tab cannot crawl a site it does not have CORS access to. That is the honest limit of a client-side tool. Get the list from your CMS, your framework's route list, a find over your build output, or a desktop crawler, then bring it here.

Do I need a sitemap index?

Only above 50 000 URLs, or when you want separate sitemaps per section or content type. An index is a small XML file listing other sitemap URLs; generate the parts here and hand-write the index.

Should I gzip it?

You can — sitemap.xml.gz is valid and saves bandwidth on large files. Serving the plain file with gzip transfer encoding gets you the same saving with less to manage.

How do I check an existing sitemap?

Paste it into the sitemap URL lister, which reads it back into a table with stats and flags the common problems.