搜尋抓取

HTML 体积與 DOM 規模:偏重的頁面會怎样影响抓取效率

蜘蛛抓取一個 URL 是有成本的:等待响應、下载字节、解析 DOM,必要时還要拉取资源並渲染。頁面越重,同样的抓取容量能覆盖的 URL 就越少。本文拆解 HTML 体积的常见来源,說明重頁面對抓取覆盖面和抓取深度的影响,並给出分頁、压缩、懒加载等可以落地的减负思路。

搜尋抓取

HTML 体积與 DOM 規模:偏重的頁面會怎样影响抓取效率

讨论抓取时,很多人把注意力放在連結、Sitemap 和更新频率上,却忽略了一個更基础的問题:蜘蛛抓取一個 URL 本身要付出多少成本。抓取资源不是無限的,單頁越重,在同样的抓取容量下能覆盖的 URL 就越少。這不是玄学,而是排队與配額分配的自然结果。

一次抓取包含哪些成本

從蜘蛛的视角看,抓取一個 URL 大致要经歷几個环节:

  • 连接與响應等待:DNS、建连、服務器處理時間;
  • 下载 HTML:字节數越多,占用的带宽和時間越長;
  • 解析並构建 DOM:节点越多,解析和後續處理越慢;
  • 资源與渲染:若進入渲染队列,還要拉取 CSS、JS 等资源;
  • 排队與去重:抓取结果要進入後續流程,重頁面占用的环节更多。

其中任何一环變贵,單位時間内能抓完的 URL 數量就會下降。

HTML 体积通常從哪来

1. 未压缩或压缩不彻底的响應

開啟 gzip 或 brotli 能明顯减少传輸字节,這一步几乎是必做項。但压缩只降低传輸成本,解压之後的解析成本依然存在,所以不能把压缩当成瘦身的全部。

2. DOM 节点過多

几千個节点和几萬個节点,代價完全不是一個量級。常见膨胀来源包括:所有栏目共用一套厚重模板、列表頁一次輸出上千條记錄、把不相關模块统统塞進同一個頁面。

3. 隐藏但仍然存在的内容

折叠面板、預設隐藏的選項卡、彈窗、首屏用不到的样式和脚本,如果寫死在 HTML 里,蜘蛛一样要下载和解析。對用戶不可见,對抓取並不免費。

4. 内联脚本與样式

少量内联可以减少請求,但几十 KB 甚至上百 KB 的内联内容會让 HTML 明顯變重,而且每次抓取都要重复下载,無法依赖外部文件的缓存。

重頁面带来的具体影响

  1. 抓取覆盖面下降:同样的抓取容量,被重頁面消耗掉的部分更多,長尾 URL 被安排抓取的机會變小。
  2. 抓取深度受限:蜘蛛沿連結前進时會逐层消耗资源,路径上的頁面越重,能走到的层級越浅。
  3. 對响應波動更敏感:体积大又遇上服務器慢,容易触發降速,進而影响整站的抓取节奏。

减负时要做對什么

  • 先看字节數,再看节点數:服務器日誌或抓取日誌中的响應大小能直接暴露問题,優先處理排在前面的模板。
  • 分頁優于超長列表:一頁輸出几十條比一頁輸出几千條更利于抓取路径展開,連結分布也更均匀。
  • 懒加载不等于隐藏内容:需要被發現的内容要有可直接訪問的連結地址,不能只靠滚動时才發起的請求。
  • 別為了瘦身牺牲可抓取性:把導航改成纯 JS 渲染、把正文改成异步加载,可能省了字节,却让蜘蛛拿不到内容,得不偿失。
判断标准很简單:這段内容對用戶和蜘蛛是否都必要?如果只是模板顺手带上的,删掉通常两头都受益。

怎么自查頁面是不是偏重

  • 抽取几個主要模板,记錄 HTML 的传輸大小和解压後大小;
  • 對比同一站点内轻量頁面與重量級頁面的抓取频次差异;
  • 检查移動端模板是否額外加载了大量桌面端用不到的内容;
  • 观察服務器响應時間是否稳定,避免体积與慢响應叠加出現。

小结

頁面体积不會直接决定收錄结果,但它會實打實地影响抓取效率。把模板做轻、把列表分頁、把隐藏内容清理干净,相当于给整站腾出更多抓取空間。這類改動不需要大動作,却往往能在抓取日誌里看到比較明顯的變化。