79 lines
1.9 KiB
TypeScript
79 lines
1.9 KiB
TypeScript
|
|
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>`;
|
||
|
|
}
|