先看现象。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% 以下,超过就会被降优先级。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
