脚本详解:generate-sitemap.ps1
Sitemap Protocol 0.9 · changefreq · priority
这个脚本干什么
generate-sitemap.ps1 是构建流程的最后一步。 它生成一个符合 Sitemap Protocol 0.9 标准的 XML 文件,告诉 Google、Bing 等搜索引擎:这个网站有哪些页面、每个页面最后什么时候更新过、哪些页面更重要。
Sitemap 不保证收录——它只是一个建议。搜索引擎有权忽略某些页面,也有权抓取 sitemap 中没有列出的页面。但提供一个准确、最新的 sitemap 能显著加快新内容的发现速度, 尤其是对新网站和更新不频繁的页面。
Sitemap 协议的三个字段
每个 <url> 包含三个字段:
<loc>(必填)—— 页面的完整 URL,包括协议和域名
<lastmod> —— 最后修改日期,格式 YYYY-MM-DD。搜索引擎用它来优先抓取最近更新过的页面
<changefreq> —— 更新频率提示(daily / weekly / monthly),帮助爬虫分配抓取预算
<priority> —— 相对优先级(0.0-1.0)。首页 1.0,博文 0.7,工具页面 0.3-0.5
说实话,现代搜索引擎对 changefreq 和 priority 的关注度在降低——它们有自己的算法来评估页面重要性。但加上这两个字段没什么成本,"有总比没有好"。
扫了哪些页面
当前版本扫描了以下内容,生成约 40 个 URL:
首页(中英文)—— 硬编码添加,因为首页没有对应的 content 文件
所有博文(中英文)—— 从 src/content/blog/ 和 blog/en/ 扫描,自动跳过草稿
所有独立页面(中英文)—— 从 src/content/page/ 和 page/en/ 扫描
静态页面 —— archive.html、tags.html、stats.html
lastmod 使用源文件的 LastWriteTime, 这比元数据中的 date 更准确——它反映的是内容实际最后被修改的时间, 而非文章署名的日期。
为什么静态生成而不是动态
有些网站用 CGI 或 PHP 动态生成 sitemap(每次请求时扫描数据库),本站选择了静态生成。原因很直接:
文章数量少,构建时花 0.1 秒生成一个静态 XML 完全可接受
静态文件可以被 Web 服务器缓存,不消耗 CGI 进程
搜索引擎爬虫可能每天访问 sitemap,动态生成会导致不必要的服务器负载
与整个站点的"纯静态优先"理念一致——只要可能,预先生成而非运行时计算
这是一贯的设计哲学:静态优先,CGI 作为最后手段。
输出位置与自动发现
sitemap 输出到项目根目录(而非 dist/),因为 sitemap.xml 按约定必须放在网站的根目录。 搜索引擎爬虫会在爬取时首先查找 /sitemap.xml 和 /robots.txt。
本站的 robots.txt 也包含了 Sitemap: https://www.dragonrster.cn/sitemap.xml 行, 提供了第二条发现路径。双保险。
搜索引擎发现流程
一个完整的搜索引擎发现流程是这样的:爬虫先读 robots.txt 检查抓取限制, 然后读 sitemap.xml 获取所有 URL 和最后修改时间, 按 lastmod 优先级抓取,解析 HTML 提取正文和标题,最后进入索引。
在 2026 年,一个没有 JavaScript、纯表格布局的 90s 风格网站能被 Google 搜到,sitemap 和良好的 SEO 元数据功不可没。
|