先把当时的情况摆出来。编辑把发布时间设成第二天 09:00,文章状态仍是 future,但 sitemap 生成器没有过滤,提前把地址提交了。蜘蛛抓到时页面显示即将发布,之后一直不收录。

原因不止一个,得分开看。future 状态的文章前台不可读,蜘蛛抓到的是占位内容。也可能是sitemap 只按 ID 导出,没有过滤 post_status。

少数情况下是模板对未来文章返回 200 占位页而不是 404。不容易想到的是,lastmod 写成未来时间,蜘蛛会推迟处理。

上来先查未来状态的文章数量

wp post list --post_status=future --format=count

sitemap 只输出已发布文章

add_filter('wp_sitemaps_posts_query_args', function($a){ $a['post_status']='publish'; return $a; });

接着确认未来文章返回 404

curl -s -o /dev/null -w "%{http_code}\n" https://www.example.com/post/999/

到点后再提交一次

curl -s https://www.example.com/sitemap.xml | grep -c 'post-999'

这类改动我都写进变更记录,过两周再出问题时能对上号。

别只看报错消失,验证要多做一步。sitemap 里不再出现未来文章,到点发布后地址被正常抓取,第二天进入索引。

定时发布本身没问题,问题在 sitemap 提前泄露,生成器一定要按 post_status 过滤。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189