在 robots.txt 里寫了一條 Disallow,過几天去搜一下,那條 URL 還在,标题摘要里甚至還能看到内容。于是不少人判断“屏蔽没生效”,回头又去改規則。其實多數情况下不是没生效,而是屏蔽和移除本来就不是同一件事。
robots.txt 管的是抓取,不是索引
robots.txt 里的“robots exclusion”容易被理解成“搜尋引擎看不到這個頁面”。但它约束的范围只有一個:爬虫是否可以抓取這個 URL。至于這個 URL 要不要進入索引、要不要在搜尋结果里被搜到,属于索引环节的判断,和抓取许可是两條线。
搜尋引擎完全可以直接把它放進索引,信息来源可能是外鏈的锚文本、URL 本身包含的词、歷史上抓取過的舊版本,或者其他頁面的引用。此时结果頁通常會顯示一句“由于此網站的 robots.txt,我們無法提供该頁面的具体描述”,但地址依然在。
判断标准很简單:搜尋结果里出現這個地址,不代表爬虫讀過它;反過来,爬虫讀不到,也不代表它不會出現。
屏蔽、抓取、移除是三件事
- 屏蔽(Disallow):告诉爬虫不要請求這個 URL。頁面還在,用戶訪問正常,索引可能仍然保留。
- 不索引(noindex):告诉搜尋引擎不要把這個頁面放進索引。前提是爬虫必须能抓到頁面,才讀得到這個标记。
- 移除:頁面本身返回 404 或 410,或者用临时移除工具清掉已有索引。這是最彻底的一步。
三者混在一起用,最典型的事故是:robots.txt 里 Disallow 了某個目錄,同时頁面上加了 noindex。爬虫被挡住,讀不到 noindex,索引里的舊版本就長期存在,谁也清不掉。
想把頁面從索引里拿掉,按這個顺序核對
- 確認這條 URL 是不是真的需要移出索引。後台頁、參數篩選頁、測試頁和站内搜尋结果頁,處理方式並不一样。
- 先看 HTTP 狀態碼。頁面已经废弃,直接返回 404 或 410,比任何标记都干净。
- 頁面必须保留(比如老頁面要跳轉给用戶看),就让它可被抓取,然後在頁面头部或响應头里放 noindex。
- 检查 X-Robots-Tag,它和 meta robots 同样有效,而且更适合非 HTML 资源。
- 同步清理 robots.txt 里對應的 Disallow 規則,否則爬虫進不来,noindex 永遠不會被讀到。
- 在工具里查看该 URL 的索引狀態,必要时提交一次移除請求,作為過渡手段。
几個容易反向操作的地方
- 把敏感目錄寫進 robots.txt。規則文件是公開的,等于主動把這個路径公布出去。
- 以為 Disallow 等同于刪除,放着不管,索引和缓存長期留在结果里。
- 临时下线时先删 robots 規則、等爬虫進来抓取,却忘了頁面還開着,收錄反而更多。
- 規則寫得過于宽泛,例如 Disallow: /search 把正常栏目一起挡住。
還需要留意匹配方式。robots.txt 是前缀式匹配,/abc 會同时命中 /abcd、/abc/1、/abc.html。寫規則时用 $ 或更具体的路径收窄,能减少誤伤。至于頁面什么时候從索引里消失,取决于再抓取和索引更新,通常不是当天就能看到结果,隔几天再看一次狀態即可,不必反复改規則。