记录一下那天晚上的排查过程。新闻站服务器时区是 Asia/Shanghai,news sitemap 里 publication_date 用 date() 输出,没有带时区。Bing 新闻后台提示日期格式无效,Google 新闻也只抓到一部分。
刚开始盯着「批量生成时把历史文章也塞进 48 小时窗口」,折腾了半个多小时,排掉了。
把日志和配置对完,能解释这个现象的基本就这几处。news sitemap 要求 W3C 格式并带时区偏移。还有一种是date() 输出的是本地时间,没有 Z 或 +08:00。
还有一种情况,文件缓存了旧时间,发布后没有重新生成。
上来先看文件头部的日期写法
curl -s https://www.example.com/news-sitemap.xml | grep -m3 'publication_date'
随后改成 UTC 带时区输出
echo gmdate('c', strtotime($post->post_date_gmt));
只保留最近两天的文章
wp post list --post_type=post --date_query='[{"after":"2 days ago"}]' --format=ids
末了重新提交并复核
curl -s https://www.example.com/news-sitemap.xml | grep -c 'publication_date'
别只看报错消失,验证要多做一步。日期统一成 2026-11-12T01:30:00+00:00 这种带时区的格式后,Bing 新闻的格式告警消失,当天文章两小时内被抓。
补一句。新闻 sitemap 的时间窗口很窄,时区错八小时就可能把新文章挤出窗口,统一用 UTC 最稳。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
