Search Console reports coverage per submitted sitemap, so one file per page family is what will make W2's location pages measurable when they land. The index's lastmod is generation time, which is the correct semantic there — unlike on a <url>, where it would be a claim we cannot support. Children sit under /sitemaps/ because Next only treats a whole bracketed path segment as dynamic; a route folder named sitemap-[...parts] would be read as a literal static segment and never match. Confirmed by the build output, which lists /sitemaps/[...parts] as a dynamic route. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015mWQnpye9F299NVRCCSRvj
25 lines
726 B
TypeScript
25 lines
726 B
TypeScript
import { NextResponse } from 'next/server';
|
|
import { proxySitemap } from '@/lib/sitemapProxy';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
export const runtime = 'nodejs';
|
|
|
|
/**
|
|
* Children are /sitemaps/static.xml and /sitemaps/schools-{n}.xml. The name is
|
|
* validated here rather than passed through, so this route cannot be used to
|
|
* reach arbitrary backend paths.
|
|
*/
|
|
const CHILD = /^(static|schools-\d+)\.xml$/;
|
|
|
|
export async function GET(
|
|
_request: Request,
|
|
{ params }: { params: Promise<{ parts: string[] }> },
|
|
) {
|
|
const { parts } = await params;
|
|
const name = parts.join('/');
|
|
if (!CHILD.test(name)) {
|
|
return new NextResponse('Not found', { status: 404 });
|
|
}
|
|
return proxySitemap(`/sitemaps/${name}`);
|
|
}
|