搜尋抓取

robots.txt 屏蔽一個目錄後,里面的 URL 還會被蜘蛛發現吗

Disallow 挡的是抓取動作,不是 URL 的存在。被屏蔽目錄里的内鏈蜘蛛讀不到,但站外連結和 Sitemap 仍可能把地址送進队列。本文拆開發現與抓取两件事,說明常见誤操作,以及 robots.txt 本身不稳定时對全站抓取的影响。

搜尋抓取

robots.txt 屏蔽一個目錄後,里面的 URL 還會被蜘蛛發現吗

先分清两件事:發現 URL 和抓取 URL

蜘蛛的工作大致分两步:先把地址放進待抓队列,再按队列逐條去取。robots.txt 管的是第二步。它拦不住別人把連結寫進頁面、寫進 Sitemap,也拦不住蜘蛛在別處看到這個地址。所以一個 URL 被 Disallow 掉,通常只是處在「已知但没抓」的狀態。

蜘蛛讀 robots.txt 的时机

每次准备抓取某個 URL 之前,蜘蛛會先核對對應站点的 robots.txt。這份文件會被缓存一段時間,不會每條請求都重新下载。如果路径命中 Disallow 規則,它就跳過這次抓取。跳過的是一條 URL 的抓取動作,不是這條 URL 的存在。

Disallow 的语义更接近「別来取内容」,而不是「当作這個地址不存在」。

被屏蔽目錄里的連結,蜘蛛走得到吗

走不到。連結要被發現,前提是有人抓取了承载它的那個頁面。如果一個目錄整体被 Disallow,蜘蛛取不到目錄里的頁面,自然也讀不到頁面中的内鏈。這是很常见的连鎖問题:本想屏蔽某個參數化目錄,结果把挂在里面的正常文章入口一起切断了。

能绕過這一层的只有站外来源,比如其他站点的連結、社交平台上的分享、Sitemap 里直接列出的地址,以及歷史上已经被抓過、留在记錄里的地址。

Sitemap 里列了被屏蔽的 URL 會怎样

  • 地址會被讀取,但抓取环节仍被 robots.txt 拦住,多半是白列。
  • 如果站点地图里大量都是這類地址,會挤占提交額度,也让抓取統計难以判断。
  • 比較稳妥的做法是让 Sitemap 只放希望被抓的規范地址,屏蔽目錄下的地址不要同时出現在两邊。

用 robots.txt「清理」頁面是常见誤操作

有些站点希望某些頁面從搜尋结果里消失,就直接在 robots.txt 里屏蔽整個目錄。實际结果往往是:頁面不再被抓,但早先抓到的版本可能還留着;外站連結仍在持續把 URL 送進队列,只是内容無法更新。想让它真正登出,一般要允许抓取後用 noindex,或者返回 404、410 明确告知内容已不存在。這两條路都需要蜘蛛能取到响應,屏蔽反而把它挡在门外。

robots.txt 本身不稳定,代價會放大

它是抓取的前置文件,服務器對它不稳定时,影响會扩散到全站:

  • 返回 5xx:多數蜘蛛會保守處理,短暂降低甚至暫停抓取,等情况恢复。
  • 返回 404:通常按「没有限制」處理,等于放開了原本想挡的路径。
  • 返回一長串重定向:多一次無谓往返,規則也可能失效。
  • 被 CDN 或 WAF 拦下、返回 HTML 登入頁:同样會被当作無效規則。

建议把它当作一個静態小文件维護:放在根目錄、直接返回 200、別挂复杂逻辑、別依赖容易超时的後端接口。

日常维護的几個检查点

  1. 屏蔽規則尽量精确到具体路径或參數,不要一屏蔽就是整個目錄。
  2. 被屏蔽的路径,不要同时出現在内鏈、Sitemap 和站内推荐位里。
  3. 希望從索引中移除的頁面,優先考虑 noindex,或者明确的 404 / 410。
  4. 改完規則後翻几天訪問日誌,看蜘蛛是否還在反复請求被挡的地址。
  5. 把 robots.txt 的可用性纳入监控,和首頁同等看待。