先把当时的情况摆出来。站点用静态生成器构建,sitemap 是项目初始化时生成的一次性文件,之后 CI 只发布 HTML。三个月里新发了七十篇,sitemap 里一条都没有,日志显示新文平均 14 天才被抓到。手动提交能快一点,但下次发版又忘。

这类报错背后常见的原因有几处,逐个排除就行。构建脚本里没有生成 sitemap 的步骤,文件是手工放进去的。也可能是sitemap 里没有新地址,蜘蛛只能靠首页链接发现。

还有一种情况,首页只列最新十篇,滚出首页的文章没有任何入口。另外,站点没有 RSS,缺少第二条发现通道。

先对比 sitemap 条数与实际文章数

curl -s https://www.example.com/sitemap.xml | grep -c '<loc>'; ls content/posts | wc -l

然后在构建流程末尾加一步生成 sitemap

npx sitemap-generator https://www.example.com --output public/sitemap.xml

再往下把 sitemap 生成写进 CI,每次发版自动更新 lastmod

grep -n 'build' .github/workflows/deploy.yml

发布后确认新地址是否出现在文件里

curl -s https://www.example.com/sitemap.xml | grep -c '$(date +%Y-%m)'

别只看报错消失,验证要多做一步。每次发版后 sitemap 都会带上新地址,新文被抓的时间从两周缩到两天。

静态站的 sitemap 最容易变成一次性产物,把它放进构建流程比事后手动补要可靠。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189