先看现象。sitemap 里混进了三百条已下线地址,全部 404。Bing 站长工具仍把整份文件标成已提交,抓取错误里 404 占了一半,新地址的抓取明显变慢。

排查方向其实有限,先把可能性排一排。sitemap 直接全量导出,没有过滤已删除记录。另一种情况是下线页面只在应用层隐藏,数据库里还在。

少数情况下是Bing 对 sitemap 里 404 的比例敏感,超阈值降优先级。

不容易想到的是,提交后没有回看抓取错误报告。

先抽样检查 sitemap 地址的状态

for u in $(curl -s https://www.example.com/sitemap.xml | grep -o '<loc>[^<]*' | cut -c6- | head -20); do curl -s -o /dev/null -w "$u %{http_code}\n" $u; done

算

一

接着导出时只取已发布状态

SELECT url FROM posts WHERE status = 'publish';

等前面都确认过,再重

新

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

怎么算真的好了,看的是同一批现象。过滤后 sitemap 里不再有 404,Bing 的抓取错误占比从五成降到 2%,新文章平均两天内被抓。

这里还有个坑。sitemap 里 404 的比例最好压到 1% 以下,超过就会被降优先级。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189