搜尋抓取

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。
頁面變轻不是為了讨好谁,而是让每一次抓取都落在内容上。结构清楚、体积克制的頁面,被讀懂和被繼續訪問的概率通常更高;但具体表現仍取决于站点整体质量和搜尋引擎的判断,没有哪種做法能保證结果。