Create a SITEMAP file quickly in your browser and download it instantly—no installs needed.
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> </urlset>
https://www.example.com/page), absolute paths only. Paste an exported list from your CMS, a crawler (Screaming Frog, Sitebulb), or find . -name '*.html'. A single sitemap holds up to 50,000 URLs and 50 MB uncompressed per the sitemaps.org spec.lastmod (W3C date YYYY-MM-DD or full ISO 8601) to every URL, or leave blank to omit. Pick a default changefreq (always, hourly, daily, weekly, monthly, yearly, never) and priority (0.0–1.0, default 0.5). Note: Google ignores changefreq and priority — only lastmod is read, and only if it's verifiably accurate across crawls.<urlset> document declaring xmlns="http://www.sitemaps.org/schemas/sitemap/0.9". The preview shows the full XML — one <url> block per entry with <loc> (required), plus any <lastmod>, <changefreq>, <priority> you set.sitemap.xml: Click Copy for the clipboard or Download to save the file. Upload to your site root so it's reachable at https://yourdomain.com/sitemap.xml, then add Sitemap: https://yourdomain.com/sitemap.xml to your robots.txt and submit the URL in Google Search Console → Sitemaps. Bing Webmaster Tools accepts the same file.A sitemap.xml is a machine-readable index of the URLs you want indexed. It doesn't replace good internal linking, but it tells Google and Bing which pages exist (especially orphan pages, deep pagination, and newly-published URLs) and when they last changed — Google explicitly uses <lastmod> to schedule re-crawls when the date is trustworthy. Common reasons to maintain one:
<xhtml:link rel="alternate" hreflang="…"> entries in the sitemap (namespace xmlns:xhtml="http://www.w3.org/1999/xhtml") to declare en-US / en-GB / fr-FR / es-MX variants in one file. Easier to maintain than <link rel="alternate"> tags on every page.http://www.google.com/schemas/sitemap-image/1.1) let you declare up to 1,000 <image:image> entries per <url>. Video sitemaps surface playable content to Google Video; News sitemaps push fresh articles to Google News (publishers only, articles ≤2 days old).<lastmod> on pages that actually changed signals Googlebot to re-crawl those specifically and skip the rest. Sites with 100K+ URLs see real bot-budget savings from getting lastmod right.Pair your sitemap with a robots.txt declaring Disallow rules and a Sitemap: line pointing at the file — crawlers fetch robots.txt first and follow the sitemap reference automatically.
| Element | Required | Format | Google behavior (as of 2023+) |
|---|---|---|---|
<loc> |
Yes | Absolute URL, max 2,048 characters, URL-encoded | Read — the URL to crawl |
<lastmod> |
No | W3C Datetime: YYYY-MM-DD or full ISO 8601 (2026-05-25T14:30:00+00:00) |
Read — used to schedule re-crawls when consistently accurate. Don't auto-stamp it on every publish or Google starts ignoring it. |
<changefreq> |
No | always, hourly, daily, weekly, monthly, yearly, never | Ignored. Confirmed by Google Search Central — no effect on crawl schedule. |
<priority> |
No | 0.0 to 1.0 (default 0.5) | Ignored. Google does not use it to rank or prioritize crawl. Bing also publicly downweighted it years ago. |
The practical implication: omit changefreq and priority to keep your sitemap small. A 50,000-URL sitemap with just <loc> and <lastmod> is roughly 4–6 MB; adding the two ignored fields can push it past 10 MB with zero SEO upside.
Per the sitemaps.org protocol, a single sitemap is capped at 50,000 URLs and 50 MB uncompressed (gzip is allowed for transit; the uncompressed size still has to fit). Above that, you split into multiple sitemaps under one index file.
| File type | Schema namespace | Caps | Purpose |
|---|---|---|---|
| Sitemap | http://www.sitemaps.org/schemas/sitemap/0.9 |
50,000 URLs, 50 MB uncompressed | Lists actual page URLs |
| Sitemap index | Same namespace, <sitemapindex> root |
50,000 child sitemaps, 50 MB | Lists sitemap files; each <sitemap> has <loc> + optional <lastmod> |
| Image extension | http://www.google.com/schemas/sitemap-image/1.1 |
Up to 1,000 <image:image> per <url> |
Declares images for Google Images |
| Video extension | http://www.google.com/schemas/sitemap-video/1.1 |
One <video:video> per <url> (multiple <url>s OK) |
Declares playable video for Google Video |
| News extension | http://www.google.com/schemas/sitemap-news/0.9 |
Articles published in the last 2 days only | Push to Google News (approved publishers only) |
| hreflang | xmlns:xhtml="http://www.w3.org/1999/xhtml" |
<xhtml:link rel="alternate" hreflang="…"> per <url> |
Declare language/region variants |
A site with 200,000 URLs typically ships sitemap.xml (the index) pointing to sitemap-1.xml through sitemap-4.xml, each with 50,000 URLs. Submit only the index URL in Search Console — Google fetches the children automatically.
Per the sitemaps.org protocol (the spec Google, Bing, and Yandex all honor), one sitemap file is capped at 50,000 URLs and 50 MB uncompressed — whichever you hit first. The 50 MB cap is the uncompressed byte size; you can serve a gzipped file (sitemap.xml.gz) but the file decompresses below 50 MB. Above either cap, split into multiple sitemaps and reference them from a sitemap index file. A sitemap index can itself list up to 50,000 child sitemaps, so a single index points to up to 2.5 billion URLs in theory.
No. Google Search Central has confirmed publicly (and Gary Illyes has reiterated on the search-off-the-record podcast) that <priority> and <changefreq> are ignored. They were optional hints from the 2005 spec era; modern Googlebot uses its own crawl-scheduling model based on observed update frequency, link signals, and <lastmod> accuracy. The only sitemap field Google actively reads is <lastmod>, and only when it's verifiably accurate — auto-stamping today's date on every URL trains Google to ignore your lastmod too.
Three options, in descending order of recommendation:
robots.txt (passive): add Sitemap: https://yourdomain.com/sitemap.xml on its own line. Every crawler that fetches robots.txt picks it up — Googlebot, Bingbot, DuckDuckBot, Yandex, plus SEO tools like Screaming Frog and Ahrefs.bing.com/ping?sitemap=…) was deprecated in 2023.Google's /ping endpoint was retired in 2023 — submission via Search Console or robots.txt is the only supported path now.
Yes, technically — Google accepts RSS 2.0 and Atom 1.0 feeds as sitemap submissions, and many CMS platforms (WordPress, Ghost) expose feeds at /feed/. The catch: a feed only carries your most recent 10–25 items, so it works as a complement to a full XML sitemap (faster fresh-content discovery) but not a replacement. If your goal is to enumerate every page on the site, you need the XML sitemap.
For images, add the namespace xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" to the root <urlset> and nest <image:image><image:loc>https://…</image:loc></image:image> inside each <url> — up to 1,000 images per URL. For videos, use xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" and include <video:video> with required <video:thumbnail_loc>, <video:title>, <video:description>, and one of <video:content_loc> or <video:player_loc>. Both extensions live inside a normal sitemap — no separate file needed unless you want logical separation.
Declare the namespace xmlns:xhtml="http://www.w3.org/1999/xhtml" on <urlset>, then inside each <url> block list every language variant (including the URL itself) as <xhtml:link rel="alternate" hreflang="en-US" href="https://…" />. Use ISO 639-1 language codes (en, fr, es, ar) optionally paired with ISO 3166-1 alpha-2 region codes (en-US, en-GB, fr-CA, es-MX). Add hreflang="x-default" for the fallback URL. Google strongly prefers hreflang in the sitemap for sites with 1,000+ pages — less risk of inconsistent on-page <link> tags drifting out of sync.
Only canonical URLs — the version you want Google to index. Don't list ?utm_source=… tracking variants, faceted-search permutations (?color=blue&size=L), or session-ID URLs. Including non-canonicals wastes crawl budget and risks Google indexing the parameterized version instead of the clean one. If a URL has a <link rel="canonical"> pointing elsewhere, list the canonical target in the sitemap, not the source.
Whenever your URL inventory changes — new pages, deleted pages, or substantive content updates. Static sites can regenerate on every deploy (most static-site generators do this automatically: Hugo, 11ty, Next.js, Astro). Dynamic sites typically regenerate nightly via cron or on-publish hook. Don't regenerate hourly with stamped lastmod="today" on every URL — that's the fastest way to teach Google to ignore your lastmod entirely.