搜索抓取

HTML 体积、脚本与懒加载:蜘蛛一次抓取能读到哪一步

蜘蛛抓取分下载、解析和渲染三步,每一步都有成本。HTML 响应体过大可能被截断,脚本生成的内容要排渲染队列,懒加载则可能让链接和正文根本不出现在抓取结果里。本文讲清截断和渲染会带来哪些后果,以及如何在服务端直出、控制体积和放置关键标签上做取舍。

搜索抓取

HTML 体积、脚本与懒加载:蜘蛛一次抓取能读到哪一步

蜘蛛的抓取并不是打开页面看一眼这么简单。一次抓取大致包含下载、解析、必要时渲染三个阶段,每个阶段都要消耗资源。页面做得越重,蜘蛛真正能拿到的内容反而可能越少,URL 发现也会跟着受影响。

下载阶段:HTML 响应体是有量级上限的

搜索引擎在公开文档里提到过对 HTML 响应体的处理量级,通常在几 MB 级别。超过的部分往往会被截断,不会继续解析。这不是惩罚,而是资源分配的结果:同样的时间和带宽,抓十个轻页面还是抓一个重页面,蜘蛛会算这笔账。

被截断之后,后果比较直接:

  • 位于 HTML 尾部的链接可能根本没被解析,URL 发现在这里就断了;
  • 正文后半段、参数表、常见问题等内容不会进入索引;
  • canonical、hreflang、结构化数据等写在后面的标签可能一起丢失。

常见的体积来源往往不是正文,而是内联脚本、重复输出的 JSON 数据、未压缩的 base64 图片、大段注释和冗余的模板结构。它们对用户几乎不可见,却实打实地占掉了抓取额度。

渲染阶段:脚本生成的内容要排第二次队

纯前端渲染的页面,蜘蛛第一次拿到的其实是一份近乎空壳的 HTML,链接和正文要等进入渲染队列、执行完脚本才会出现。渲染本身更贵,等待时间通常也比普通抓取更长,而且渲染有超时限制,超时后蜘蛛拿到什么就是什么。

懒加载与无限滚动最容易出问题

图片、评论区、列表项如果依赖滚动或点击才加载,蜘蛛不一定会去触发。只在渲染完成后才插入 DOM 的链接,也可能就停在没被发现这一步,等于少了一批入口。

渲染失败还会带来重复成本

如果同一个 URL 每次渲染都失败或超时,蜘蛛可能反复重试,把配额花在同一个页面上,其他页面的抓取机会就被挤掉了。这类问题在日志里通常表现为同一地址的多次请求。

把抓取成本降下来的一些做法

  1. 关键正文和主要内链走服务端直出,不要等脚本生成;
  2. 控制单个页面的 HTML 体积,长列表拆成有独立 URL 的分页;
  3. 导航和列表用真实的 a 标签加 href,不要用点击事件跳转;
  4. 图片使用原生 img 的 src,比纯 CSS 背景图更稳妥;
  5. 把 canonical、hreflang 和结构化数据放在 head 里靠前的位置;
  6. 模板里重复的数据尽量精简,别把整份接口响应直接塞进页面。
如果日志里蜘蛛请求返回的字节数明显小于页面实际体积,先怀疑被截断,而不是先下结论说蜘蛛不来了。

怎么确认自己有没有踩线

可以对比三种视角:一是服务器日志里蜘蛛请求对应的响应体大小;二是用工具以不执行脚本的方式看一次页面,检查正文和主要内链是否完整;三是带上渲染再看一次,看只有渲染后才出现的 URL 有多少。两个结果差距越大,说明页面越依赖渲染。

抓取没有越轻越好或越大越好的绝对答案,但有一点比较确定:让蜘蛛用更低的成本拿到更完整的内容,URL 发现和内容收录都会走得更顺。