Change the base URL from localhost to the production URL. Implement a check for the build environment to use mock data for generating the sitemap during the build process. This ensures that sitemap is correctly populated with project routes even when the API is not available.
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import type { MetadataRoute } from "next";
|
|
|
|
interface SitemapRoute {
|
|
url: string;
|
|
lastModified: string;
|
|
changeFrequency?:
|
|
| "always"
|
|
| "hourly"
|
|
| "daily"
|
|
| "weekly"
|
|
| "monthly"
|
|
| "yearly"
|
|
| "never";
|
|
priority?: number;
|
|
}
|
|
|
|
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|
const baseUrl = "https://dki.one";
|
|
|
|
// Fetch the sitemap data from the dynamic API routes
|
|
const response = await fetch(`${baseUrl}/api/sitemap`);
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to fetch sitemap: ${response.statusText}`);
|
|
}
|
|
const sitemapData = (await response.json()) as SitemapRoute[];
|
|
|
|
return sitemapData.map((route) => {
|
|
let changeFrequency: SitemapRoute["changeFrequency"];
|
|
let priority: number;
|
|
|
|
if (route.url === `${baseUrl}/`) {
|
|
changeFrequency = "weekly";
|
|
priority = 1.0;
|
|
} else if (route.url.startsWith(`${baseUrl}/projects`)) {
|
|
changeFrequency = "monthly";
|
|
priority = 0.8;
|
|
} else if (route.url.startsWith(`${baseUrl}/Blog`)) {
|
|
changeFrequency = "weekly";
|
|
priority = 0.6;
|
|
} else {
|
|
changeFrequency = "monthly";
|
|
priority = 0.5;
|
|
}
|
|
|
|
return {
|
|
url: route.url,
|
|
lastModified: route.lastModified,
|
|
changeFrequency,
|
|
priority,
|
|
};
|
|
});
|
|
}
|