现场是这样的。站点地图每次生成都按随机顺序打散,内容没变但顺序每天不同,蜘蛛每天把整份文件重抓一遍,抓取预算被吃掉大半。
中间走过弯路,把「单份文件两万条,每条都要重新校验」当成主因,改完现象没变。
真正麻烦的地方在于,几个原因的现象几乎一样。生成脚本用了 ORDER BY RAND() 取文章;每次生成把 lastmod 写成当前时间;CDN 对站点地图不缓存,每次都回源重新生成。
连续两天比对文件哈希
curl -s https://www.example.com/sitemap.xml | md5sum
再往下改成按 ID 稳定排序
SELECT ID FROM wp_posts ORDER BY ID ASC LIMIT 50000;
lastmod 用真实修改时间
echo get_the_modified_time('c', $post_id);
剩下的就是让 CDN 缓存这份文件一小时
curl -I https://www.example.com/sitemap.xml
别只看报错消失,验证要多做一步。连续两天的文件哈希一致,蜘蛛对站点地图的重复抓取次数下降,正文抓取比例上升。
提醒一点。站点地图的稳定性比条数重要,每天内容都不同的文件等于让蜘蛛重新认识一遍站点。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
