做站点运营的人大多遇到过这种情况:搜索蜘蛛抓走了一批本不该被收录的页面,来源不是生产站,而是测试域名、预发布环境,或者某台临时上线的机器。这些 URL 一旦进入索引,轻则与原站内容重复,重则把未完成的页面、旧版本数据暴露出去。问题往往不在于蜘蛛乱抓,而在于这些环境本身就暴露在公网上。
测试环境为什么容易被蜘蛛发现
蜘蛛的 URL 来源无非几条:外链、站点地图、页面里的链接、历史记录,以及被别人分享出去的地址。测试站一旦被其中任何一条碰上,就会进入抓取队列。
- 域名解析到公网 IP,没有做任何访问限制,任何抓取者都能直接访问。
- 测试站的页面里写着指向生产站的链接,或者反过来,生产站的某个调试入口链到了测试域。
- 把生产库直接导到测试环境,页面上残留的绝对 URL、Sitemap、RSS 里全是可访问地址。
- CDN 或对象存储的测试空间开了公共读,图片和附件被人引用后顺带把域名带了进去。
- 历史域名、旧项目域名没有及时下线,仍然解析并返回 200。
三层隔离,从外到内收紧
网络层:先让它不被访问
最省事的做法是把测试环境放在内网或 VPN 之后,只允许办公网 IP 访问。如果必须公网可达,至少用防火墙或安全组做来源 IP 白名单。这一层做好了,后面两层只是补充。
应用层:加一道身份验证
全站 Basic Auth 或统一登录是性价比很高的手段。抓取方遇到 401 会停止访问,也不会把页面内容带走。要注意的是,别只对首页加验证而放过了子目录和接口。
协议层:robots.txt 与 noindex 只是兜底
很多人第一反应是写 robots.txt 屏蔽全部。它有价值,但有两个前提要清楚:robots.txt 只约束守规矩的抓取方;被 Disallow 的 URL 如果被外部链接指向,仍可能以仅有 URL 的形式出现在结果里,因为系统没有内容可判断。更稳妥的组合是:robots.txt 禁止抓取,同时让页面返回 noindex 或响应头 X-Robots-Tag: noindex,再叠加访问层验证。
把 robots.txt 当成唯一防线,是测试站泄漏里最常见的一种误判。
预发布环境与生产站的边界
预发布环境通常要尽量贴近生产,于是最容易出现复制粘贴式的泄漏:
- 不要把生产站的 Sitemap、RSS 原样发布到预发布域,至少要保证里面的链接指向预发布域而不是生产域。
- 检查模板里的绝对地址配置,避免页面输出生产域名的 canonical,也避免测试域被写进生产的 canonical。
- 生产站的页面上不要留测试域的链接,包括预览、内测入口这类临时按钮。
- 测试用的图片、字体建议放在带鉴权的路径下,别挂在公开的 CDN 域名上。
已经泄漏出去了怎么处理
- 先在服务器日志里确认抓取方是否真的来过,访问的是哪些路径,频率如何。
- 把访问限制补齐,让这些 URL 不再返回 200;已废弃的环境可以停止域名解析,或统一返回 404 与 410。
- 对需要保留但不该被索引的页面加 noindex,并检查是否还有别的页面在链接它们。
- 在搜索平台的站长工具里查看该域名的收录情况,必要时提交移除请求。移除是请求而不是保证,最终仍取决于后续抓取与重新评估。
最后回到运营本身:URL 发现这件事,本质上是判断哪些地址值得被看见。测试环境做隔离,和生产站的栏目规划、内容更新、结构治理是同一件事的两面——你希望抓取预算花在有价值的页面上,那就先保证不值钱的页面根本进不了抓取方的视野。