Files
wr.do/app/sitemap.ts
2025-07-06 11:24:07 +08:00

77 lines
1.8 KiB
TypeScript

import { MetadataRoute } from "next";
import { allDocs, allPages } from "contentlayer/generated";
async function getDocumentSlugs() {
return allDocs.map((doc) => ({
slug: doc.slugAsParams,
}));
}
async function getStaticPageSlugs() {
return allPages.map((page) => ({
slug: page.slugAsParams,
}));
}
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = process.env.NEXT_PUBLIC_APP_URL || "https://wr.do";
const currentDate = new Date();
// static
const staticPages: MetadataRoute.Sitemap = [
{
url: baseUrl,
lastModified: currentDate,
changeFrequency: "daily",
priority: 1.0,
},
{
url: `${baseUrl}/login`,
lastModified: currentDate,
changeFrequency: "monthly",
priority: 0.8,
},
{
url: `${baseUrl}/feedback`,
lastModified: currentDate,
changeFrequency: "monthly",
priority: 0.8,
},
];
// (docs)/[slug]
const documentSlugs = await getDocumentSlugs();
const documentPages: MetadataRoute.Sitemap = documentSlugs.map((slug) => ({
url: `${baseUrl}/docs/${slug.slug}`,
lastModified: currentDate,
changeFrequency: "weekly" as const,
priority: 0.7,
}));
// (marketing)/[slug]
const marketingPageSlugs = await getStaticPageSlugs();
const marketingPages: MetadataRoute.Sitemap = marketingPageSlugs.map(
(slug) => ({
url: `${baseUrl}/${slug.slug}`,
lastModified: currentDate,
changeFrequency: "weekly" as const,
priority: 0.7,
}),
);
const protectedPages: MetadataRoute.Sitemap = [
{
url: `${baseUrl}/dashboard`,
lastModified: currentDate,
changeFrequency: "daily",
priority: 0.7,
},
];
return [
...staticPages,
...documentPages,
...marketingPages,
...protectedPages,
];
}