diff --git a/.changeset/sitemap-collection-route-override.md b/.changeset/sitemap-collection-route-override.md new file mode 100644 index 0000000000..2908b4b0d2 --- /dev/null +++ b/.changeset/sitemap-collection-route-override.md @@ -0,0 +1,5 @@ +--- +"emdash": patch +--- + +Skips the default `/sitemap-[collection].xml` route injection when the host site defines its own, matching the existing behaviour for `robots.txt` and `sitemap.xml`. diff --git a/packages/core/src/astro/integration/routes.ts b/packages/core/src/astro/integration/routes.ts index 93f0efdfa3..f859258f57 100644 --- a/packages/core/src/astro/integration/routes.ts +++ b/packages/core/src/astro/integration/routes.ts @@ -842,10 +842,12 @@ export function injectCoreRoutes( }); } - injectRoute({ - pattern: "/sitemap-[collection].xml", - entrypoint: resolveRoute("sitemap-[collection].xml.ts"), - }); + if (!options.srcDir || !hasUserDefinedPublicRoute(options.srcDir, "sitemap-[collection].xml")) { + injectRoute({ + pattern: "/sitemap-[collection].xml", + entrypoint: resolveRoute("sitemap-[collection].xml.ts"), + }); + } if (!options.srcDir || !hasUserDefinedPublicRoute(options.srcDir, "robots.txt")) { injectRoute({ diff --git a/packages/core/tests/unit/astro/routes.test.ts b/packages/core/tests/unit/astro/routes.test.ts index cb1bcc31c3..52fbef6c8b 100644 --- a/packages/core/tests/unit/astro/routes.test.ts +++ b/packages/core/tests/unit/astro/routes.test.ts @@ -111,6 +111,21 @@ describe("core media route injection", () => { ); }); + it("skips the collection sitemap route when the site defines its own", async () => { + await withTempSrcDir( + { + "pages/sitemap-[collection].xml.ts": "export const GET = () => new Response('');", + }, + (srcDir) => { + const routes = collectRoutePatterns(srcDir); + + expect(routes).not.toContain("/sitemap-[collection].xml"); + expect(routes).toContain("/sitemap.xml"); + expect(routes).toContain("/robots.txt"); + }, + ); + }); + it("detects index route files for root public route overrides", async () => { await withTempSrcDir( {