sitemap.js 使用教程
1. 项目介绍
sitemap.js 是一个为 Node.js 设计的高级别流式 sitemap 生成库和命令行界面(CLI)。它可以轻松地将一组 URL 列表转换成 sitemap XML 文件。这个库非常适合需要生成网站地图以提高搜索引擎优化(SEO)的开发者。
2. 项目快速启动
在开始之前,确保你的系统中已经安装了 Node.js。
安装
通过 npm 安装 sitemap.js:
npm install --save sitemap
生成一次性 sitemap
如果只是想将一个 URL 列表转换成 sitemap,可以使用 CLI 工具。假设你有一个名为 listofurls.txt
的文件,其中包含了要生成 sitemap 的 URL 列表:
npx sitemap < listofurls.txt
如果你想在代码中生成 sitemap,可以使用以下示例:
const { SitemapStream, streamToPromise } = require('sitemap');
const { Readable } = require('stream');
// 一个包含你链接的数组
const links = [
{ url: '/page-1/', changefreq: 'daily', priority: 0.3 }
];
// 创建一个写入流
const stream = new SitemapStream({ hostname: 'https://...' });
// 返回一个解析为你 XML 字符串的 Promise
return streamToPromise(Readable.from(links).pipe(stream))
.then(data => data.toString());
服务器上托运 sitemap 并定期更新
如果你的网站 URL 数量少于 50,000 个,可以使用以下方法在你的服务器上创建和更新 sitemap:
const express = require('express');
const { SitemapStream, streamToPromise } = require('sitemap');
const { createGzip } = require('zlib');
const { Readable } = require('stream');
const app = express();
let sitemap;
app.get('/sitemap.xml', function(req, res) {
res.header('Content-Type', 'application/xml');
res.header('Content-Encoding', 'gzip');
if (sitemap) {
res.send(sitemap);
return;
}
try {
const smStream = new SitemapStream({ hostname: 'https://example.com/' });
const pipeline = smStream.pipe(createGzip()).pipe(res);
smStream.write({ url: '/page-1/', changefreq: 'daily', priority: 0.3 });
smStream.write({ url: '/page-2/', changefreq: 'monthly', priority: 0.7 });
// ... 添加更多 URL
streamToPromise(pipeline).then(sm => sitemap = sm);
smStream.end();
} catch (e) {
console.error(e);
res.status(500).end();
}
});
app.listen(3000, () => {
console.log('listening');
});
3. 应用案例和最佳实践
生成多个 sitemap 和索引文件
如果你知道你的 sitemap 将包含超过 50,000 个 URL,你可以使用更复杂的接口来创建一个新的 sitemap 文件,每 45,000 个条目就会添加到一个 sitemap 索引中:
const { createReadStream, createWriteStream } = require('fs');
const { resolve } = require('path');
const { createGzip } = require('zlib');
const { simpleSitemapAndIndex, lineSeparatedURLsToSitemapOptions } = require('sitemap');
// 写入 sitemaps 和索引到指定的目录
simpleSitemapAndIndex({
hostname: 'https://example.com',
destinationDir: './',
sourceData: lineSeparatedURLsToSitemapOptions(createReadStream('./your-data.json.txt'))
}).then(() => {
// 执行后续操作
});
4. 典型生态项目
目前没有特定于 sitemap.js 的典型生态项目列出。不过,任何需要生成 sitemap 的 Node.js 项目都可以考虑使用 sitemap.js 作为其 sitemap 生成工具。这个库的灵活性和易用性使其成为创建和管理网站地图的理想选择。