自动生成网站sitemap

要在 Next.js 和 Contentlayer 项目中实现自动生成 Sitemap 的功能,你可以编写一个脚本,在每次生成文档后自动生成 Sitemap。以下是一个示例脚本,你可以根据自己的需求进行调整。

步骤 1:安装必要的依赖

首先,你需要安装必要的依赖库,用于生成 Sitemap 和处理文件系统:

bash 复制代码
npm install fs path xmlbuilder contentlayer

步骤 2:编写生成 Sitemap 的脚本

在你的项目根目录下创建一个 generate-sitemap.js 文件,并添加以下代码:

javascript 复制代码
const fs = require('fs');
const path = require('path');
const { xmlbuilder } = require('xmlbuilder');
const { allDocuments } = require('.contentlayer/generated');

// 网站的基础 URL
const BASE_URL = 'https://www.yoursite.com';

// 生成 Sitemap XML
const generateSitemap = () => {
  // 创建根元素
  const urlset = xmlbuilder.create('urlset', { encoding: 'UTF-8' });
  urlset.att('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');

  // 添加文档页面
  allDocuments.forEach((doc) => {
    const url = urlset.ele('url');
    url.ele('loc', `${BASE_URL}/${doc.url}`);
    url.ele('lastmod', new Date(doc.date).toISOString());
    url.ele('changefreq', 'monthly');
    url.ele('priority', '0.8');
  });

  // 生成 XML 字符串
  const xml = urlset.end({ pretty: true });

  // 写入 sitemap.xml 文件
  const sitemapPath = path.join(__dirname, 'public', 'sitemap.xml');
  fs.writeFileSync(sitemapPath, xml);

  console.log('Sitemap generated at', sitemapPath);
};

// 执行生成 Sitemap 的函数
generateSitemap();

步骤 3:在生成文档后自动运行脚本

要确保每次 Contentlayer 生成文档后自动运行这个脚本,可以在 package.json 中添加一个新的脚本命令。你可以使用 postbuild 钩子,确保在构建项目后运行 Sitemap 生成脚本:

json 复制代码
{
  "scripts": {
    "build": "next build && next export",
    "postbuild": "node generate-sitemap.js"
  }
}

步骤 4:确保文档生成路径和 URL 处理正确

在脚本中,我们假设 allDocuments 是从 Contentlayer 生成的文档集合中获取的。如果你的文档集合属性名称或路径不同,请相应地进行调整。

步骤 5:运行构建

现在,你可以运行 npm run build,这个命令将在生成文档后自动生成 Sitemap:

bash 复制代码
npm run build

完成以上步骤后,每次你构建项目时,Sitemap 都会自动生成,并保存在 public/sitemap.xml 中。

总结

以上脚本展示了如何在 Next.js 和 Contentlayer 项目中自动生成 Sitemap。你可以根据自己的需求调整脚本,如更改 Sitemap 的属性、URL 格式等。这个自动化过程确保了每次文档更新后,Sitemap 都能及时更新,提升搜索引擎对网站内容的抓取效率。

参考原文:https://offernow.cn

相关推荐
damoluomu1 小时前
SSG 的后台怎么补:Node.js 生态里的三条路(番外二)
javascript·css·typescript·node.js·html
东鹏特饮1 小时前
贪吃蛇小游戏html
前端·javascript·html
程序员Sunday1 小时前
JavaScript 深拷贝和浅拷贝有什么区别?structuredClone 能替代 JSON 拷贝吗?
前端·javascript
阿里嘎多学长1 小时前
2026-10-13 GitHub 热点项目精选
开发语言·程序员·github·代码托管
巧克力味的桃子2 小时前
复杂网络能控性鲁棒性研究进展
开发语言·网络·php
m0_587383002 小时前
碰碰好评卡功能落地实战 从需求梳理到上线部署全流程实操指南
java·linux·服务器·前端·javascript·vue.js·人工智能
Pu_Nine_92 小时前
Vue‑Flow 从零入门实战|AI‑Agent 拓扑图开发
前端·javascript·vue.js
普通人62 小时前
php处理百度编辑器有误html
开发语言·编辑器·html·php·1024程序员节
沉下心来学鲁班2 小时前
具身智能入门:用 Python 让 MicroDuck 机器狗学会走路
开发语言·人工智能·python·机器人
geovindu2 小时前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式