Missing XML sitemap
No /sitemap.xml means agents and search engines must discover every page through link-following alone.
An XML sitemap is a machine-readable list of every public URL on your site, served at /sitemap.xml as application/xml. Crawlers (both search engines and AI agents) fetch it as one of their first requests on a new domain. Without it, the crawler has to follow links from your homepage and may miss pages that aren't linked from the navigation (older blog posts, deep product pages, archived content).
Agents have a finite per-domain crawl budget. With a sitemap, they fetch a curated list and prioritise; without one, they spend their budget on whatever the homepage links to and stop. Recently published pages, paginated content, and deep product catalogues are the most common casualties. A sitemap also carries lastmod timestamps, which signal to agents which pages are fresh and worth re-fetching.
Pages that are not in the sitemap are not in the index. Pages that are not in the index are not cited by agents. For e-commerce: every product not in the sitemap is invisible to AI shopping agents. For content sites: every article not in the sitemap is invisible to answer engines. The fix is mechanical, ships once, and updates automatically thereafter.
Open https://your-domain.com/sitemap.xml directly. Expect HTTP 200 with content-type application/xml and a body that opens with <?xml version="1.0" ...?> and contains <urlset> wrapping <url><loc> entries. If you get a 404, you have no sitemap. If you get HTML, your server is misrouting. Also check robots.txt for a 'Sitemap:' directive, since search engines and agents check there too.
Generate sitemap.xml at build time (preferred) or as a route handler that queries your CMS. Each <url> entry needs a <loc> (absolute URL) and ideally a <lastmod> (ISO 8601 timestamp). Reference the sitemap from robots.txt with a 'Sitemap:' line. Keep individual sitemaps under 50 MB / 50,000 URLs; use a sitemap index for larger sites.
The reference snippet above is platform-agnostic. Below are the concrete steps for the four most common stacks plus a generic fallback for any other host.
Next.js
Next.js has built-in sitemap support via app/sitemap.ts. Export a default function that returns an array of {url, lastModified, changeFrequency, priority} entries; Next serves the result at /sitemap.xml automatically. For dynamic content (CMS, DB), the function can be async, so Next will generate it at build time, or per-request if you mark it dynamic.
WordPress
WordPress 5.5+ ships a built-in XML sitemap at /wp-sitemap.xml. Most installs have it on by default; if you've disabled it (or you want a richer sitemap), Yoast SEO and Rank Math both generate sitemaps with priority/lastmod and ping search engines on update. Confirm /wp-sitemap.xml or /sitemap_index.xml returns 200; alias /sitemap.xml to whichever you use via .htaccess.
Shopify
Shopify generates /sitemap.xml automatically. Every store has one and it updates as you add products, collections, blogs, and pages. There is nothing to configure. The common failure mode is having the wrong canonical domain (the sitemap lists shop.myshopify.com instead of your custom domain) or having a third-party app that overrides robots.txt and breaks the Sitemap: line.
Webflow
Webflow generates /sitemap.xml automatically when you enable it under Site settings → SEO → Auto-generate sitemap. Switch the toggle on and re-publish. Webflow respects per-page "Exclude from sitemap" settings, so confirm the pages you care about are not flagged. CMS Collection items are included by default; static utility pages (404, search) are correctly excluded.
Static HTML / any stack
Most static-site generators emit sitemap.xml automatically: Astro has @astrojs/sitemap, Eleventy has community plugins, Hugo and Jekyll have it built in. If you're hand-rolling, write a small build script that walks your content directory and emits sitemap.xml into the output folder.
- Listing relative URLs (/about) instead of absolute URLs (https://acme.com/about). The XML schema requires absolute. Relative URLs are silently dropped by most parsers.
- Including non-canonical URLs, e.g. both /products/foo and /products/foo?ref=email. Pick the canonical and list only that. Tracking-parameter URLs in the sitemap can cause crawl-budget waste and duplicate-content signals.
- Forgetting to update lastmod. Agents use lastmod to decide whether to refetch; static lastmod=2024-01-01 across the whole site means agents stop checking for updates.
- Not adding the Sitemap: line to robots.txt. Even if the sitemap exists at /sitemap.xml, naming it explicitly in robots.txt removes ambiguity.
- Including pages with noindex meta tags. The sitemap and the meta tag contradict each other; agents interpret it as a configuration mistake and may drop the URL.
Fetch https://your-domain.com/sitemap.xml and confirm it returns 200 with valid XML. Spot-check three URLs from the body to make sure they load. Submit the sitemap to Google Search Console and Bing Webmaster Tools (one-time). Then run a fresh AgentSpeed scan, and the "sitemap present" check should pass.
How big can a sitemap be?
50,000 URLs and 50 MB uncompressed per file. Beyond that, split into multiple sitemaps and add a sitemap index file at /sitemap-index.xml that lists them.
Should I include images and videos?
You can. Google supports image and video extensions in sitemap entries. For most agents, the URL list alone is sufficient. Add image/video markup only if you actively rely on image search.
Sitemap.xml vs llms.txt, do I need both?
Yes. They serve different purposes. sitemap.xml is the exhaustive list (every page, machine-readable). llms.txt is the curated highlights (your best pages, in priority order). Agents read both and weight them differently.
Free scan, no signup. The score page is permanent and citable, so you can link it from your team's remediation ticket alongside this guide for “Missing XML sitemap”.