init: Vite+React+Tailwind v2 site with HTML content from WP, RSS feed, external feed aggregator, prerender
This commit is contained in:
58
scripts/build-sitemap.js
Normal file
58
scripts/build-sitemap.js
Normal file
@@ -0,0 +1,58 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = path.resolve(__dirname, '..');
|
||||
const DIST = path.join(ROOT, 'dist');
|
||||
|
||||
const SITE = 'https://pushkinohistory.ru';
|
||||
|
||||
const posts = JSON.parse(fs.readFileSync(path.join(ROOT, 'src/content/posts.json'), 'utf8'));
|
||||
const pages = JSON.parse(fs.readFileSync(path.join(ROOT, 'src/content/pages.json'), 'utf8'));
|
||||
|
||||
const today = new Date().toISOString().slice(0, 10);
|
||||
|
||||
const urls = [
|
||||
{ loc: `${SITE}/`, lastmod: today, priority: '1.0', changefreq: 'weekly' },
|
||||
{ loc: `${SITE}/news/`, lastmod: today, priority: '0.8', changefreq: 'hourly' },
|
||||
];
|
||||
for (const p of pages) {
|
||||
urls.push({
|
||||
loc: `${SITE}/${p.slug}/`,
|
||||
lastmod: p.date.slice(0, 10),
|
||||
priority: '0.7',
|
||||
changefreq: 'yearly',
|
||||
});
|
||||
}
|
||||
for (const p of posts) {
|
||||
urls.push({
|
||||
loc: `${SITE}/${p.slug}/`,
|
||||
lastmod: p.date.slice(0, 10),
|
||||
priority: '0.6',
|
||||
changefreq: 'monthly',
|
||||
});
|
||||
}
|
||||
|
||||
const xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
${urls.map((u) => ` <url>
|
||||
<loc>${u.loc}</loc>
|
||||
<lastmod>${u.lastmod}</lastmod>
|
||||
<changefreq>${u.changefreq}</changefreq>
|
||||
<priority>${u.priority}</priority>
|
||||
</url>`).join('\n')}
|
||||
</urlset>
|
||||
`;
|
||||
|
||||
fs.mkdirSync(DIST, { recursive: true });
|
||||
fs.writeFileSync(path.join(DIST, 'sitemap.xml'), xml);
|
||||
|
||||
const robots = `User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: ${SITE}/sitemap.xml
|
||||
`;
|
||||
fs.writeFileSync(path.join(DIST, 'robots.txt'), robots);
|
||||
|
||||
console.log(`sitemap: ${urls.length} URLs → dist/sitemap.xml`);
|
||||
Reference in New Issue
Block a user