搜尋抓取

蜘蛛来一次不只抓 HTML:资源請求也在花抓取预算

蜘蛛訪問頁面时,除了 HTML 還會取回 CSS、JS、图片等资源,這些請求同样占用抓取配額。本文說明哪些资源請求属于無效消耗,如何通過修复 404、统一资源地址、交给 CDN 缓存等方式减少浪費,以及怎样從服務器日誌判断资源抓取在整体抓取中的占比。

搜尋抓取

蜘蛛来一次不只抓 HTML:资源請求也在花抓取预算

很多人看服務器日誌时只盯着 HTML 請求,觉得蜘蛛来了一趟就是抓了一個頁面。實际上一次頁面訪問往往伴随一串附带請求:样式表、脚本、字体、图片,甚至頁面里引用的 JSON 接口。這些請求同样占用抓取配額,也會给服務器带来负载。理解這一点,有助于判断抓取预算到底花在了哪儿。

一次抓取不等于一個請求

蜘蛛拿到一個 URL 後,先取回 HTML,這一步是必须的。之後為了理解頁面结构、確認内容是否完整渲染,它可能繼續取回頁面里引用的外部资源。對以文本為主的站点,這部分開销不大;但對模板复杂、第三方脚本多的站点,一個頁面可能引出几十個资源請求。

需要說明的是,不同搜尋引擎對资源抓取的處理方式並不一致,有的會完整取回 CSS 與 JS 用于渲染,有的只做有限尝试。判断自己站点属于哪種情况,最直接的办法還是看訪問日誌里同一時間段的請求分布,而不是凭印象判断。

哪些资源請求属于無效消耗

  • 返回 404 的脚本和样式:多半来自改版残留或错誤路径,蜘蛛每次走到頁面都會再撞一次。
  • 带版本參數重复的资源:同一個文件因為參數不同被当成多個地址,抓取次數成倍增加。
  • 未压缩的大图與封面图:几百 KB 的图片對判断頁面内容帮助有限,却要占用带宽和抓取時間。
  • 被反复引用的第三方脚本:統計、客服、广告组件的域名不在你的控制范围内,抓取行為也难以预测。

减少無效资源抓取的做法

  1. 统一资源地址:去掉無意义的查询參數,用文件名或构建号管理版本,避免同一個文件存在多個地址。
  2. 修复 404:日誌里周期性出現的资源 404,值得單獨排查一次,收益往往比新增几個頁面更明顯。
  3. 让缓存层承担重复請求:静態资源交给 CDN 後,回源次數會明顯下降,蜘蛛重复取回的成本也随之降低。
  4. 合並與压缩:减少請求數量通常比压缩單個文件更直接。
  5. 谨慎使用 robots.txt 屏蔽资源:屏蔽 CSS 與 JS 可能让蜘蛛拿不到完整的頁面结构,反而影响它對頁面内容和連結的判断,渲染必需的资源一般不建议屏蔽。
屏蔽资源前先想清楚:你是想少让它抓几個文件,還是想让它看不清頁面。後者带来的损失通常更大。

体积和數量,哪個更值得管

從抓取节奏看,請求數量往往比單個体积影响更大。每個請求都要经歷解析、连接、等待响應,抓取時間被切成许多小段。压缩图片能省带宽,但把二十個請求並成三個,通常更快看到抓取节奏的變化。

從日誌里看资源抓取占比

在訪問日誌里按扩展名做一次粗筛:統計 CSS、JS、图片等後缀的請求量,再和 HTML 頁面請求量對比。如果资源請求占了大部分,且其中相当比例是 404 或重复地址,就說明抓取配額被消耗在了與内容無關的地方。這個動作不需要复杂工具,一次篩選或一條命令就能完成。

什么时候不用太在意

内容型小站、模板简單的站点,资源開销本来就低,不必為此专门調整架构。真正值得關注的是两種信号:资源請求數長期遠超 HTML 請求數;以及资源 404 長期存在,抓取時間集中在少數几個模板頁上。

抓取预算並不是一個固定數字,它随站点規模、更新频率、服務器响應速度變化。與其猜测額度,不如先把明顯的浪費止住:修掉 404,统一资源地址,把静態文件交给缓存层。做完這些再回头看日誌,蜘蛛花在 HTML 上的比例通常會有所變化。