sitemap 由脚本每天生成,lastmod 输出成 2026-11-09 这种纯日期,六万条地址里有一半日期相同。日志显示蜘蛛每天零点前后集中抓两万条,正文页反复重抓却没有更新,新文反倒排在后面。改过生成脚本的时区设置,没有效果。
真正麻烦的地方在于,几个原因的现象几乎一样。纯日期精度只到天,同一天内多次修改对外都表现为没变或全变;脚本用了生成时间而不是文章的修改时间,全站时间戳一起跳;sitemap 索引的 lastmod 和子文件不一致,蜘蛛按索引的时间判断整份文件;时区按 UTC 输出,东八区的早间更新被记到前一天。
第一件事是抓一份 sitemap 看 lastmod 的实际格式和分布
curl -s https://www.example.com/sitemap.xml | grep -o '<lastmod>[^<]*' | sort | uniq -c | sort -rn | head
随后改成输出带时区的完整时间
date('c', get_post_modified_time('U', true, $post_id))
只把近一年有实际修改的页面放进 sitemap
SELECT ID FROM wp_posts WHERE post_status='publish' AND post_modified > '2025-11-01';
末了对比修改前后的抓取分布
awk '$0~/Googlebot/{print substr($4,14,2)}' access.log | sort | uniq -c
改完先别撤,确认这几项。lastmod 变成带时区的完整时间戳,日志里零点集中的抓取被打散,改过的文章当天就会被重抓。
提醒一点。把 lastmod 写成当前时间比写错格式更糟,蜘蛛几次发现内容没变,整份 sitemap 的信任度都会降。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
