搜尋抓取

服務器抖動與抓取路径:蜘蛛從哪一截開始放弃

蜘蛛抓取本质上是一串连續的請求,服務器响應一抖,路径就可能從中途断開。本文拆解服務器變慢时蜘蛛的降速、重试與收缩行為,說明動態參數頁、深层頁面和分頁尾部為何最先掉队,並给出响應時間、缓存、限流與日誌排查上的可执行動作。

搜尋抓取

服務器抖動與抓取路径:蜘蛛從哪一截開始放弃

蜘蛛抓取一個站点,本质上是一连串 HTTP 請求串起来的路径:首頁到列表頁,列表頁到詳情頁,中間可能還夹着分頁、篩選參數和静態资源。這條路径能不能走完,不只取决于連結有没有寫對,還取决于每一步的服務器响應稳不稳。連結结构再漂亮,响應一慢,路径照样會從中途断掉。

一次抓取失敗,断的是整條线

蜘蛛不是先規划好完整路线再出發,而是走到哪算哪。目前頁面請求成功,它才會解析出連結、把新 URL 放進队列。如果某一步拿到超时、连接被重置或者 5xx,這一跳之後的連結就都不會被發現,只能等下次重訪。

所以路径上的每個节点都接近于單点:断在列表頁,後面所有詳情頁一起消失;断在分頁第二頁,後面的列表就全看不到了。

服務器變慢时,蜘蛛會怎么調整

  • 先降速:响應時間拉長,抓取速率會跟着压下来,單位時間能走完的路径變短。
  • 再重试:5xx 和超时通常會被安排重试,重试次數與間隔由搜尋引擎决定,站点很难干预。
  • 然後收缩:持續表現不稳定的目錄或參數,抓取優先級容易被下調。
  • 最後是路径整体變窄:原本能走到第四层的,可能停在第二层就折返。

這個過程通常是渐進的,不會一次跳變,所以很容易被忽略,直到某天發現新頁面收錄明顯變慢,才回头查服務器。

同样慢的情况下,哪一截最先断

超时阈值對所有 URL 大致相同,但不同頁面熬過阈值的能力差別很大:

  1. 動態參數頁:带篩選、排序參數的 URL 往往响應最慢,最先被放弃。
  2. 深层頁面:路径本来就長,優先級靠後,抓取频率低,失敗後拿到重试的机會也少。
  3. 分頁尾部:第三頁往後本来就少被抓,一抖動更容易彻底掉队。
  4. 大文件與图片:單個請求耗时長,會挤占同一時間段内的抓取額度。

站点侧能做的几件事

  • 把關键路径上的頁面响應压到几百毫秒内,TTFB 是最该先看的指标。
  • 给列表頁、分頁和热门詳情頁加缓存,避免每次抓取都打到資料库。
  • 避免整站同时變慢:慢查询、定时任務、备份尽量错開抓取高峰。
  • 确實要临时下线,用 503 並带上 Retry-After 响應头,比直接 200 返回一個空頁面更清楚。

限流要按来源区分

站点的防護策略如果對所有来源一视同仁,蜘蛛很容易被誤伤,表現為間歇性的连接被拒或响應极慢。给已知的搜尋引擎来源保留稳定的响應通道,比事後逐個加白名單更省事。

怎么確認問题出在服務器而不是連結

两件事可以對照着看:一是日誌里搜尋引擎来源的响應碼分布,5xx 與超时的占比是否在上升;二是這些失敗請求集中在哪些目錄、哪些參數上。如果失敗集中在動態參數頁,多半是服務器侧的問题;如果失敗集中在某一层級的静態頁面,優先回头检查内鏈和路径设計。

抓取路径不是画在纸上的图,而是一次次真實請求跑出来的结果。服務器稳不稳,直接决定了這張图能画多深。