搜尋抓取

蜘蛛每天抓的不只是頁面:静態资源的抓取開销也要算進去

蜘蛛抓取頁面时,背後往往還跟着一串 CSS、JS、图片請求。這些静態资源不參與收錄判断,却占用服務器带宽與连接,也會干扰日誌分析。本文說明哪些资源最容易被反复抓取、常见的浪費来源,以及缓存、命名和日誌排查上的具体做法。

搜尋抓取

蜘蛛每天抓的不只是頁面:静態资源的抓取開销也要算進去

翻服務器日誌的时候,多數人盯的是 HTML 的狀態碼和抓取频次,很少注意同一時間還有另一類請求:图片、CSS、JavaScript、字体文件,有时還有站内接口。它們由蜘蛛在渲染頁面时顺带發出,不直接對應任何一個 URL 的收錄结果,但确實占着服務器的连接和带宽,也让日誌里的抓取画像變得不那么干净。

一次頁面抓取,通常不止一個請求

搜尋引擎在判断頁面内容时,往往需要把頁面渲染出来。這意味着抓一次 HTML,背後可能跟着若干個 CSS、JS 和图片請求。移動優先索引普及之後,渲染這一步變得更常規,资源請求也就跟着變多。對内容简單的小站,這部分開销可以忽略;但對图片密集、前端依赖較多的站点,资源請求數可能是 HTML 請求數的好几倍。

哪几類资源最容易被反复抓

  • 带随机參數的图片:给图片 URL 拼上時間戳或随机數,等于每次生成一個新地址,缓存無法命中。
  • 版本号频繁變化的静態文件:如果每次發布都改文件名又没有合理的缓存策略,蜘蛛每次訪問都要重新下载。
  • 未設定缓存的公共库:被全站引用的样式和脚本,如果没有缓存头,每個頁面渲染都會带来一轮請求。
  • 已被刪除但仍有引用的资源:頁面里還留着指向舊文件的連結,蜘蛛會一遍遍撞上 404。

這些請求會带来什么影响

最直接的是服務器负载。资源文件的体积通常比 HTML 大,並發請求叠加上去,带宽和连接數占用會明顯上升。其次是日誌噪音:如果按請求總數統計流量,资源請求會把頁面抓取的真實情况稀释掉,让你誤判蜘蛛對某個目錄的兴趣。此外,当站点本身响應偏慢时,大量资源請求會让整体抓取节奏更吃力。

可以做的几件事

  1. 给静態资源設定較長的缓存時間,並用内容哈希寫進文件名,让更新和缓存同时成立。
  2. 图片 URL 保持稳定,不要附加随机參數;需要多尺寸时用固定命名規則,而不是查询串。
  3. 清理頁面里指向已刪除资源的引用,別让蜘蛛反复拿到 404。
  4. 减少不必要的第三方脚本,能自托管就自托管,並固定版本。
  5. 不要為了省资源請求去 robots.txt 屏蔽 CSS 和 JS,這會直接影响頁面渲染结果。

從日誌里怎么看资源抓取

按文件扩展名分组,統計一段時間内各類资源的請求數量,再和頁面請求數做個對比。重点看两件事:一是同一個资源在内容没有變化时被請求了多少次,如果回回都是 200 而不是 304,說明缓存没起作用;二是 404 资源的請求量,這通常意味着頁面里還有坏鏈。把這两項降下来,抓取日誌會清爽很多。

资源請求不一定算在抓取額度的帳上,但它确實是你服務器的實际支出。把它当成抓取体驗的一部分来管理,比事後從日誌里找原因要省事。