给客戶看的预览連結、能直接訪問的測試域名、没有下线的舊站、CDN 回源域名——這些 URL 上的内容往往和正式站一模一样。它們一旦被抓走,就會成為重复内容的一個来源,也可能让用戶搜到不该看到的版本。處理這類問题,重点其實不在“怎么删”,而在“一開始就別让它能被抓”。
這些 URL 通常從哪来
先搞清楚入口,才谈得上封堵。常见的来源有這么几類:
- 外鏈泄露:预览連結發给了客戶、外包或合作方,又被贴到公開頁面、工單系統或聊天记錄里,爬虫顺着連結就進来了。
- 域名本身可訪問:測試域名解析到了公網,没有加任何訪問限制;或者 CDN 的回源域名可以直接請求。
- 舊站没退场:改版後舊域名既没跳轉也没下线,内頁仍然能打開。
- 調试信息外露:頁面上輸出了内部路径、接口地址或环境變量。
這些 URL 的共同点是:它們不属于正式站点结构,却能被蜘蛛正常抓到,並且返回 200。
處理顺序:抓取 → 索引 → 清场
很多站点只做了一步就以為解决了,结果過一阵發現索引里還是有。這三层是递進關系:
- 阻止抓取:robots.txt 的 Disallow、IP 白名單、HTTP 基础認證,成本最低。
- 阻止索引:頁面 head 里的 noindex,作用在能返回頁面的那條路径上。
- 清场:已经進索引的 URL,只能等重新抓取後按 404、410 或 noindex 登出。
要注意一個顺序上的坑:robots.txt 全站 Disallow 之後,蜘蛛看不到頁面,也就讀不到 noindex。如果你既想挡抓取又想挡索引,得先確認蜘蛛到底能不能訪問到那個頁面。
第一层:让蜘蛛進不来
- 预發布环境整体加 HTTP 基础認證或 IP 白名單,這是最彻底的方式,蜘蛛和普通用戶都進不去。
- 如果必须對外可訪問,用獨立的 robots.txt 挡住整站,並確認這個文件本身能被匿名請求到。
- 測試域名要單獨放一份 robots.txt,不要預設主站規則會自動生效——它們通常是两套部署。
第二层:被訪問到也別進索引
- 在頁面里加 noindex,但前提是這條路径没有被 robots 完全挡死,否則标簽形同虚设。
- 返回正确的狀態碼,不要用一個 200 的“無權訪問”頁面来伪装。
- 測試域名不要随手配 canonical 指回主站。這種寫法在測試环境里容易被複製到正式站,導致正式頁面的收錄归属混乱。
已经進索引了怎么退场
- 能下线就下线,返回 404 或 410,让頁面自然登出索引。
- 不能下线就先加 noindex,然後等蜘蛛重新抓取,這中間有時間差。
- 清理之前先確認没有正式頁面依赖這些 URL,避免誤伤正常入口。
- 图片、PDF、接口返回的 JSON 也可能被索引,不只是 HTML 頁面。
容易漏掉的几個点
- 舊域名只做了首頁跳轉,内頁還能直接訪問。
- CDN 回源域名可以被直接請求,且没有被認證或 robots 覆盖。
- 预览环境沿用了主站的 robots.txt,没有單獨配置。
- sitemap 里誤把測試域名下的 URL 一起提交了。
预發布环境的問题,最好在部署阶段就解决:訪問控制放在最外层,比事後一個個提交刪除省事得多。已经進索引的也不用慌,按抓取、索引、退场的顺序走一遍,通常能慢慢收干净。