目录
首页 » 博客 » 脚本详解:generate-sitemap.ps1 [切换主题] [English]

脚本详解: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
  • 说实话,现代搜索引擎对 changefreqpriority 的关注度在降低——它们有自己的算法来评估页面重要性。但加上这两个字段没什么成本,"有总比没有好"。

    扫了哪些页面

    当前版本扫描了以下内容,生成约 40 个 URL:

  • 首页(中英文)—— 硬编码添加,因为首页没有对应的 content 文件
  • 所有博文(中英文)—— 从 src/content/blog/blog/en/ 扫描,自动跳过草稿
  • 所有独立页面(中英文)—— 从 src/content/page/page/en/ 扫描
  • 静态页面 —— archive.htmltags.htmlstats.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 元数据功不可没。


    « 脚本详解:generate-rss.ps1 « 返回主页 脚本详解:build.ps1 »


    资源许可 · © 2004-2026 DragonRSTER · 最后更新于 2026年05月05日 22:35:35