依赖于@nuxtjs/sitemap 和 axios ,如果是少量静态页面的话则不需要axios
先安装@nuxtjs/sitemap插件:
yarn add @nuxtjs/sitemap axios
然后在 nuxt.config.js 中添加配置
sitemap: {
path: '/sitemap.xml', // sitemap文件名,不用改
hostname: 'https://xn--nf1a578axkh.xn--fiqs8s/', // 网址
cacheTime: 1000 * 60 * 60 * 24, // 更新频率,只在 generate: false有用
gzip: true, // 生成 .xml.gz 压缩的 sitemap
generate: false, // 允许使用 nuxt generate 生成
// 排除不要页面
exclude: [
'/404'
],
// 页面路由
routes (callback) {
axios.all([
// blog 分类
axios.get('https://blog.bg7zag.com/wp-json/xm-blog/v1/menu'),
// 文章列表
axios.get('https://blog.bg7zag.com/wp-json/wp/v2/posts', {
params: {
page: 1,
per_page: 100,
_embed: true
},
data: { progress: false }
}),
// 标签
axios.get('https://blog.bg7zag.com/wp-json/xm-blog/v1/info')
]).then(axios.spread(function (menu, posts, info) {
let now = new Date();
now.setHours(now.getHours(), now.getMinutes() - now.getTimezoneOffset());
let indexRoutes = [
{
url: '/',
changefreq: 'daily',
priority: 1,
lastmodISO: now.toISOString()
}
]
let menuRoutes = menu.data.mainMenu.map((data) => {
let url = ''
if (data.object === 'category') {
url = '/category/1?type=' + data.object_id + '&title=' + data.title
}
if (data.object === 'page') {
url = '/page/' + data.object_id
}
if (data.object === 'post_tag') {
url = '/tags/1?type=' + data.term_id + '&title=' + data.name
}
if (data.object === 'custom') {
url = data.url
}
return {
url: url,
changefreq: 'monthly',
priority: 0.8,
lastmodISO: data.post_modified
}
});
let postsRoutes = posts.data.map((data) => {
return {
url: '/' + data.id,
changefreq: 'daily',
priority: 0.9,
lastmodISO: data.modified
}
});
let tagsRoutes = info.data.tagCloud.map((data) => {
return {
url: `/tags/1?type=${data.term_id}&title=${data.name}`,
changefreq: 'weekly',
priority: 0.7,
lastmodISO: now
}
})
// 用 concat 進行合併
callback(null, indexRoutes.concat(menuRoutes, postsRoutes, tagsRoutes));
}), function (err) {
throw (err);
});
}
}
遇到落地页 例如 资讯 详情页面,几十万条数据 如何做 多个sitemap呢? 如何分页?
我这边只展示前一百条文章,多sitemap不一定能支持,而且这个插件已经停止维护多年了。
我觉得sitemap展示最新多少条就够了,多了也没多大效果。给蜘蛛提供最新的部分就可以了
好用![ciya]
我照着做了一遍,但是访问的时候是404,请问博主知道解决办法嘛?? [doge1] [kelian]
我看你的网站不是正常访问sitemap.xml吗?