现场是这样的。站内搜索的联想接口 /suggest?q=php 返回 JSON 数组,某次改版把它从 POST 改成了 GET,三个月后搜索结果显示这个路径被收录八万条,点进去全是纯文本。

中间走过弯路,把「前端把接口地址写进了页面的可见链接和 sitemap」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。接口用 GET 且返回 200,蜘蛛顺着前端请求跟了进去;响应头没有 noindex,Content-Type 也没设成 application/json;接口没有做来源校验,任何 UA 都能直接请求。

先确认接口响应头和返回体

curl -sI 'https://www.example.com/suggest?q=php'

给接口加 noindex 并固定 JSON 类型

add_header X-Robots-Tag 'noindex' always; default_type application/json;

接着在 robots 里屏蔽接口路径

Disallow: /suggest

末了把接口从 sitemap 和内链里摘掉

grep -rn 'suggest?q=' templates/ | head

别只看报错消失,验证要多做一步。接口返回 application/json 且带 noindex,sitemap 里不再出现 suggest 路径,索引量一周内回落。

接口地址一旦能被 GET 访问就等于开了一个内容入口,改版时把搜索相关接口统一放进 robots 白名单更省事。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189