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;
}
}