搜索抓取

HTML 体积与正文位置:蜘蛛抓取一次能拿到多少有效内容

蜘蛛拿到的是服务器返回的 HTML 源码,页面体积与正文位置直接决定这次抓取的有效信息量。本文拆解页面变胖的常见来源,说明正文为什么应尽量靠前,并给出体积、压缩与源码顺序的检查清单,帮助降低单次抓取的传输与解析成本。

搜索抓取

HTML 体积与正文位置:蜘蛛抓取一次能拿到多少有效内容

蜘蛛抓取一个页面时,最先拿到的是服务器返回的 HTML 源码,而不是浏览器渲染完成之后的样子。这意味着页面体积和正文在源码里的位置,直接决定了这次抓取能拿到多少有效信息。

页面为什么会变胖

一个页面的 HTML 从几十 KB 涨到几百 KB,通常不是因为正文变长,而是因为几类容易被忽略的部分:

  • 直接写在页面里的 CSS 与 JS,尤其是未压缩、未合并的版本;
  • 只有前端脚本会用到的数据,被整个序列化进 script 标签;
  • 大量重复的导航、页脚、推荐位、弹窗模板;
  • 以 Base64 内联的图片、字体和图标。

这些内容对用户是必要的,对蜘蛛来说大多是噪声。它们不会让页面被判为无用,但会挤占每次抓取的传输与解析成本。

正文位置:越靠前越容易被稳定提取

蜘蛛通常按文档顺序读取源码。如果正文出现在几十 KB 的脚本和导航之后,抓取和解析都要多绕一步。更稳妥的做法是让主体内容尽早出现在 HTML 中:把主标题、正文、发布时间等关键信息放在靠前的位置,把脚本放到后面或改为异步加载。

这并不是要牺牲页面效果,而是调整源码里内容的先后顺序。同样的视觉效果,源码顺序不同,蜘蛛读到的“第一印象”也不同。

一次抓取的成本

抓取是有限资源。页面越大,一次抓取占用的连接时间越长;在抓取频次基本稳定的情况下,能覆盖的 URL 数量就会变少。对于页数较多的站点,这个差异会慢慢累积。

把每个页面当成一次传输机会:省下来的字节,可以留给更需要被发现的页面。

可以顺手检查的几个点

  1. 用查看源码或命令行工具,看 HTML 的原始大小和 gzip 压缩后的大小;
  2. 搜一下正文第一句在源码里出现的位置,估算它前面堆了多少内容;
  3. 确认 script 与 style 是否压缩、是否可以缓存;
  4. 检查占位内容有没有以大量空 DOM 的形式写在源码里。

收敛体积的几个做法

  • 公共脚本合并压缩,并配上缓存头,让蜘蛛重复访问时不必重新下载全部内容;
  • 页面里只放当前页面需要的数据,其余按需请求;
  • 减少不参与索引的装饰性区块在源码中的重复;
  • 图片、字体用外链资源,而不是内联的 Base64。

什么时候不必太在意

如果站点只有几十个页面,抓取频次充足,体积带来的影响通常不明显,优先级可以排在内容与内链之后。页面数量多、更新频繁、抓取预算偏紧的站点,才更值得先处理体积和正文位置。

这些调整不会立刻改变抓取结果,但会降低蜘蛛单次访问的成本。当站点规模变大、抓取次数有限时,省下来的这部分消耗,往往就是能多抓几个页面的空间。