diff --git a/app/sitemap.xml/route.tsx b/app/sitemap.xml/route.tsx index 2294402..84f1b39 100644 --- a/app/sitemap.xml/route.tsx +++ b/app/sitemap.xml/route.tsx @@ -12,8 +12,8 @@ export async function GET() { }); } catch (error) { console.error("Error generating sitemap.xml:", error); + // Always return a valid sitemap with 200 so crawlers don't treat it as broken. return new NextResponse(generateSitemapXml([]), { - status: 500, headers: { "Content-Type": "application/xml" }, }); } diff --git a/lib/sitemap.ts b/lib/sitemap.ts index 8202db4..ef81db9 100644 --- a/lib/sitemap.ts +++ b/lib/sitemap.ts @@ -58,11 +58,15 @@ export async function getSitemapEntries(): Promise { orderBy: { updatedAt: "desc" }, }); } catch (error) { - // If DB isn't ready/migrated yet, still serve a valid sitemap for static pages. + // If DB isn't ready/migrated/reachable yet, still serve a valid sitemap for static pages. + if (process.env.NODE_ENV === "development") { + console.warn("Sitemap: failed to load projects; serving static entries only.", error); + } if (error instanceof PrismaClientKnownRequestError && (error.code === "P2021" || error.code === "P2022")) { return staticEntries; } - throw error; + // Also fail soft on connection/init errors in dev/staging (keeps sitemap valid for crawlers) + return staticEntries; } const projectEntries: SitemapEntry[] = projects.flatMap((p) => {