站点运营

站点运营:測試與预發布环境自查,別让临时站被蜘蛛当成正式版

改版前搭的測試站,如果域名解析挂在公網、又没有訪問限制,很容易被搜尋蜘蛛抓走,甚至和正式站形成重复内容。本文梳理測試环境常见的几種泄漏路径,讲清網絡层、协议层、頁面层三层防護,並附上一份上线前後的检查清單。

站点运营

站点运营:測試與预發布环境自查,別让临时站被蜘蛛当成正式版

做站点运营的人大多有過這样的经歷:改版前先搭一個測試站,随手把域名解析挂到公網,方便自己和同事预览。几天後翻訪問日誌,發現測試站上已经出現了搜尋蜘蛛的訪問记錄,有些頁面甚至已经進入搜尋结果。測試环境本身不是正式内容,一旦被蜘蛛抓走,轻則浪費抓取配額,重則和正式站形成重复内容竞争。

測試站常见的几種泄漏路径

  • 域名直接解析到公網 IP,没有任何訪問限制,任何人或爬虫都能打開。
  • 在正式域名下建了一個 /test、/v2 之類的子目錄,蜘蛛顺着内鏈或舊日誌就走進去了。
  • 從线上完整拷贝資料库和模板,頁面 URL、canonical、sitemap 全部和正式站一致。
  • 測試环境没有獨立的 robots.txt,或者直接把线上的放行規則複製了過来。
  • 在後台提交 sitemap、使用抓取測試工具时,誤把測試域名填了進去。

三层防護,按投入從低到高来

第一层:網絡层先關上门

最省事的做法是不要让測試站暴露在公網。改成内網訪問,或者用 IP 白名單、基础認證(Basic Auth)、VPN 限制訪問范围。對蜘蛛来说,返回 401 或者干脆连不上,比返回一個可抓取的頁面安全得多。需要注意的是,基础認證對外部来说是拒绝訪問,但如果密碼長期不改、地址又被外部連結引用,風險依然存在。

第二层:协议层给出明确信号

如果測試站必须临时公網可訪問,比如要给客戶演示,至少把 robots.txt 寫成全站禁止抓取,並在服務器层面给所有响應加上X-Robots-Tag: noindex, nofollow。相比只寫 robots.txt,响應头更难被誤删,也不會因為有人把 robots.txt 換回线上版本而失效。

第三层:頁面层再补一道

模板里统一加上 meta robots noindex,尤其是那些從线上一比一複製過来的頁面。同时检查 canonical 标簽——測試頁如果還指着正式站的地址,等于在告诉搜尋引擎這两個頁面是同一份内容,反而容易让两邊互相干扰。測試站的 canonical 應该指向自己,或者干脆去掉。

环境地址的寫法也有讲究

不建议把測試站放在正式域名的子目錄下,比如 www.example.com/v2/。原因有两個:一是這個地址天然繼承了正式域名的信任度,被抓取的概率更高;二是子目錄形式容易被導航、内鏈或者歷史連結带到公網。更稳妥的做法是用獨立子域名(test.example.com)或完全獨立的域名,並且不要和正式站共用 cookie 作用域和 session。

從线上拷贝資料时容易踩的坑

  • 資料库里的站点地址、资源域名還是正式站的,頁面里生成的外鏈會指向线上,蜘蛛顺着走一圈又回到正式站。
  • sitemap.xml 被一起拷贝過来,里面寫的是正式站的 URL,等于主動把測試环境介绍给搜尋引擎。
  • 統計代碼、客服脚本仍在執行,會往正式的資料里掺入測試流量。

上线前後的動作清單

  1. 搭建阶段:确定訪問方式,能内網就内網,必须公網就加認證和全站禁止抓取。
  2. 開發阶段:robots.txt、X-Robots-Tag、meta robots 三處都设為禁止,並寫進模板而不是手工添加。
  3. 上线前:全站替換域名,核對 canonical、sitemap、内鏈、静態资源路径是否都已改成正式地址。
  4. 上线後:確認 robots.txt 恢复為放行規則,noindex 标记和訪問認證全部移除。
  5. 善後:如果測試站曾经公網可訪問過,刪除頁面或返回 410,並观察一段時間日誌,確認蜘蛛不再来訪。
測試站被收錄之後再清理,往往比一開始就挡住麻烦得多。與其事後一封封申請刪除,不如在搭环境的第一步就把门關上。

另外,別只盯着自己的操作。同事之間共享预览地址、把連結發到群里、寫進項目文档,都可能让測試地址流传出去。定期用日誌工具筛一遍測試域名的訪問来源,看看是哪些爬虫、通過什么路径找過来的,通常能發現一些被忽略的入口。