← Back to the blog
Technical SEO

Astro sitemap setup: generate, filter, and check the deployed XML

Configure @astrojs/sitemap with the correct site origin, identify sitemap-index.xml, handle missing dynamic pages, and inspect the deployed output before submission.

By Launcholio6 min read

Install the integration and set the public origin

Use the official @astrojs/sitemap integration and set site to your canonical production origin in Astro's configuration. The integration creates a sitemap index and numbered sitemap files during the build. Start with the generated index rather than assuming your endpoint is named /sitemap.xml.

The configuration below follows the official integration documentation checked on October 7, 2026. The customSitemaps option later in this guide requires @astrojs/sitemap 3.5.0 or later. Adapt it to your existing config and installed version; keep the production domain consistent with canonical tags and links.

npx astro add sitemap

// astro.config.mjs
import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';

export default defineConfig({
  site: 'https://example.com',
  integrations: [sitemap()],
});

Know which file contains page URLs

The index can load correctly while a child file returns HTML or a 404. Check both levels. A browser's XML display is not enough to show that every listed route resolves to the right page.

FileContainsHow to inspect it
sitemap-index.xmlLinks to child sitemap filesOpen each listed child; do not count these entries as pages
sitemap-0.xmlPage URL entriesReview canonical URLs, route coverage, and exclusions
Additional numbered filesFurther page URL batchesInspect the children actually referenced by the index

Filter pages that should not be listed

Make the filter match your route rules. A path-based filter handles the account route without depending on a trailing slash or a particular host string. Do not rely on a sitemap filter to protect account data; authentication still belongs on the application route.

For a blog, ensure unpublished content is excluded in the route-generation logic as well as the sitemap. Omitting a page from a sitemap does not make an otherwise public URL private or unindexable.

// Merge into your existing Astro configuration.
sitemap({
  filter: (page) => {
    const path = new URL(page).pathname;
    return path !== '/account' && !path.startsWith('/account/');
  },
})

Handle missing server-rendered or external routes deliberately

Compare the generated output with an inventory of your important public routes. Build-time generation cannot discover every runtime-only URL from a database. Astro's integration provides customPages for additional page URLs and customSitemaps for external sitemap files; verify support in your installed version.

Only include routes you intend to be public and canonical. For a large runtime catalogue, a separately maintained sitemap endpoint may be a better source than manually listing every item in configuration. Keep its publication and deletion rules aligned with the actual pages.

sitemap({
  customPages: ['https://example.com/runtime-public-page'],
  // Where supported by your installed integration:
  customSitemaps: ['https://example.com/catalog/sitemap.xml'],
})

Make the sitemap discoverable

Point the declaration to the index that your production deployment actually serves. You can also submit that URL in Search Console. A successful sitemap submission establishes that Google read the file; it does not establish that every listed page is indexed.

# public/robots.txt
User-agent: *
Allow: /

Sitemap: https://example.com/sitemap-index.xml

Check the deployment before submitting

  • Open /sitemap-index.xml on the production domain while signed out.
  • Inspect the HTTP status, final URL, and XML body, then open every relevant child sitemap.
  • Confirm there are no localhost, preview-domain, private, deleted, or duplicate parameter URLs in the page entries.
  • Compare important routes with the exported URL list and investigate missing sections.
  • If a child returns HTML, inspect hosting rewrites and the deployed build artifacts before resubmitting.

Ready for a pre-launch audit?

Run the public analyzer and get a prioritised report for the URL you are about to share.

Run the SEO audit
Astro sitemap setup: generate, filter, and check the deployed XML · Launcholio