搜尋抓取

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 發現和内容收錄都會走得更顺。