很多站点都有一个影子版本:测试站、预发布站、内部演示站。它们通常是把正式站的数据复制一份,域名可能只是把 www 换成 test 或 dev,目录也可能是 /beta/。这些地址一旦被搜索引擎发现,就会带来两个麻烦:草稿内容被索引,以及同一批内容出现重复版本,把正式站该拿的权重分掉一部分。
草稿站是怎么被发现的
- 同事把测试链接发到群里、工单里,甚至贴到了公开页面
- 测试站的 robots.txt 直接从正式站复制,默认允许全站抓取
- 测试域名与正式域名共用服务器和解析记录,顺着关联就能找到
- 站点地图文件里混入了测试域名的地址
- 小程序、APP 或第三方对接时,把测试接口地址写进了线上代码
这些路径大多不是技术漏洞,而是流程疏漏。所以处理办法也不只是改配置,还要把检查动作固定下来。
三种隔离手段,效果从强到弱
网络层隔离
把预发布环境放在内网或 VPN 之后,只允许公司出口 IP 访问。外网解析不到,也就不存在被抓的问题。如果必须公网可访问,用 IP 白名单,不要只靠一个弱口令挡着。
整站加一层访问认证
Nginx 的 Basic Auth 或统一登录是成本最低的做法。带认证的页面返回 401,蜘蛛通常不会收录,这比 robots.txt 更可靠:robots.txt 只约束守规矩的爬虫,而认证是服务端直接拒绝,谁来了都进不去。
robots.txt 加 noindex,作为补充
不少人以为写了 Disallow 就万事大吉。实际上 Disallow 只是别抓,已经进入索引的地址仍可能出现在结果里,只是没有摘要。如果确实想让页面彻底退出索引,需要页面上带 noindex,而 noindex 又要求蜘蛛能抓到页面——两者组合才有效:先允许抓取、返回 noindex,等索引消失后再改成 Disallow。
提示:robots.txt 是公开文件,写在里面的测试路径等于把地址告诉所有人。敏感目录不要靠它隐藏。
一份可以照着做的自查清单
- 列出所有非正式环境的域名和路径:test、dev、beta、staging、demo、uat
- 逐个检查这些站点的 robots.txt,确认不是从正式站直接复制来的
- 确认预发布站是否返回 X-Robots-Tag: noindex 响应头
- 检查正式站的站点地图与站内链接,确认没有指向测试域名
- 用 site: 加测试域名查一次,看是否存在残留索引
- 翻一遍服务器访问日志,看有没有来自搜索引擎的抓取记录
- 梳理公开 DNS、证书透明度日志和第三方监控服务中暴露的测试域名
已经被抓到了怎么办
如果发现草稿内容已经收录,处理顺序是:先把测试站关停或加上认证,切断继续被抓的入口;然后对残留页面返回 410,或者 301 到正式站的对应页面;最后在站长平台提交移除请求。不要只是把服务器上的文件删掉,那样地址会变成 404,清理速度反而更慢。
把它变成例行动作
新项目上线时,把环境隔离写进上线清单;每次新建预发布环境,顺手确认三件事:能不能匿名访问、robots.txt 写了什么、响应头里有没有 noindex。这三步花不了十分钟,但能省掉后面几个月的清理工作。