蜘蛛抓取的不只是 HTML
很多站点把注意力放在頁面 URL 上,日誌里却能看到大量 .css、.js、.jpg、.woff2 的請求同样来自蜘蛛。原因不复杂:搜尋引擎要渲染頁面,就得把頁面引用的资源一起取回来。這些請求和你關心的 URL 共用同一個主机,自然也會占用抓取額度。
對小站来说,资源抓取通常不构成問题;但当頁面數量、模板复杂度、图片体积都上来之後,资源請求可能占到總抓取量的一大块,頁面被抓的节奏就會受影响。
哪些资源會被抓,哪些基本不會
- 會被抓:HTML 里直接引用的 CSS 和 JS、頁面中的 img 與 srcset、CSS 里的背景图、字体文件、预加载资源,以及渲染過程中由 JS 動態插入的图片等。
- 一般不會被抓:没有被任何頁面引用的静態文件、被 robots.txt 屏蔽的资源、只存在于备份目錄里的文件。
- 第三方域名上的资源(公共 CDN、字体库)會被抓,但計入對方域名的抓取,不會直接挤占你站点的額度。
有一点容易踩坑:為了“节省額度”在 robots.txt 里屏蔽 CSS 和 JS,结果蜘蛛渲染出的頁面缺样式、缺内容,反而更糟。渲染完整通常比省下几次资源請求更重要。
资源抓取怎么影响抓取节奏
影响主要来自三方面:數量、体积和响應质量。模板里塞了几十個阻塞渲染的脚本,或者每張图都是几 MB 的原图,蜘蛛每抓一個頁面都要額外等很多次下载。资源出現 5xx、超时或重定向鏈,也會拖慢整條抓取路径。
缓存配置是性價比最高的一环。给静態资源設定較長的 Cache-Control 有效期,並用带版本号的文件名做更新,蜘蛛在後續抓取中可以复用缓存,减少重复下载。ETag 和 Last-Modified 也能帮上忙。
可以從這些地方開始整理
- 統計模板里阻塞渲染的 CSS、JS 數量,能合並的合並,能延後的加上 defer 或 async。
- 压缩图片、按展示尺寸切图,避免在 CSS 里引用巨大的背景图。
- 给静態资源配置長缓存和版本化文件名,减少重复請求。
- 不要在 robots.txt 里屏蔽 CSS、JS 和图片目錄。
- 检查资源是否出現 404 或多次跳轉,在日誌里按狀態碼筛一遍。
- 如果资源請求占比确實很高,可以考虑把图片、字体放到獨立域名或 CDN,把請求分散到不同主机。
用日誌確認實际比例
把服務器日誌按 User-Agent 過滤出搜尋引擎的請求,再按扩展名或响應類型聚合,就能大致看出頁面請求與资源請求的比例、资源的平均响應時間,以及哪些资源在反复 404。搜尋控制台的抓取統計里也有按用途分類的資料,可以用来交叉驗證。
资源被抓本身不是坏事,渲染完整才有助于蜘蛛理解頁面内容。真正需要處理的,只是那些没有意义又反复占用額度的請求。