搜索抓取

页面体积与抓取效率:HTML 过大时蜘蛛还能走多远

蜘蛛抓取不只是把页面下载下来,还要解析 HTML、提取链接和正文。页面体积过大、DOM 过深、关键内链被脚本延后渲染时,单个页面的读取成本会明显上升,单位时间能走完的 URL 随之减少。本文从 HTML 膨胀来源、内链前置、渲染取舍和传输压缩几个角度,给出可落地的自查顺序与调整方向。

搜索抓取

页面体积与抓取效率:HTML 过大时蜘蛛还能走多远

抓取不是“到了就算”,还要看读得完读不完

很多人看日志只关心状态码和抓取次数,忽略了蜘蛛拿到一个页面之后还要做一件事:把 HTML 解析一遍,从中提取出可继续抓取的链接和正文内容。页面体积、DOM 深度、链接出现的位置,都会影响这一步的效率。当站点有大量结构臃肿的页面时,蜘蛛在单个页面上花的时间变多,单位时间内能走完的 URL 就变少。

HTML 体积通常从哪里膨胀

  • 模板冗余:每个页面都带一大段用不到的组件代码、弹窗和评论区骨架。
  • 内联样式和脚本:把本该外链的资源塞进 HTML,标签体积成倍增长。
  • base64 图片和字体:直接嵌在 HTML 或 CSS 里,体积远超外链资源。
  • 把整份数据以 JSON 形式塞进页面:列表页尤其常见,几百条数据全量输出。
  • 大量注释、空白和调试信息没有压缩。

这些内容对用户未必可见,但都会被下载和解析。可以先用开发者工具或命令行看一下首页、栏目页、详情页的 HTML 大小,重点确认有没有单个页面达到几百 KB 甚至超过 1 MB。

内链出现的位置,比数量更影响路径

解析时链接有先后顺序。如果导航、栏目入口、相关推荐都被放在页面后半段,而前面是一大段脚本和样式,蜘蛛要“读”过前面这些内容才能碰到链接。把主要导航和核心内链前置,是成本最低的调整之一。

另一个常见问题是链接由脚本动态插入。如果内链依赖异步加载、点击后才渲染,蜘蛛在初始 HTML 里可能根本看不到它。可行的做法是至少给关键入口保留一份静态可读的链接,动态部分作为补充。

渲染型页面的取舍

依赖前端渲染的页面,抓取端要多走一步执行脚本。这一步并非走不通,但会更慢,也更依赖资源能否顺利加载。如果导航、正文和分页入口能在服务端直出,就不必全部交给前端。对列表页和详情页来说,首屏主要内容直出通常比全量渲染更稳。

传输层的几个细节

  • 开启 gzip 或 brotli 压缩,纯文本页面的传输体积能明显下降。
  • 关注首字节时间,服务端渲染过慢时,等待时间也会被拉长。
  • 避免用分块传输把响应拖得很长,能一次返回的内容不要切成很多小包。
  • 静态资源与 HTML 分开处理,不要让页面 HTML 承担图片的传输。

可以按这个顺序自查

  1. 抽查首页、栏目页、详情页各三个,记录 HTML 大小和 DOM 节点数。
  2. 对比压缩前后的传输体积,确认压缩是否真正生效。
  3. 查看关键内链在源码中的位置和层级,是否早于大段脚本。
  4. 关闭脚本后再打开页面,看核心链接和正文是否仍然可见。
  5. 结合日志观察抓取量与页面体积变化之间的关系,验证调整是否有效。

体积优化不会直接带来收录,但它决定了蜘蛛在一个页面上的读取成本。当站点规模变大、页面数量上升时,把单个页面的读取成本降下来,往往比反复提交地址更值得做。

把页面做小、把链接提前、把主要内容直出,这三件事做扎实,蜘蛛的抓取路径通常会更顺。