Sitemap XML Generator
Generate a sitemaps.org-compliant XML sitemap (or sitemap index) from a list of URLs, one per line. Supports per-URL lastmod/changefreq/priority via an optional CSV header row, plus global defaults, with proper XML escaping of query strings and special characters. Runs entirely in your browser.
Input
One absolute http(s) URL per line. For per-URL lastmod/changefreq/priority, start with a CSV header row: url,lastmod,changefreq,priority
Default Settings
Applied to URLs that don't specify their own changefreq via the CSV format.
Applied to URLs that don't specify their own priority via the CSV format.
Leave off (and use the CSV format's lastmod column) for reproducible output.
Output
Summary
| Metric | Value |
|---|---|
| No data yet | |
Guides
Turn a list of page URLs into a valid sitemaps.org XML sitemap — the file search engines use to discover and prioritize your pages — without hand-writing <url> blocks. Paste your URLs, set defaults, and copy or download the finished sitemap.xml.
Everything runs in your browser. Nothing you paste is uploaded, which makes this safe for staging URLs or sites that aren't public yet.
How to use it
- Pick a Mode: Sitemap (urlset) for a page-level sitemap, or Sitemap Index (sitemapindex) for a sitemap of sitemaps — the format large sites use once a single sitemap would exceed 50,000 URLs.
- Paste your URLs, one per line. Every URL should be absolute (
https://example.com/page, not/page). - Optionally set a default Change Frequency and Priority, applied to every URL that doesn't specify its own.
- Copy the generated XML, or download it as
sitemap.xml. - Check the Summary table for a quick sanity check: URL count, how many parsed as valid absolute URLs, and the output size in bytes.
Per-URL lastmod, changefreq and priority
Most sitemaps just need one shared changefreq/priority for every URL — that's what the default selects are for. When individual pages genuinely differ, start the URLs box with a CSV header row instead of plain URLs:
url,lastmod,changefreq,priority
https://example.com/,2025-01-15,daily,1.0
https://example.com/blog/post-1,2025-01-10,weekly,0.6
Recognized headers are url/loc/location, lastmod/last_modified/date, changefreq/change_frequency/frequency, and priority — column order doesn't matter, and you can omit any column you don't need. A row's own value always wins over the page-wide default; an empty cell falls back to the default. The tool only switches into CSV mode when the first line contains a comma and the word "url" or "loc" — a plain one-URL-per-line list is untouched.
Correctness details
Every <loc> (and <lastmod>/<changefreq>/<priority>) value is XML-entity escaped, so a URL with a query string like ?a=1&b=2 renders as ?a=1&b=2 — the ampersand is escaped, which is required for the document to parse as valid XML at all. This is the single most common bug in hand-rolled sitemap generators; this tool gets it right by construction.
Priority is a decimal from 0.0 to 1.0; changefreq is one of always, hourly, daily, weekly, monthly, yearly, or never per the spec. Both are optional — omit them and search engines fall back to their own heuristics, which is the sitemaps.org-recommended default for most sites anyway.
What about lastmod dates?
Give each URL (or row) an explicit date for reproducible output. There's also a "use today's date" checkbox for URLs without one, handy for a one-off publish — just know it makes the output change every day, so it's off by default.
Sitemap or sitemap index?
Use a plain sitemap for most sites. Switch to a sitemap index only once you're generating (or already have) more than one sitemap file — for example, one per content type — and need a single entry point listing them all for search engines to crawl.