搜尋抓取

robots.txt 與抓取路径:一條 Disallow 會挡掉多少 URL 發現

robots.txt 不只决定單個頁面能否被抓,它還會改變蜘蛛沿内鏈發現 URL 的路径。本文拆解 Disallow 的常见寫法、通配符與狀態碼問题,說明目錄級封禁如何截断抓取鏈路,並给出一份可执行的自查清單,帮助减少誤拦截带来的 URL 發現损耗。

搜尋抓取

robots.txt 與抓取路径:一條 Disallow 會挡掉多少 URL 發現

對多數蜘蛛来说,抓取一個站点的第一步往往不是首頁,而是根目錄下的 robots.txt。它决定接下来哪些路径允许被訪問。這個文件寫得太随意,影响的不只是某個頁面是否被抓,而是整條 URL 發現鏈路還能不能走通。

Disallow 拦的是抓取,不是索引

一個常见誤解是:把頁面 Disallow 掉,就等于不让它出現在搜尋结果里。實际情况是,蜘蛛無法抓取這個 URL,但如果站外或站内別處仍有連結指向它,它依然可能以“無摘要”的形式出現在结果中。想阻止索引,應该用 noindex,而前提是该頁面必须允许被抓取——否則蜘蛛讀不到 noindex 這條指令。

想让頁面不被索引,先得让它被抓到;不想让它被抓,就別指望 noindex 生效。

目錄級封禁如何改變 URL 發現

寫下 Disallow: /tag/ 這類規則後,蜘蛛不只是不進标簽頁,也不會再從标簽頁里顺着連結發現文章。列表頁、篩選頁、分頁同理。抓取路径是串联的:中間一段被封,後面的 URL 就少了一條被發現的路。

  • 被封禁目錄里的内鏈無法繼續传递發現價值,等于把這一块從抓取图里摘掉。
  • Sitemap 里提交的 URL 如果同时被 Disallow,通常也無法作為有效入口,清單作用大打折扣。
  • 規則按最長匹配生效,寫得過宽时,可能连 CSS、JS、图片一起挡掉,渲染型頁面就更容易讀不完整。

通配符和结尾符,容易寫宽也容易寫窄

* 與 $ 的用法直接决定拦截范围。Disallow: /*?sort= 會把任何带 sort 參數的 URL 一並挡掉,包括你本来希望被發現的列表頁;而 Disallow: /search 挡不住 /search/。寫規則时,最好拿真實 URL 逐條對照,而不是凭印象判断。

Crawl-delay 與抓取节奏

部分蜘蛛會讀取 Crawl-delay,但主流搜尋蜘蛛並不完全依赖它,更多依據自身對服務器响應速度和站点质量的判断来調整频率。與其在這里设一個很大的值,不如先解决响應慢、连接不稳的問题。

robots.txt 本身返回什么狀態碼

這個文件自己也是被請求的 URL,它的返回狀態同样會影响行為:

  • 200 且内容正常:按規則执行。
  • 404:多數蜘蛛會视為没有限制,按可抓取處理。
  • 5xx 或超时:部分蜘蛛會暂时降低或停止抓取,等文件恢复後再繼續。
  • 被重定向到其他域名或登入頁:行為不确定,相当于把規則的解释權交了出去。

與 Sitemap、内鏈的配合

Sitemap 是候選清單,不能替代抓取路径。如果清單里的 URL 恰好落在 Disallow 范围内,這份清單基本失效。内鏈則是發現新 URL 的主干通路,被封鎖的目錄意味着那些等着蜘蛛顺連結走来的頁面,可能很久都等不到一次訪問。两者要一起看:允许被抓的目錄,才值得放進 Sitemap;放進 Sitemap 的目錄,也不该被規則挡住。

一份可以照着做的自查

  1. 打開 robots.txt,把每條規則拿到真實 URL 上逐條驗證。
  2. 检查是否有目錄級封禁,挡住了列表頁、标簽頁、分頁這類聚合入口。
  3. 確認 CSS、JS、图片等渲染资源没有被誤挡。
  4. 確認 robots.txt 返回 200,且没有跳轉到別的地址。
  5. 對照 Sitemap,看提交的 URL 是否與 Disallow 冲突。
  6. 改動後观察抓取日誌中對應目錄的訪問變化,作為驗證依據,而不是当作效果承诺。

小结

robots.txt 是一道门,不是一块牌子。它不只在回答“能不能抓”,也在悄悄决定蜘蛛還能顺着哪條路走、能發現多少新 URL。規則越简洁、越贴近真實目錄结构,抓取路径就越不容易在中途被截断。