这类问题我又碰上了一次。搜索页模板里加了 meta robots noindex,但 PDF 搜索和 AJAX 结果走的是另一个出口,只发响应头的那处漏写,索引里仍有残留。

第一反应是「CDN 缓存了加标签之前的旧响应」,验证下来不成立。

真正麻烦的地方在于,几个原因的现象几乎一样。noindex 只写在 HTML 模板里,非 HTML 响应不受影响;AJAX 返回的片段被直接访问时没有 noindex 头;部分页面由插件输出,绕过了主题模板。

第一件事是确认 HTML 页的标签

curl -s 'https://www.example.com/?s=nginx' | grep -o '<meta name="robots"[^>]*>'

随后检查响应头里有没有对应标签

curl -sI 'https://www.example.com/?s=nginx' | grep -i x-robots-tag

接着在服务端统一加头

add_header X-Robots-Tag "noindex, follow" always;

等前面都确认过,再验证接口出口

curl -sI 'https://www.example.com/wp-json/wp/v2/search?search=nginx' | grep -i x-robots-tag

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

恢复的判定其实很直接。HTML 页与接口响应同时带 noindex 信号,GSC 里搜索页的收录数量在六周内持续下降。

补一句。meta 标签只对 HTML 生效,接口和文件响应必须用响应头,两个出口都要堵。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189