先把当时的情况摆出来。编辑把发布时间设成第二天 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 过滤。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
