做站点运营时,经常會遇到一個反直觉的現象:明明在 robots.txt 里把某個目錄、甚至整個站都屏蔽了,搜尋结果里却還能搜到這些頁面。于是有人以為是 robots.txt 没生效,其實多數情况下它生效了——只是把“禁止抓取”和“禁止索引”当成了同一件事。
robots.txt 管的是抓取,不是索引
robots.txt 的定位是给爬虫划定可抓取范围,它告诉爬虫“這條路径你可以来,那條路径不要来”。但一個 URL 進入搜尋索引,並不一定要靠爬虫把頁面正文抓下来。搜尋引擎可以從外鏈锚文本、URL 字符串本身、歷史抓取记錄,甚至頁面被抓取後留下的副本中,判断這是一個存在的地址,並把它放進索引。
所以屏蔽抓取只能减少新内容被抓走,不能保證已有 URL 從索引里消失。反過来,一個頁面被屏蔽抓取後,搜尋引擎也拿不到你寫在頁面里的 noindex、canonical 等指令,等于關掉了沟通渠道。
常见的三種“屏蔽了還被收錄”
一、只屏蔽了路径,没清理存量的索引
索引是歷史积累的结果。你今天加的 robots 規則,只能影响之後的抓取行為,之前已经收錄的 URL 仍然會留在索引里,直到搜尋引擎重新评估並移除。這個過程可能很長,也可能因為外鏈持續存在而一直保留。
二、屏蔽寫法有漏洞
- 只寫了目錄屏蔽,子域、參數版本、大小寫變体仍在可抓范围内;
- Disallow 路径寫错,比如少了斜杠或多了层級,實际没匹配到目标 URL;
- 規則被後寫的 Allow 覆盖,尤其是路径較長时的匹配優先級。
三、頁面本身不该出現在索引里
有些頁面(測試頁、内部搜尋頁、带 session 的地址)本来就不适合被收錄。如果只靠 robots 挡住抓取,索引里照样可能保留一條没有摘要、没有正文的空壳记錄,用戶搜尋时仍會看到連結。
想让頁面登出索引,正确顺序是什么
- 先允许抓取。至少让爬虫能訪問到你需要传递指令的那一层,否則 noindex 永遠讀不到。
- 在頁面上给出明确的索引指令。HTML 頁面用 meta robots 的 noindex,非 HTML 文件(PDF、图片、部分接口返回)用 X-Robots-Tag 响應头,两者不要互相矛盾。
- 確認响應狀態正常。带 noindex 的頁面應返回 200,如果返回 404 或 5xx,指令同样讀不到。
- 等搜尋引擎重新抓取並應用。可以用頁面級检查工具確認指令是否被识別,再观察索引變化,不要当天改完就下结论。
- 如果頁面确定要下线,改用狀態碼更直接。整站或整目錄永久刪除可用 410,临时下架可用 404,需要保留權重时用 301 指向新地址;這时再配合 robots 屏蔽,避免無效抓取。
几個容易踩的组合
- robots 屏蔽加 noindex 同时上:因為抓不到頁面,noindex 白寫,頁面可能長期留在索引里。
- robots 屏蔽加 301:爬虫進不来,跳轉規則無法传递,收效有限。
- 只删内鏈不改狀態碼:URL 仍是 200,索引没有理由移除它。
一句话原則:想控制抓取,用 robots.txt;想控制索引,用 noindex、X-Robots-Tag 或狀態碼。两件事分開做,顺序是先给索引指令、再限制抓取。
怎么驗證有没有生效
服務端日誌里看该 URL 是否還有抓取請求,能反映抓取层面是否被拦住;用頁面級的索引狀態检查看“是否允许索引”,能反映索引指令是否被讀到;再定期用 site 查询或批量 URL 检查观察存量變化。注意 site 數量只是估算,別把它当成精确的收錄數。
如果做完上面几步,索引里仍有残留,優先排查外鏈、镜像站点和參數版本,而不是繼續加 robots 規則。屏蔽得越狠,沟通渠道越少,處理周期反而越長。