这类问题我又碰上了一次。搜索页模板里加了 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 生效,接口和文件响应必须用响应头,两个出口都要堵。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
