现场是这样的。站内搜索的联想接口 /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 白名单更省事。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
