在日誌或站長工具里看到某個目錄已经被 robots.txt 的 Disallow 挡住,很多人的第一反應是“這部分内容不會再出現在搜尋结果里”。過一段時間去搜,發現其中几條确實還在。于是開始怀疑 robots 規則没生效。問题通常不在生效與否,而在于把“禁止抓取”和“禁止索引”当成了同一件事。
抓取和索引是两個獨立环节
搜尋引擎處理一個 URL 大致分两步:先抓取頁面内容,再根據内容判断是否放進索引。robots.txt 的 Disallow 作用在第一步,它告诉爬虫不要来取這個 URL 的响應体。但索引的素材来源並不只有抓取這一條路。
当外部站点連結到這個 URL 时,連結本身的地址、锚文本、周邊上下文都會進入搜尋引擎的视野。即使爬虫從来没取到頁面内容,它也可能凭這些信息生成一條结果:标题可能是 URL 本身或外鏈锚文本,摘要可能来自連結周围的文字。這類结果常被誤認為“robots 失效了”,實际上是索引用了抓取之外的信息。
noindex 生效的前提是頁面能被抓到
noindex 寫在頁面的 meta robots 标簽里,或者放在响應头的 X-Robots-Tag 中。無论哪種形式,爬虫都必须先把頁面抓下来,才能讀到這條指令。如果同一個 URL 既被 Disallow 又带 noindex,爬虫被挡在门外,讀不到 noindex,索引狀態自然不會有變化。這是最常见的一種冲突寫法。
下架單個頁面的操作顺序
- 先確認頁面目前可被抓取:robots 規則不挡它,訪問返回 200,没有被登入墙、驗證碼或地理限制拦在外面。
- 加上 noindex,保持頁面可訪問一段時間。
- 等搜尋引擎重新抓取並识別到 noindex,观察索引中的该 URL 是否逐步减少。
- 確認基本消失後,再决定是繼續保留 noindex,還是用 404、410 或重定向做後續處理。
顺序颠倒過来,先 Disallow 再想加 noindex,中間的等待時間會被拉長很多,因為爬虫根本没有机會讀到新指令。
只想省抓取消耗,可以只用 Disallow
並非所有被挡的 URL 都需要清理索引。有些目錄本来就不介意是否被收錄,只是不希望爬虫反复来抓,比如無穷尽的篩選组合、内部日誌頁、临时導出連結。這種情况下只寫 Disallow 是合理的,目的是把抓取配額集中在有價值的頁面上。
判断标准可以归纳成两句话:不希望它出現在结果里,用 noindex 並保證可抓;不在乎是否收錄、只想减少抓取,用 Disallow。两者混用时,先想清楚哪個目的優先。
排查时该看什么
- robots.txt 中针對该路径的具体規則,注意通配符與 Allow 的優先級,以及是否被上层目錄的規則覆盖。
- 頁面的 HTTP 狀態碼,以及响應头里是否存在 X-Robots-Tag。
- 頁面源碼中的 meta robots 是否與响應头指令冲突。
- 站長後台的抓取統計與索引狀態,看最近一次抓取時間和抓取结果。
- 是否存在登入墙、地域限制、JS 渲染失敗等導致内容拿不到的情况。
被大量外鏈指向的 URL 更要谨慎
如果一個 URL 有較多外部連結,處理节奏會更慢。搜尋引擎知道它存在,可能長期保留一條信息不完整的结果。想让這類 URL 彻底登出索引,需要在可抓取的前提下返回 noindex,或者用 404、410 明确表態,然後等外鏈自然衰减。單纯加 Disallow 往往只是让爬虫不再更新這條信息,结果反而更舊。
robots.txt 是抓取指令,不是收錄開關。想让内容不進入索引,靠的是 noindex;而 noindex 要起作用,頁面必须能被抓到。两個開關用反了,規則會互相抵消。
遇到“明明挡了却還在”的情况,先別急着改規則,把目的寫清楚:是要它消失,還是只是不想被抓。目的不同,用的工具和驗證周期都不一样。