搜尋抓取

蜘蛛抓取时的连接竞争:HTML 和静態资源谁先排队

蜘蛛抓取一個頁面时,還會顺带請求 CSS、JS、图片等资源,這些請求和 HTML 争抢同一批並發连接。静態资源過多、過慢或長期报错,都會压缩頁面本身的抓取窗口。本文從日誌特征、资源合並與缓存、CDN 分摊、服務器响應稳定性几個角度,梳理连接层影响抓取效率的常见原因和調整顺序。

搜尋抓取

蜘蛛抓取时的连接竞争:HTML 和静態资源谁先排队

蜘蛛取一個頁面,不止取一個文件

很多站点把抓取理解成“蜘蛛来一次,取走一個 HTML”。實际鏈路中,蜘蛛解析 HTML 後還會請求頁面引用的 CSS、JS、图片、字体等资源。搜尋引擎蜘蛛對單個站点的並發连接數是有限的,這些附加請求會和 HTML 争抢同一批连接。当静態资源体积大、數量多、响應慢时,真正决定内容的那份 HTML 就會被排在後面。

连接被占满时,日誌會是什么样

比較典型的現象是:蜘蛛訪問 HTML 的次數没降,但單次耗时明顯變長;同一時間段里,资源 URL 的請求量遠高于頁面 URL;抓取總時間被拉長,單位時間内實际覆盖的頁面數反而下降。這不是蜘蛛“變懒”,而是它在等资源。

另一種情况是资源返回 404 或超时。蜘蛛會重试,重试同样占用连接,進一步挤压 HTML 的抓取窗口。

几個可以調整的方向

  • 合並與压缩静態资源:减少請求數量往往比單纯减小單個文件体积更直接,尤其是小图标、零散脚本。
  • 给静態资源設定長效缓存:带指纹的静態文件可以返回較長的 Cache-Control 和 ETag,蜘蛛二次抓取时通過协商复用,不必重复下载全量内容。
  • 把资源放到 CDN 或獨立域名:连接從主域分摊出去,HTML 的抓取窗口會宽松一些;但要確認 CDN 不拦截蜘蛛 UA,也不要让资源域變成新的瓶颈。
  • 首屏内容別依赖延迟加载:正文图片懒加载、内容靠滚動触發,蜘蛛可能拿不到;至少让文本内容在 HTML 里直接可见。
  • 清理無意义资源:埋点、統計、废弃组件引用的脚本如果長期返回 404,會在日誌里持續消耗抓取次數,值得清理,而不是靠屏蔽了事。

服務器侧的稳定性同样是變量

蜘蛛的抓取节奏會參考服務器的响應情况。首字节時間波動大、错誤率高时,它會主動放慢,甚至暫停對该目錄的回訪。這时候即使你把资源優化到位,恢复也需要時間。带宽被其他业務占满、源站临时扩容失敗、防火墙對高频 IP 做了限速,都會让蜘蛛的连接被重置。稳定的响應時間和可控的错誤率,是抓取效率的基础。

把抓取效率全部归因于“蜘蛛不愿来”,往往會漏掉连接层的問题。先看服務器日誌里的响應時間分布,再谈内容。

怎么驗證調整是否有效

  1. 在日誌里按蜘蛛标识統計頁面 URL 與资源 URL 的請求比例,观察一段時間的變化。
  2. 關注 HTML 請求的平均响應時間,而不是站点整体平均响應時間。
  3. 看單位時間内被抓取的不同 URL 數量,這個數字比總請求數更接近真實覆盖。
  4. 調整一次只改一個變量,否則無法判断是哪一項起了作用。

抓取本质上是一次资源調度:连接、带宽、响應時間都是有限的。让蜘蛛用最少的连接拿到最有價值的内容,比一味追求“蜘蛛来得更多”更實际。