记录一下那天晚上的排查过程。站内搜索框接了联想接口,地址是 /suggest?q=seo,返回 application/json。近三十天日志里这个路径被请求了六十万次,其中蜘蛛占了七成,一天两万多条,状态码全是 200。正文页的抓取量同期掉了一成多。

刚开始盯着「接口对任何 UA 都返回 200 和完整 JSON,蜘蛛把它当正常页面」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。接口路径没有写进 robots,任何 UA 都能无成本请求。也可能是前端联想请求被写成 a 标签做预取,蜘蛛顺着链接一路抓。

少数情况下是搜索框的历史词联想生成了上万个可枚举地址。

先按路径统计蜘蛛的请求量,确认占比

awk '$7~^\/suggest/{print $9}' access.log | sort | uniq -c | sort -rn | head

给接口加响应头禁止索引,而不是只写 meta

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

然后在 robots 里挡住整个接口前缀

Disallow: /suggest

末了把联想请求改成 POST 或带时间戳签名,断掉可枚举性

fetch('/suggest', {method:'POST', body: JSON.stringify({q})});

怎么算真的好了,看的是同一批现象。日志里 /suggest 的请求降到每天几百条,正文页占比回升,抓取预算重新落到内容上。

只靠 robots 挡的话,已经抓到过的 JSON 不会立刻从索引消失,响应头和数据源要一起处理。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189