很多团队在上线前會先部署一套測試站或预發布域名,用来驗收、演示、给客戶確認。它和生产站内容几乎一样,差別只在域名。如果没有做訪問限制,搜尋引擎很容易把它当成一個正常站点收錄,于是同一批内容在索引里出現了两份。
測試站被收錄的常见入口
- 域名曾经對外開放過一段時間,爬虫抓到一次後會持續回訪。
- 測試站的 robots.txt 和 sitemap 没有單獨處理,站点地图里列着和生产站相同的 URL。
- 内鏈、邮件、客服誤發的連結、QR Code或分享按钮指向測試域名。
- 生产站模板里硬编碼了測試域名的绝對地址,比如图片、JS 或某個锚点。
- 其他站点或社交平台複製内容时,顺手带走了測試域名。
它带来的不只是多一份副本
通常不會立刻让排名掉下去,但會制造几個實际麻烦:索引信号被拆成两份,外鏈和分享資料落在測試域名上,用戶点進搜尋结果的可能是舊内容、报错頁或带調试信息的頁面。如果測試站和生产站的價格、文案、库存並不一致,還可能被当成内容质量不稳定的信号来處理。
處置顺序:先切断,再清理
1. 先限制訪問
首選服務端訪問控制:HTTP Basic Auth、IP 白名單,或干脆让域名只在内網解析,返回 401 或 403。爬虫拿不到内容,這是成本最低的止血方式,也能避免新的 URL 繼續進入索引。
2. 必须對外可訪問时用 noindex
如果測試站要给客戶演示,至少在 HTML 的 head 里加 noindex,並確認它是服務端返回的,而不是靠 JS 注入。這里有個常见誤区:robots.txt 里的 Disallow 只能阻止抓取,不能阻止已收錄的 URL 出現在结果里。而且被 disallow 的頁面,搜尋引擎讀不到你的 noindex,也就無法按你的意愿移除。
3. 让已收錄的地址明确失效
已经進入索引的測試站頁面,让它返回 404 或 410,或加上 noindex 後等待重新抓取。如果數量不多、内容明顯是重复副本,可以先用站長平台的移除工具做临时屏蔽,但那是短期手段,長期還是靠狀態碼和 noindex 落實。
4. 检查生产站一侧
確認生产站頁面的 canonical 指向自己而不是測試域名;检查模板、图片、脚本里有没有残留的測試域名绝對地址;检查 sitemap 是否混進了測試域名。這一步容易被跳過,但它决定了清理之後會不會再被带回去。
上线前的几個检查動作
- 部署时把測試环境设為不可公開解析,或預設開啟基础認證。
- 測試站 robots.txt 預設全站 disallow,同时關键頁面带上 noindex,两层一起用。
- 複製模板时替換掉所有绝對域名,静態资源尽量走环境變量。
- 發布前用 site: 语法查一遍測試域名,確認没有意外收錄。
- 把測試域名的站点地图提交记錄、站長平台资源一並刪除。
處理這類問题的顺序通常是:先挡住訪問,再让已收錄的地址明确失效,最後回头检查生产站是否被牵连。反過来的话,往往一邊清一邊又被抓回去。
測試站被收錄不算灾难,但拖久了會變成一批需要逐個清理的舊地址。在上线流程里加一步訪問限制,比事後一個個移除要省事得多。