搜索抓取

HTML 体积与 DOM 深度:蜘蛛读一个页面要花多少成本

同样是一千个 URL,抓完所需的时间可能相差很多。本文从 HTML 体积、DOM 深度、链接位置和首屏内容顺序几个角度,说明页面自身的重量如何影响蜘蛛的抓取效率,并给出精简模板、压缩传输、把重要链接前置等可落地的检查项。

搜索抓取

HTML 体积与 DOM 深度:蜘蛛读一个页面要花多少成本

聊抓取效率时,大家习惯先数 URL:站点有多少页面、多少分页、多少筛选组合。但同样是一千个 URL,蜘蛛抓完所需的时间可能相差很大,其中一个变量就是单个页面自身有多重。URL 数量决定要走多少步,页面体积和结构决定每一步走得多快。

蜘蛛拿到的是原始 HTML,不是渲染后的画面

多数情况下,蜘蛛先从服务器取回 HTML 源码,再从里面解析正文和链接。它能看到的,基本就是你查看网页源代码时看到的那一份。如果链接是脚本执行后才插入 DOM 的,正文要靠接口返回再填充,那么“浏览器里很好看”并不等于“蜘蛛读得到”。

所以判断一个页面的抓取成本,第一步不是打开浏览器看效果,而是直接看源码:正文在不在、链接在不在、大小是多少。

HTML 体积:每个请求都要重新付出代价

  • 一张内联成 base64 的大图,能把 HTML 撑大几百 KB,而蜘蛛并不需要这份数据;
  • 整站共用的大段内联样式、内联脚本、模板注释,会反复出现在每个页面上;
  • 把完整商品列表、全部评论、推荐位一股脑塞进首屏 HTML,会让正文占比变得很低。

体积大的直接后果是下载耗时更长、解析更慢,同一时间段内能抓完的 URL 更少。间接后果是有效信息被稀释,蜘蛛判断页面主题、判断链接价值时更费劲。常见做法是压缩模板、把重复结构抽成外链资源、大块数据按需加载或分页展示。

DOM 深度与链接位置:藏在第十层的链接容易被忽略

链接埋在多少层嵌套容器里,会影响蜘蛛发现它的效率。典型的问题结构是:为了视觉排版,把导航、相关推荐、分类入口层层包进容器,最后链接出现在 DOM 很深的位置。蜘蛛仍然可能抓到,但这类链接在整页里的可见度和传递效果都会下降。

更实际的做法是让重要链接靠近页面顶部、靠近正文,减少不必要的包裹层:主导航直接可点,面包屑放在主内容上方,正文里自然出现指向相关内容的链接。列表页的下一页、详情页的上一级,尽量用普通 a 标签而不是点击事件。

页面变重,抓取节奏也会跟着变

在有限的抓取配额下,蜘蛛在每个页面上花的时间越长,能访问的页面就越少。页面普遍偏重、响应偏慢时,站点更容易出现请求排队、超时,甚至让对方降低抓取频率。这部分是站点自己可以控制的:开启 gzip 或 brotli 压缩、图片按展示尺寸裁剪、给静态资源设置合理缓存、用 CDN 承接静态请求,都能减轻单个请求的负担。

上手检查的几件事

  1. 关掉脚本或直接看源码,确认正文和主要链接都出现在原始 HTML 里;
  2. 统计几个代表性页面的 HTML 大小,找出异常臃肿的模板;
  3. 抽查重要链接的嵌套层级,把入口区、正文区、页脚区分开看;
  4. 确认首屏内容顺序:正文是否靠前,导航和页脚是否靠后;
  5. 确认压缩、缓存、CDN 是否覆盖到 HTML 本身,而不只是图片和 JS。
页面变轻不是为了讨好谁,而是让每一次抓取都落在内容上。结构清楚、体积克制的页面,被读懂和被继续访问的概率通常更高;但具体表现仍取决于站点整体质量和搜索引擎的判断,没有哪种做法能保证结果。