讨论抓取时,很多人把注意力放在链接、Sitemap 和更新频率上,却忽略了一个更基础的问题:蜘蛛抓取一个 URL 本身要付出多少成本。抓取资源不是无限的,单页越重,在同样的抓取容量下能覆盖的 URL 就越少。这不是玄学,而是排队与配额分配的自然结果。
一次抓取包含哪些成本
从蜘蛛的视角看,抓取一个 URL 大致要经历几个环节:
- 连接与响应等待:DNS、建连、服务器处理时间;
- 下载 HTML:字节数越多,占用的带宽和时间越长;
- 解析并构建 DOM:节点越多,解析和后续处理越慢;
- 资源与渲染:若进入渲染队列,还要拉取 CSS、JS 等资源;
- 排队与去重:抓取结果要进入后续流程,重页面占用的环节更多。
其中任何一环变贵,单位时间内能抓完的 URL 数量就会下降。
HTML 体积通常从哪来
1. 未压缩或压缩不彻底的响应
开启 gzip 或 brotli 能明显减少传输字节,这一步几乎是必做项。但压缩只降低传输成本,解压之后的解析成本依然存在,所以不能把压缩当成瘦身的全部。
2. DOM 节点过多
几千个节点和几万个节点,代价完全不是一个量级。常见膨胀来源包括:所有栏目共用一套厚重模板、列表页一次输出上千条记录、把不相关模块统统塞进同一个页面。
3. 隐藏但仍然存在的内容
折叠面板、默认隐藏的选项卡、弹窗、首屏用不到的样式和脚本,如果写死在 HTML 里,蜘蛛一样要下载和解析。对用户不可见,对抓取并不免费。
4. 内联脚本与样式
少量内联可以减少请求,但几十 KB 甚至上百 KB 的内联内容会让 HTML 明显变重,而且每次抓取都要重复下载,无法依赖外部文件的缓存。
重页面带来的具体影响
- 抓取覆盖面下降:同样的抓取容量,被重页面消耗掉的部分更多,长尾 URL 被安排抓取的机会变小。
- 抓取深度受限:蜘蛛沿链接前进时会逐层消耗资源,路径上的页面越重,能走到的层级越浅。
- 对响应波动更敏感:体积大又遇上服务器慢,容易触发降速,进而影响整站的抓取节奏。
减负时要做对什么
- 先看字节数,再看节点数:服务器日志或抓取日志中的响应大小能直接暴露问题,优先处理排在前面的模板。
- 分页优于超长列表:一页输出几十条比一页输出几千条更利于抓取路径展开,链接分布也更均匀。
- 懒加载不等于隐藏内容:需要被发现的内容要有可直接访问的链接地址,不能只靠滚动时才发起的请求。
- 别为了瘦身牺牲可抓取性:把导航改成纯 JS 渲染、把正文改成异步加载,可能省了字节,却让蜘蛛拿不到内容,得不偿失。
判断标准很简单:这段内容对用户和蜘蛛是否都必要?如果只是模板顺手带上的,删掉通常两头都受益。
怎么自查页面是不是偏重
- 抽取几个主要模板,记录 HTML 的传输大小和解压后大小;
- 对比同一站点内轻量页面与重量级页面的抓取频次差异;
- 检查移动端模板是否额外加载了大量桌面端用不到的内容;
- 观察服务器响应时间是否稳定,避免体积与慢响应叠加出现。
小结
页面体积不会直接决定收录结果,但它会实打实地影响抓取效率。把模板做轻、把列表分页、把隐藏内容清理干净,相当于给整站腾出更多抓取空间。这类改动不需要大动作,却往往能在抓取日志里看到比较明显的变化。