搜尋抓取

蜘蛛抓頁面时會不會顺手抓图片和 JS:资源請求的抓取代價

蜘蛛取回 HTML 之後,往往還會請求 CSS、JS 和部分图片。這些资源請求虽然不直接占用頁面抓取配額,却會影响渲染结果和抓取效率。本文梳理哪些资源會被請求、常见的阻塞問题,以及减少無效资源請求的排查思路。

搜尋抓取

蜘蛛抓頁面时會不會顺手抓图片和 JS:资源請求的抓取代價

蜘蛛抓取的不只是 HTML

很多人查看服務器日誌时,只盯着 HTML 頁面的請求,看到一條 GET /article/123 就算完成了一次抓取。但現代搜尋引擎的抓取通常分两步:先取回 HTML,再根據 HTML 里的引用去請求必要的资源。第二步经常被忽略,却直接影响頁面能不能被正确理解。

哪些资源會進入抓取請求

蜘蛛對不同類型的资源態度並不一致,大致可以這样理解:

  • CSS:一般會被請求。它决定頁面结构,缺失时渲染结果可能和用戶看到的不一样。
  • JS:與渲染相關的脚本會被請求,尤其是同步加载、位于首屏、參與生成連結的脚本。
  • 图片:主要图片通常會被抓,但優先級低于 CSS 和 JS,体积很大的图片不會每次都取。
  • 字体、統計脚本、广告位:多數情况下不取或很少取,除非它們阻断了渲染。

需要强調的是,资源抓取和頁面抓取往往使用不同的配額。资源請求不會直接吃掉頁面的抓取预算,但會拉長單次渲染的時間,間接影响蜘蛛在同一站点上的抓取效率。

三種常见的资源問题

1. 關键 CSS 或 JS 被 robots.txt 屏蔽

為了“省流量”而屏蔽 /static/、/assets/ 這類目錄是很常见的做法。结果是蜘蛛拿到的 HTML 缺样式、缺脚本,渲染出来的頁面可能接近空白,連結也点不出来。屏蔽静態目錄之前,先確認這些文件是否參與了頁面渲染。

2. 懒加载图片只寫了 data-src

把真實地址放在 data-src、data-original 里,等 JS 滚動时再替換 src,用戶端体驗没問题,但蜘蛛未必會触發滚動。可考虑给首屏图片保留正常的 src,或者用 noscript 提供兜底地址。

3. 長期 404 的资源文件

頁面引用的图片、脚本被刪除後返回 404,每次渲染都會产生一串失敗請求。數量少时影响有限,成百上千個頁面都引用同一個坏文件时,就是在持續消耗抓取资源。

降低無效资源請求的做法

  1. 合並压缩 CSS 與 JS,减少單頁的請求數量。
  2. 给图片設定明确的宽高,避免布局抖動引發的額外計算。
  3. 把首屏必需的资源内联或前置,非關键脚本延迟加载。
  4. 定期检查资源文件的可訪問性,及时清理失效引用。

怎么驗證资源抓取是否正常

服務器日誌里,资源請求和 HTML 請求是分開记錄的,可以按文件後缀篩選,看蜘蛛訪問资源时的狀態碼分布。如果大量资源返回 403 或 404,說明渲染环境從一開始就是不完整的。也可以對照抓取統計中的资源下载失敗提示,判断問题出在 robots.txt 還是服務器配置。

资源抓取不是越多越好。目标不是让蜘蛛把每個文件都取一遍,而是让它在合理的請求量内,拿到足以正确渲染頁面的那些文件。