常见問题

目标 URL 已经被搜尋蜘蛛發現,却迟迟不抓取,問题出在哪

URL 被搜尋蜘蛛發現和真正被安排抓取是两件事。本文拆解發現後不抓取的常见原因,從入口頁抓取频次、連結呈現形式,到目标站的响應速度、robots 設定和抓取预算,並给出用服務器日誌自查的排查顺序,帮助判断問题出在蜘蛛池這一侧還是目标站這一侧。

常见問题

目标 URL 已经被搜尋蜘蛛發現,却迟迟不抓取,問题出在哪

很多人把“URL 被發現”和“URL 被抓取”当成同一件事,其實中間還隔着一层調度。搜尋蜘蛛在入口頁看到連結,只是把這個 URL 放進待抓取队列,什么时候真正来抓,取决于它分给這個站点的抓取预算、目标地址的响應情况,以及整個队列的轻重缓急。所以“發現很久了還没抓”是很常见的現象,並不一定代表入口頁失效。

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

發現,指的是搜尋蜘蛛在某個頁面上解析到了目标 URL;抓取,指的是它真的向目标站的服務器發起請求並讀取内容。前者主要由入口頁决定,後者主要由目标站自身的狀態决定。入口頁做得再規范,也只能提高進入队列的机會,不能替目标站决定抓取顺序。

入口頁這一侧可能的原因

  • 入口頁本身抓取频次偏低。入口頁如果很少被抓,新加的連結自然要等更久,這和入口頁的可訪問性、更新频率、站点整体表現都有關系。
  • 連結形式不容易被解析。連結如果依赖客戶端渲染,或藏在折叠层、彈窗、需要交互才展開的区域里,被识別到的概率會下降,蜘蛛可能只看到入口頁的静態部分。
  • 連結數量短期暴增。一次加上大量新連結,容易触發抓取节流,蜘蛛會分批處理,而不是一次性全部入队。
  • 入口頁與目标 URL 主题跨度大。蜘蛛會參考連結上下文是否合理,跨度太大时,部分連結可能只被记錄、不被優先安排。

目标站這一侧更常见的原因

  • 目标站整体抓取预算有限。新站或内容量小、更新慢的站点,分配到的抓取次數本身就少,队列里排在後面的 URL 會等很久。
  • 服務器响應慢或频繁超时。抓取时如果经常遇到 5xx、连接超时,蜘蛛會主動降低對整站的抓取频率。
  • 目标路径被 robots.txt 拦截。入口頁允许抓取,但目标路径被屏蔽时,蜘蛛即使發現了地址,也不會去讀取内容。
  • 目标頁返回狀態有問题。软 404、跳轉到登入頁、正文几乎為空,都可能让這次抓取被判定為低價值,後續排期繼續延後。
  • 目标 URL 集中在同一域名或同一 IP。抓取調度會做合並與限速,看起来就像“一個都没動”。

用服務器日誌做一次自查

  1. 先看入口頁的訪問日誌,確認搜尋蜘蛛是否真的抓到過入口頁,以及大致抓取频率。
  2. 再看這些抓取是否發生在連結更新之後。如果連結加完之後入口頁压根没有新的抓取,問题更可能出在入口頁的可见性上。
  3. 接着看目标站的訪問日誌,检查有没有搜尋蜘蛛的請求。有請求但狀態碼異常,問题在目标頁本身;完全没有請求,說明還停留在队列阶段。
  4. 對比入口頁抓取時間和目标站首次抓取時間,間隔過長通常說明抓取预算不足或遇到限速。

可以做的調整

  • 先把目标站的响應速度和稳定性處理好,這一步的收益通常比反复調整入口頁更明顯。
  • 入口頁保持稳定更新,連結以常規的可抓取形式呈現,避免藏在必须交互才能展開的位置。
  • 新增連結分批添加,不要一次性堆入大量 URL。
  • 检查目标路径是否被 robots.txt、防火墙或訪問限制挡在门外。
  • 配合站点自己的 sitemap 提交,让入口頁和站点原有入口两條路径互相印證。
發現只是入场券,抓取排期由很多因素共同决定。能把控的是目标站的稳定性和入口頁的可见性,不能把控的是蜘蛛什么时候来,這一点需要提前有预期。

如果排查之後入口頁和目标站都没有明顯問题,那多半只是時間問题。與其频繁改動入口頁结构,不如先观察一两周的日誌,看抓取趋势是在缓慢變好還是完全停滞,再决定下一步動作。