CloudProxy/lib/sitemap.ts

79 lines
1.9 KiB
TypeScript
Raw Permalink Normal View History

2025-09-15 18:30:09 +08:00
export interface SitemapUrl {
url: string;
lastModified: Date;
changeFrequency: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
priority: number;
}
export const supportedLocales = ['zh-CN', 'zh-TW', 'en', 'ko', 'ja'];
export const pages = [
{
path: '',
priority: 1.0,
changeFrequency: 'weekly' as const,
},
{
path: '/products',
priority: 0.9,
changeFrequency: 'weekly' as const,
},
{
path: '/pricing',
priority: 0.9,
changeFrequency: 'monthly' as const,
},
{
path: '/support',
priority: 0.8,
changeFrequency: 'monthly' as const,
},
{
path: '/contact',
priority: 0.7,
changeFrequency: 'monthly' as const,
},
{
path: '/sitemap',
priority: 0.5,
changeFrequency: 'monthly' as const,
},
];
export function generateSitemapUrls(baseUrl: string): SitemapUrl[] {
const urls: SitemapUrl[] = [];
const now = new Date();
supportedLocales.forEach((locale) => {
pages.forEach((page) => {
urls.push({
url: `${baseUrl}/${locale}${page.path}`,
lastModified: now,
changeFrequency: page.changeFrequency,
priority: page.priority,
});
});
});
return urls;
}
export function generateSitemapXML(urls: SitemapUrl[]): string {
const urlEntries = urls
.map(
(url) => `
<url>
<loc>${url.url}</loc>
<lastmod>${url.lastModified.toISOString()}</lastmod>
<changefreq>${url.changeFrequency}</changefreq>
<priority>${url.priority}</priority>
</url>`,
)
.join('');
return `<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
${urlEntries}
</urlset>`;
}