Next.js 15 で output: 'export' 使用時の sitemap.ts 実装方法
この記事は人間が実装を確認したのち、AIが記事を執筆しました。 背景 Next.js 15で静的サイト生成(output: 'export')を使用する際、sitemap.tsの実装でエラーが発生する場合があります。 Error: export const dynamic = "force-static"/export const revalidate not configured on route "/sitemap.xml" with "output: export". 解決方法 この問題は、sitemap.tsに以下の2つのエクスポートを追加することで解決できます: // src/app/sitemap.ts import { MetadataRoute } from 'next'; export const dynamic = 'force-static'; export const revalidate = false; export default function sitemap(): MetadataRoute.Sitemap { // sitemap生成ロジック } 実装例 import { MetadataRoute } from 'next'; import { routing } from '@/i18n/routing'; export const dynamic = 'force-static'; export const revalidate = false; export default function sitemap(): MetadataRoute.Sitemap { const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000'; const staticPages = [ '', // Home page '/about', '/example', ]; const sitemapEntries: MetadataRoute.Sitemap = routing.locales.flatMap((locale) => staticPages.map((page) => ({ url: `${baseUrl}/${locale}${page}`, lastModified: new Date(), changeFrequency: page === '' ? 'daily' : 'weekly' as const, priority: page === '' ? 1 : 0.8, })) ); return sitemapEntries; } 動作確認 この実装により、npm run build実行時に/out/sitemap.xmlが正常に生成されます。 注意点 dynamic = 'force-static'のみでは不十分で、revalidate = falseも必要です 環境変数やインポートしたモジュールの使用も可能です ビルド時に静的に解決される値であれば、動的な値も使用できます 代替案 もし上記の方法で解決しない場合は、以下の代替案があります: ...
