自动生成网站sitemap

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

步骤 1:安装必要的依赖

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

npm install fs path xmlbuilder contentlayer

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

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

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 生成脚本:

{
  "scripts": {
    "build": "next build && next export",
    "postbuild": "node generate-sitemap.js"
  }
}

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

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

步骤 5:运行构建

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

npm run build

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

总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/768274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子部件烧录流程(仅供参考)

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 部件烧录流程的详细步骤 1. 准备工作 2. 连接硬件 3. 配置烧录软件 4. 校验和设置 5. 开始烧录 6. 验证和测试 7. 断开…

吉利银河L6 AQS空气质量监控系统

结论 顶配才有AQS 开启空调且auto模式 则默认开启AQS 无法关闭AQS AQS的作用 银河L6 AQS触发 和 图标 AQS官方配置参数 官方文档 吉利用户手册

机器学习基础概念

1.机器学习定义 2.机器学习工作流程 (1)数据集 ①一行数据:一个样本 ②一列数据:一个特征 ③目标值(标签值):有些数据集有目标值,有些数据集没有。因此数据类型由特征值目标值构成或…

数据结构与算法笔记:实战篇 - 剖析微服务接口鉴权限流背后的数据结构和算法

概述 微服务是最近几年才兴起的概念。简单点将,就是把复杂的大应用,解耦成几个小的应用 。这样做的好处有很多。比如,这样有利于团队组织架构的拆分,比较团队越大协作的难度越大;再比如,每个应用都可以独立…

程序算法设计分析

动态规划和分治、贪心相比有什么区别?各自的优缺点? 分治算法特征: 1)规模如果很小,则很容易解决。//一般问题都能满足 2)大问题可以分为若干规模小的相同问题。//前提 3)利用子问题的解&#x…

最靓丽的C++开源通知弹框SnoreToasts自动监听软件及网页通知

SnoreToasts,作为一款轻量级的C开源项目,为开发者提供了一个便捷的方式来在Windows操作系统上展示通知弹框(Toast Notifications)。 特点与优势 轻量级:SnoreToasts采用了简洁的代码设计,避免了不必要的依…

苹果可能与谷歌大模型合作,马斯克xAI下个月推出Grok-2,比尔·盖茨:Scaling Law快要走到尽头

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 1、苹果被曝 Gemini 模型今秋或融入苹果智能生态系统 苹果知名爆料人马克古尔曼(Mark Gurman)最新透露,苹果公司将于今年秋季宣布与Alphabet旗下的谷歌的大模型Gem…

电流传感器技术详解,你都懂吗?

在任何过程中,电量的测量对于监控、分析和控制系统都是必不可少的。要执行这些类型的测量,必须使用电流传感器。除非可以测量,否则无法管理物理量。让我们深入了解电流传感器的行为。 电流传感器 电流传感器是将电流信号转换为另一个可分析…

PyTorch计算机视觉实战:目标检测、图像处理与深度学习

本书基于真实数据集,全面系统地阐述现代计算机视觉实用技术、方法和实践,涵盖50多个计算机视觉问题。全书分为四部分:一部分介绍神经网络和PyTorch的基础知识,以及如何使用PyTorch构建并训练神经网络,包括输入数据缩放…

从零到一:全面掌握模板机部署与虚拟机克隆的实训指南【实训Day01】

一、模板机的部署 1.设置好子网ip和子网掩码以及网关 保证有NAT模式 子网IP着重记住前三段:192.168.222.xxx 2.开始建立虚拟机 注意:路径中不要有中文 3.安排8个内核 4.安排2GB内存 创建初步成功,接着 5.开启此虚拟机 6.选择中文 7.日期&…

好展位,抢先订!2024年亚洲(泰国) 国际电力能源展

2024年亚洲(泰国) 国际电力能源展 Powerex Asia & Electric Asia 2024 ▏发电设备 ▏输配电 ▏电网 ▏太阳能光伏 ▏储能 ▏氢能 ▏生物能源 ▏风能 ▏智慧能源 ▏ 能源部官方批复亚洲重点电力及新能源展 展会时间:2024 年 10 月 16-…

R可视化数据必要格式——长格式

一、引言 我们在对数据进行可视化时遇到最头疼、最常见的问题是什么?数据问题。 因为我们往往不会从零自己编程进行可视化,往往是现有模板或积累,而正确的数据格式对应正确的图形包要求,一定会正确出图,所以只有一个问…

鸿蒙开发设备管理:【@ohos.settings (设置数据项名称)】

设置数据项名称 说明: 本模块首批接口从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 本模块提供设置数据项的访问功能相关接口的说明及示例。 导入模块 import settings from ohos.settings;settings.getUri…

Pointnet++改进即插即用系列:全网首发GLSA聚合和表示全局和局部空间特征|即插即用,提升特征提取模块性能

简介:1.该教程提供大量的首发改进的方式,降低上手难度,多种结构改进,助力寻找创新点!2.本篇文章对Pointnet++特征提取模块进行改进,加入GLSA,提升性能。3.专栏持续更新,紧随最新的研究内容。 目录 1.理论介绍 2.修改步骤 2.1 步骤一 2.2 步骤二 2.3 步骤三 1.理论介…

Java中==和equals()的区别

Java中和equals()的区别 1、操作符2、equals()方法3、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,和equals()是两个常用的比较操作符和方法,但它们之间的用法和含义却有着本…

GPT-5即将登场:AI赋能下的未来工作与日常生活新图景

随着OpenAI首席技术官米拉穆拉蒂在近期采访中的明确表态,GPT-5的发布已不再是遥不可及的梦想,而是即将在一年半后与我们见面的现实。这一消息无疑在科技界乃至全社会引发了广泛关注和热烈讨论。从GPT-4到GPT-5的飞跃,被形容为从高中生到博士生…

03.C1W2.Sentiment Analysis with Naïve Bayes

目录 Probability and Bayes’ RuleIntroductionProbabilitiesProbability of the intersection Bayes’ RuleConditional ProbabilitiesBayes’ RuleQuiz: Bayes’ Rule Applied Nave Bayes IntroductionNave Bayes for Sentiment Analysis P ( w i ∣ c l a s s ) P(w_i|clas…

【笔记】太久不用redis忘记怎么后台登陆了

!首先启动虚拟机linux的centos7 2.启动finalshell 我的redis启动在根目录用 redis-server redis.conf --启动 systemctl status redis --查看redis状态 是否active redis-cli -h centos的ip地址 -p 你要用的redis端口号(默认为6379) -a 你…

JavaSE阶段面试题(一)

目录 1.int a 1, int b 1, Integer c 1, Integer d 1;四个区别和联系,以及c和d是同一个吗? 2.为什么重写HashCode必须重写euqals,两者之间的关系? 3.创建对象的方式有哪些 4.重写和重载的区别 5.抽象类和接口…

firewalld(6)自定义services、ipset

简介 在前面的文章中我们已经介绍了zone、rich rule 、--direct等功能和基本配置。在前面文章中,我们提到过firewalld内置了很多服务,可以通过firewall-cmd --get-services来查看服务,也可以通过配置文件查看这些服务/var/lib/firewalld/ser…