做站点运营的人大多遇到過這種情况:搜尋蜘蛛抓走了一批本不该被收錄的頁面,来源不是生产站,而是測試域名、预發布环境,或者某台临时上线的机器。這些 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 發現這件事,本质上是判断哪些地址值得被看见。測試环境做隔离,和生产站的栏目規划、内容更新、结构治理是同一件事的两面——你希望抓取预算花在有價值的頁面上,那就先保證不值钱的頁面根本進不了抓取方的视野。