分类页返回 200,正文只有一句暂无内容共 40 字,Search Console 里 60 个页面被标为软 404,抓取工具建议返回 404 或补内容。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

if (is_category() && get_queried_object()->count === 0) {
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
}

分类下没有文章时模板照样渲染,状态码由 WordPress 统一给 200,抓取工具按内容量判断成无效页。没有文章的归档也没有做跳转或合并。这一点先确认清楚,后面就不用反复试。

「软 404 判定」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

具体做法是,空分类页在模板里判断 term count,为 0 时返回 404;有内容的分类补一段 200 字以上的说明;把空分类的入口从导航里去掉。

改完照着核一遍,空分类返回 404,有内容的分类不再出现在软 404 列表里。

作者 9823189