ユーザーアイコン

mizuko

約1か月前

0
0

Next.jsでsitemapを動的に生成する

Next.js
SEO

app/sitemap.tsを作成する。

  • changeFrequencyは更新頻度
  • priorityは相対的な重要度
export default async function sitemap(): Promise<MetadataRoute.Sitemap> { const baseUrl = process.env.NEXT_PUBLIC_BASE_URL ?? 'http://localhost:3000'; const defaultPages: MetadataRoute.Sitemap = [ { url: `${baseUrl}/`, lastModified: new Date(), changeFrequency: 'daily', priority: 1, }, { url: `${baseUrl}/about`, lastModified: new Date(), changeFrequency: 'monthly', priority: 0.8, }, { url: `${baseUrl}/news`, lastModified: new Date(), changeFrequency: 'weekly', priority: 0.9, }, { url: `${baseUrl}/policy`, lastModified: new Date(), changeFrequency: 'yearly', priority: 0.5, }, { url: `${baseUrl}/terms`, lastModified: new Date(), changeFrequency: 'yearly', priority: 0.5, }, ]; try { const [memos, notes] = await Promise.all([getAllMemos(), getAllNotes()]); const memoPages = memos.map((memo) => ({ url: `${baseUrl}/memo/${memo.id}`, lastModified: new Date(memo.updatedAt), changeFrequency: 'monthly' as const, priority: 0.7, })); const notePages = notes.map((note) => ({ url: `${baseUrl}/note/${note.id}`, lastModified: new Date(note.updatedAt), changeFrequency: 'monthly' as const, priority: 0.7, })); return [...defaultPages, ...memoPages, ...notePages]; } catch (error) { console.error('Error generating sitemap:', error); // エラー時は静的ページだけでも返す return defaultPages; } }