搜尋抓取

静態资源抓取:蜘蛛除了 HTML 還會拉走哪些文件

抓取日誌里除了頁面請求,往往還有大量图片、CSS、JS 和字体文件的請求。這些静態资源的抓取同样占用抓取预算,也會影响渲染與内容判断。本文說明蜘蛛會拉取哪些资源、拦截资源可能带来什么後果,以及如何從日誌中定位無意义的资源抓取並做收敛。

搜尋抓取

静態资源抓取:蜘蛛除了 HTML 還會拉走哪些文件

很多人看抓取日誌时只關注 HTML 頁面,翻到後面才發現,蜘蛛請求數量最多的其實是各種静態资源。它們看起来無關紧要,却實實在在占用請求額度,有时還會影响蜘蛛對頁面内容的理解。

蜘蛛除了 HTML 還會拉哪些文件

只要出現在 HTML 里、並且允许被抓取,蜘蛛就可能顺着标簽把對應文件取走。常见的有這几類:

  • 图片:content 里引用的正文图、列表缩略图、图标文件。
  • CSS 與 JavaScript:外鏈样式和脚本,渲染頁面时基本都會請求。
  • 字体與图标文件:通過 CSS 的 @font-face 或图标字体引入时,可能连带被抓。
  • 部分媒体文件:音频、视频的一般以封面图或播放器脚本的形式被請求,整段视频通常不會被完整下载。
  • 其他:AMP 頁面、站点驗證文件、被引用的 JSON 資料接口,视實現方式而定。

這些請求會出現在服務器訪問日誌里,狀態碼和字节數都能看到,只是很多人没有單獨統計過。

拦住 CSS 和 JS 會有什么後果

不少站点為了省资源,习惯在 robots.txt 里直接拦掉 /css/ 和 /js/ 目錄。這個做法風險不小。

現代搜尋引擎渲染頁面时依赖样式和脚本。如果關键资源被拦截,蜘蛛拿到的可能是一個结构错乱甚至空白的頁面,正文、内鏈、结构化資料都可能判讀不出来。主流搜尋引擎的官方文档都建议不要屏蔽 CSS 和 JavaScript,而是让它們正常被抓,再通過其他方式控制资源消耗。

控制资源抓取,靠的是减少無效资源,而不是一刀切地屏蔽渲染依赖文件。

资源抓取同样在消耗抓取预算

蜘蛛一天愿意在你的站点上發起多少次請求,大致是有限的。资源請求和頁面請求算在同一本帳里。当图片尺寸没压缩、同一張图在多個模板里重复引用、缩略图按原图輸出时,资源抓取就會挤占頁面抓取的空間,尤其是列表頁和詳情頁數量都很大的站点。

常见可收敛的方向:

  1. 图片统一压缩並按展示尺寸輸出,避免大图小用。
  2. 合並或延迟加载非首屏脚本,减少渲染阶段的額外請求。
  3. 把静態资源放到 CDN,减轻源站压力,也让资源抓取不再频繁打到應用服務器上。
  4. 清理模板里已废弃但仍被引用的舊资源文件。

從日誌里看资源抓取是否合理

按扩展名或路径前缀統計日誌,能看到蜘蛛在不同资源類型上的請求占比。几個值得留意的信号:

  • 某個图片目錄的請求量遠超頁面請求量,說明存在重复引用或尺寸問题。
  • 大量 404 的资源請求,通常是模板改了路径、舊文件没保留。
  • 脚本或样式長期返回 5xx,可能让蜘蛛反复重试,白白消耗額度。
  • 资源請求集中在少數几個路径參數上,例如带随机串的图片地址,容易被当成無限 URL 抓下去。

几点實操建议

  • CSS、JS 保持可抓取,不要用 robots.txt 拦渲染依赖文件。
  • 把资源抓取和頁面抓取分開統計,先看清比例再谈優化。
  • 图片使用固定、可预测的地址,避免带時間戳或随机參數。
  • 资源响應尽量走缓存,缩短首字节時間,减少超时重试。
  • 改版或迁移资源目錄时,對舊地址做好跳轉,避免留下成片 404。

资源抓取不是坏事,它是蜘蛛理解頁面的必要环节。真正需要處理的,是那些重复的、過期的、被拦错的請求。