问题描述
这是我为动态生成站点地图而创建的站点地图路由。现在下一步该怎么做,以便我可以看到充满链接的 sitema.xml
sitemap.js
const { SitemapStream,streamToPromise } = require ('sitemap');
const express = require ('express');
const router = express.Router();
const Job = require ('../models/Job');
const PrivateJob =require ('../models/PrivateJob');
let sitemap;
router.get('/sitemap.xml',async(req,res)=>{
try {
const list= Job.find().select('slug');
const listPvt= PrivateJob.find().select('slug');
const jobs = list.map( ({ slug }) => `/jobs/${slug}`);
const privateJobs = listPvt.map( ({ slug }) => `/privateJobs/${slug}`);
const smStream = new SitemapStream({ hostname: 'http://localhost:3000/' })
const pipeline = smStream.pipe(createGzip());
jobs.forEach(function(item1) {
// Update as required
smStream.write({ url: item1,changefreq: 'weekly',priority: 0.8})
});
privateJobs.forEach(function(item2) {
// Update as required
smStream.write({ url: item2,priority: 0.6})
});
streamToPromise(pipeline).then(sm => sitemap = sm)
smStream.end()
// Show errors and response
pipeline.pipe(res).on('error',(e) => {throw e})
} catch (err) {
console.error(e)
res.status(500).end()
}
})
module.exports = router;
接下来要做什么,以便我在前端使用 next.js 时可以在前端发现它
解决方法
静态资产通过任何 nextjs 应用程序中的 public
目录提供。 sitemap.xml
也是一个静态资产,因此您可以将其放在公共文件夹中,搜索引擎可以使用以下方式访问它:<YOUR_DOMAIN>/sitemap.xml
。
更多关于nextjs documentation。
Nextjs 不会自动创建 sitemap.xml。也许您可以编写一个 prebuild
脚本来在构建项目后生成站点地图。为此,您可以尝试 nextjs-sitemap-generator。