搜尋抓取

robots.txt 與 URL 發現:被自己的規則挡住的入口怎么排查

robots.txt 决定蜘蛛能不能抓,也間接决定了它能不能顺着頁面繼續發現 URL。本文先讲清职责邊界,再梳理几種典型的自我封禁寫法,並给出一套從通讀規則、對照目錄、抽样 sitemap 到观察抓取痕迹的核對顺序,同时說明日誌里看不到被拦請求时该如何判断。

搜尋抓取

robots.txt 與 URL 發現:被自己的規則挡住的入口怎么排查

很多抓取異常不是蜘蛛不来,而是站点自己在 robots.txt 里把入口關掉了。robots.txt 决定的是能不能抓,不决定知不知道,但一旦某個目錄被禁止抓取,蜘蛛就無法顺着這個目錄里的連結繼續發現更深的 URL——發現路径會断在入口這一步。

先分清 robots.txt 的职责邊界

它是一份抓取许可声明,不是 URL 發現清單。把地址寫進 sitemap 或内鏈,蜘蛛可能知道它存在;但只要 robots.txt 不允许抓取,它就取不到内容,也不會繼續跟進頁面里的連結。所以排查 URL 發現異常时,robots.txt 應该放在靠前的位置,而不是等日誌翻完再看。

几種典型的自我封禁寫法

  • 測試残留的全站封禁。上线前寫的「禁止所有」忘了删,或者只删了一半,表現是抓取覆盖面突然收窄。
  • 把 sitemap 放在被禁目錄里。声明了 sitemap 地址,但该路径本身落在禁止范围内,声明形同虚设。
  • 通配符誤伤列表頁。用通配符挡參數,本意是清理重复 URL,却把翻頁、正常需要發現的頁面一起挡掉。
  • 封掉静態资源目錄。样式表和脚本被禁止抓取时,依赖脚本渲染的頁面在蜘蛛眼里可能是空的,正文里的連結自然也看不到。
  • 放行與禁止規則混用後顺序混乱。規則越長,越容易漏掉某條更具体的禁止項。

逐條核對的顺序

  1. 完整打開 robots.txt,從第一行讀到最後一行,不要只看自己记得的那几條。
  2. 列出所有禁止與放行規則,對照站点目錄结构,标出會被命中的路径。
  3. 抽取 sitemap 里的 URL 做抽样,看有多少落在被禁范围内。
  4. 检查声明 sitemap 的地址能否訪問、是否被自己的規則覆盖。
  5. 確認样式表、脚本、图片目錄没有被誤封,尤其是内容靠前端渲染的頁面。
  6. 核對放行目錄里是否還有真實存在的内鏈入口,別让放行目錄變成空壳。

日誌里看不到的那部分

被 robots.txt 拦下的請求通常到不了服務器,日誌里只會安静一片。所以「日誌没有異常」並不等于「發現正常」,這两件事要分開看。如果某個目錄長期没有任何抓取记錄,又找不到 404 或超时的痕迹,先怀疑規則,再怀疑其他原因。

和 noindex 的区別

禁止抓取是不让取内容,noindex 是取到之後不让收錄。想下线内容时,两者不能互相替代:只寫禁止抓取,蜘蛛進不来,也就看不到 noindex,判断會一直停在原地。

改完規則之後怎么观察

規則調整不必一步到位。可以先放開一层目錄,观察一段時間里该目錄的抓取請求量、返回狀態分布,以及更深层 URL 是否開始出現抓取痕迹。放開的节奏取决于服務器承受能力和内容規模,没必要一次性全開。

robots.txt 只管抓取许可,不管 URL 是否被记錄。被禁止抓取的地址仍可能以缺少描述的形式出現在结果里,所以別把它当成内容下线的工具。

把 robots.txt 当作一條需要定期复核的通道規則,而不是一次寫完就不動的文件,URL 發現路径上的堵点會少很多。