diff --git a/project/src/app/sitemap.ts b/project/src/app/sitemap.ts new file mode 100644 index 0000000..6d4bcb9 --- /dev/null +++ b/project/src/app/sitemap.ts @@ -0,0 +1,39 @@ +import type { MetadataRoute } from "next"; +import { roadmapRegistry, getAllRoadmapTopicParams } from "../data/roadmaps"; + +export default function sitemap(): MetadataRoute.Sitemap { + const baseUrl = process.env.NEXT_PUBLIC_SITE_URL ?? "https://demon-tech-roadmap.vercel.app"; + + const staticRoutes: MetadataRoute.Sitemap = [ + { url: `${baseUrl}/`, lastModified: new Date(), changeFrequency: "weekly", priority: 1 }, + { url: `${baseUrl}/docs/quick-start`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/how-roadmaps-work`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/learning-paths`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/all-roadmaps`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.9 }, + { url: `${baseUrl}/docs/by-category`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.8 }, + { url: `${baseUrl}/docs/project-ideas`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/study-guide`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/best-practices`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/common-questions`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/contributing`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/about-demontech`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/our-mission`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.8 }, + { url: `${baseUrl}/docs/changelog`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.8 }, + ]; + + const roadmapRoutes: MetadataRoute.Sitemap = Object.keys(roadmapRegistry).map((slug) => ({ + url: `${baseUrl}/roadmaps/${slug}`, + lastModified: new Date(), + changeFrequency: "weekly", + priority: 0.9, + })); + + const topicRoutes: MetadataRoute.Sitemap = getAllRoadmapTopicParams().map(({ roadmapSlug, topicId }) => ({ + url: `${baseUrl}/roadmaps/${roadmapSlug}/topics/${topicId}`, + lastModified: new Date(), + changeFrequency: "monthly", + priority: 0.7, + })); + + return [...staticRoutes, ...roadmapRoutes, ...topicRoutes]; +}