Skip to content

XML Sitemap Generator

Turn a reviewed list of page URLs into a standards-based XML sitemap without crawling or uploading the site.

Privacy: your files never leave your device. All processing happens locally in your browser.

How to use

  1. 1.Paste one absolute HTTP or HTTPS page URL per line, using one host including any non-default port per file.
  2. 2.Leave optional fields blank for loc-only XML, or apply a truthful shared lastmod, changefreq, or priority.
  3. 3.Generate and review the complete XML and counts, then download sitemap.xml for publication on the represented site.

About XML Sitemap Generator

Sitemap Generator converts a URL list you already have into one XML sitemap file. Paste one absolute page URL per line, optionally supply a shared last-modified value, change frequency, or priority, and generate sitemap.xml. The tool validates the complete request, normalizes URLs, removes duplicates while preserving first-seen order, entity-escapes XML data, displays the finished XML, and prepares a local download. All parsing and file creation happen in the current browser tab. URLs and generated XML are not uploaded. This is a list-to-XML utility, not a crawler. It does not visit pages, follow links, inspect canonical tags, read modification dates, discover redirects, verify HTTP status, determine indexability, or submit the result to a search engine. The generated file is only as accurate as the URLs and optional metadata supplied. Review redirects, duplicate content, blocked pages, private pages, and missing pages before publication. Each nonblank line must be an absolute HTTP or HTTPS URL. Bare domains, relative paths, FTP URLs, raw whitespace, control characters, malformed percent escapes, embedded credentials, and fragments are rejected. Leading or trailing whitespace on a nonblank line is an error rather than being silently trimmed. Whitespace-only lines are ignored. Credentials are rejected so a username or password cannot be copied into a public sitemap. Fragments are rejected because they are not sent to the server as part of the HTTP request and should not create multiple sitemap entries for one fetched resource. Valid URLs are serialized with the browser URL parser before deduplication and output. This lowercases host names, removes default ports, adds the root slash when required, and percent-encodes non-ASCII URL components. Existing valid percent escapes remain URL escapes. One generated file is restricted to one serialized host, including any non-default port. This follows the Sitemap protocol's single-host rule. HTTP and HTTPS URLs for the same host are accepted in one file; the scheme is not incorrectly treated as part of the host comparison. A non-default port is part of the serialized host, so mixing example.com and example.com:8443 fails. The generator cannot verify where the sitemap will be hosted or whether cross-site submission permissions exist. Deduplication occurs after URL serialization. An uppercase host and its lowercase form identify the same URL, as do an explicit default port and its normalized form. The first occurrence determines output order and later occurrences increment the duplicate count. Invalid lines are never skipped, and excess valid URLs are never silently dropped. The XML begins with a UTF-8 declaration and a urlset element using the official http://www.sitemaps.org/schemas/sitemap/0.9 namespace. Each entry contains url and loc. Locations are XML-escaped after URL normalization. Ampersand, apostrophe, quotation mark, greater-than sign, and less-than sign use XML entities, with ampersand replaced first so generated entities are not escaped twice. Optional fields are omitted by default. If supplied, the same value is applied to every URL. Last modified accepts a real Gregorian YYYY-MM-DD date or a complete date-time with seconds and Z or a valid UTC offset. Calendar dates, leap years, clock fields, and timezone limits are checked. Leading or trailing whitespace is rejected rather than removed. Use lastmod only for a page's real significant modification and only when one shared value is truthful for every entry. Change frequency accepts always, hourly, daily, weekly, monthly, yearly, or never. Priority accepts a decimal value from 0.0 through 1.0. These are protocol hints, not crawl commands or ranking guarantees. Invalid optional metadata fails the whole generation. The protocol permits fewer than 2,048 characters in each loc, up to 50,000 URLs, and up to 52,428,800 uncompressed bytes. This interactive browser tool intentionally uses lower whole-file budgets: 10,000 unique URLs, 5,000,000 UTF-16 input code units, and 10,485,760 UTF-8 XML bytes. A normalized location may contain at most 2,047 characters. The lower limits bound parsing, preview, Blob, and browser memory without pretending to be protocol maxima. Every limit is all-or-nothing. The 10,000th unique URL is accepted and the next unique URL fails. Duplicate lines do not consume output slots. XML size is measured after URL serialization, XML escaping, optional tags, indentation, and UTF-8 encoding. The exact 10,485,760-byte boundary is accepted; one additional byte is rejected. No shortened XML, ellipsis, capped preview, or partial download is returned. The download uses a temporary Object URL owned by the current result. Editing URLs or any option immediately revokes it and clears old XML, download, and error. Generating again revokes the previous download before validation. Blob or Object URL failure leaves no stale result. Unmount also revokes the current URL. Tests cover protocol-derived normalization anchors, credentials and fragments, single-host behavior across schemes and ports, XML entities, optional metadata, deduplication order, URL length, exact and over-limit URL counts, exact and over-limit UTF-8 budgets, and explicit no-truncation failures. The generator does not create sitemap indexes, image, video, or news extensions, hreflang markup, gzip files, robots.txt rules, or Search Console submissions.

Methodology & sources

Split LF, CRLF, or CR input into lines and ignore only whitespace-only lines. Reject leading or trailing whitespace on nonblank lines, raw controls, malformed percent escapes, credentials, fragments, non-absolute input, and schemes other than HTTP or HTTPS. Serialize each accepted URL with the WHATWG browser URL parser, enforce fewer than 2,048 serialized characters, and require one serialized host including a non-default port while allowing HTTP and HTTPS for that host. Deduplicate href strings in first-seen order. Validate real lastmod calendar and timezone values, seven changefreq values, and priority from 0.0 through 1.0 without silently trimming. Escape five XML entities and emit the official UTF-8 urlset. Measure final XML with TextEncoder; accept exactly 10,485,760 bytes and reject one byte more. Cap output at 10,000 unique URLs without truncation. Tests include external protocol anchors and every stated boundary.

Frequently asked questions

Does this tool crawl my website to find URLs?
No. It converts only the URLs pasted into the editor. It does not request pages, follow links, inspect canonicals, check status codes, or submit the sitemap.
Why are credentials and fragments rejected?
Credentials should not be published in sitemap locations. URL fragments are not sent to the server in HTTP requests and should not create separate sitemap entries for one fetched resource.
Can HTTP and HTTPS URLs appear together?
Yes when their serialized host, including any non-default port, is the same. The protocol rule is one host, not one origin. Different hosts or non-default ports require separate files.
Why are the tool limits below protocol maxima?
The protocol allows 50,000 URLs and 52,428,800 bytes, while this browser tool uses 10,000 URLs and 10 MiB to bound preview and Blob memory. It fails instead of truncating.

SEO & Webmaster guides

View all