搜尋抓取

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

蜘蛛拿到的是服務器返回的 HTML 源碼,頁面体积與正文位置直接决定這次抓取的有效信息量。本文拆解頁面變胖的常见来源,說明正文為什么應尽量靠前,並给出体积、压缩與源碼顺序的检查清單,帮助降低單次抓取的传輸與解析成本。

搜尋抓取

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

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

頁面為什么會變胖

一個頁面的 HTML 從几十 KB 涨到几百 KB,通常不是因為正文變長,而是因為几類容易被忽略的部分:

  • 直接寫在頁面里的 CSS 與 JS,尤其是未压缩、未合並的版本;
  • 只有前端脚本會用到的資料,被整個序列化進 script 标簽;
  • 大量重复的導航、頁脚、推荐位、彈窗模板;
  • 以 Base64 内联的图片、字体和图标。

這些内容對用戶是必要的,對蜘蛛来说大多是噪声。它們不會让頁面被判為無用,但會挤占每次抓取的传輸與解析成本。

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

蜘蛛通常按文档顺序讀取源碼。如果正文出現在几十 KB 的脚本和導航之後,抓取和解析都要多绕一步。更稳妥的做法是让主体内容尽早出現在 HTML 中:把主标题、正文、發布時間等關键信息放在靠前的位置,把脚本放到後面或改為异步加载。

這並不是要牺牲頁面效果,而是調整源碼里内容的先後顺序。同样的视觉效果,源碼顺序不同,蜘蛛讀到的“第一印象”也不同。

一次抓取的成本

抓取是有限资源。頁面越大,一次抓取占用的连接時間越長;在抓取频次基本稳定的情况下,能覆盖的 URL 數量就會變少。對于頁數較多的站点,這個差异會慢慢累积。

把每個頁面当成一次传輸机會:省下来的字节,可以留给更需要被發現的頁面。

可以顺手检查的几個点

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

收敛体积的几個做法

  • 公共脚本合並压缩,並配上缓存头,让蜘蛛重复訪問时不必重新下载全部内容;
  • 頁面里只放目前頁面需要的資料,其余按需請求;
  • 减少不參與索引的装饰性区块在源碼中的重复;
  • 图片、字体用外鏈资源,而不是内联的 Base64。

什么时候不必太在意

如果站点只有几十個頁面,抓取频次充足,体积带来的影响通常不明顯,優先級可以排在内容與内鏈之後。頁面數量多、更新频繁、抓取预算偏紧的站点,才更值得先處理体积和正文位置。

這些調整不會立刻改變抓取结果,但會降低蜘蛛單次訪問的成本。当站点規模變大、抓取次數有限时,省下来的這部分消耗,往往就是能多抓几個頁面的空間。