很多团队會在測試域名、预览地址或备用域名上部署一份與正式站几乎相同的站点,方便内部查看改動效果。這類地址往往没有嚴格的訪問控制,只要有一條連結被分享出去,或者被第三方预览服務、协作工具抓取,就可能進入搜尋引擎的抓取范围,進而出現在索引里。内容和正式站重复,于是變成同一内容對應多個 URL 的局面。
先確認它是怎么被發現和抓取的
處理之前先找到入口,否則關掉一處還會從別處冒出来。常见的發現路径包括:
- 頁面里的内部連結寫死了測試域名,或者模板拼接时用了环境變量里的错誤域名。
- Sitemap、RSS、结构化資料中包含了測試地址。
- 測試連結被贴進协作工具、论坛、社交平台,或者被第三方截图、预览服務抓取。
- CDN、反向代理或抓取工具回源时命中了測試环境。
- 域名解析到公網後,被各類掃描和服務被動發現。
分清是抓取還是已经進入索引
被蜘蛛抓過,不等于已经收錄。可以先看抓取日誌確認訪問频率和来源,再用站内查询、外鏈工具或索引狀態检查確認是否真的進入了索引。三種狀態的處理方式不一样:只是被抓取,重点在断源;已经進入索引,需要让它登出;仍然在展現,則要同时處理正式站一侧的重复内容問题。
處理顺序:先断源,再收敛
第一步:阻止繼續被抓
根據环境性质選擇手段:整站 robots.txt 禁止抓取、加一层 HTTP 認證、限制 IP 白名單,或者直接取消公網解析。如果測試环境還需要保留公開訪問,至少要保證它不會被大量連結指向,减少被發現的机會。
注意:robots.txt 一旦屏蔽整站,爬虫就進不来,也就讀不到頁面里的 noindex。想让頁面登出索引,這两者需要分阶段使用,不能同时一把鎖死。
第二步:處理已经進入索引的 URL
- 确定要彻底下线的測試站,用 410 比 404 更明确,表示资源已永久移除。
- 内容與正式站重复、且以後不再需要的地址,301 到正式站對應頁面。要一一對應,不要把整站全部跳轉到首頁。
- 需要保留訪問但不想被索引的頁面,用 noindex,同时确保 robots.txt 允许爬虫抓取,否則它看不到這個指令。
第三步:回到正式站做自检
確認 canonical、Sitemap、内鏈都指向正式域名;检查頁面模板、图片、静態资源里是否残留測試域名的绝對地址;如果用了多個域名,明确哪一個是主域名,其余做收敛處理。
几個常见誤区
- 只加 noindex,同时在 robots.txt 里全站 Disallow,结果爬虫讀不到指令,頁面可能長期留在索引里。
- 把測試域名整体 301 到首頁,容易被当作無關跳轉或软 404,收敛效果不理想。
- 以為不提交 Sitemap 就不會被發現,外部連結同样能带来抓取。
- 只處理主域名,忽略子域名、静態资源域名和备用域名。
- 用長期挂着的 302 代替正式處理。
上线前的检查清單
- 測試环境與生产环境在域名、robots.txt、meta robots 上彻底隔离。
- 正式站的绝對 URL 由统一配置生成,避免手工拼接。
- Sitemap 只包含正式域名下的可索引地址。
- 對外分享連結前,確認連結指向的是正式地址。
- 定期检查索引中是否出現測試域名、预览域名和备用域名。
這些處理不會立刻改變索引狀態,搜尋引擎需要重新抓取並重算,给它留出時間,同时持續观察抓取日誌和索引變化即可。