测试站上线三天,服务器访问日志里抓取工具来了 1200 多次,robots.txt 明明写了 Disallow: /,抓取量一点没降,带宽先扛不住了。乍看像缓存或者权限的锅,追下去往往不是。

location / {
  auth_basic "staging";
  auth_basic_user_file /etc/nginx/.htpasswd;
}

追下去是这么回事:robots.txt 只是抓取约定,不负责拦截请求,抓取工具可以读完规则照样抓,只是不收录。Disallow 还挡住了页面里的 noindex,抓取端读不到那行,反而更难把测试页摘掉。

「robots 不阻止抓取」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

具体做法是,在测试站整站加 Basic Auth,访问层面直接挡住,比 robots 可靠;robots 的 Disallow 只留作声明,真正拦截交给 401 或 IP 白名单;测试站不要和线上共用域名,避免规则互相影响;改完看一天日志,确认请求返回的是 401。

验收就看一点,测试站对公网请求一律返回 401,访问日志里抓取请求当天降到个位数。

作者 9823189