蜘蛛抓取一個頁面时,最先拿到的是服務器返回的 HTML 源碼,而不是浏览器渲染完成之後的样子。這意味着頁面体积和正文在源碼里的位置,直接决定了這次抓取能拿到多少有效信息。
頁面為什么會變胖
一個頁面的 HTML 從几十 KB 涨到几百 KB,通常不是因為正文變長,而是因為几類容易被忽略的部分:
- 直接寫在頁面里的 CSS 與 JS,尤其是未压缩、未合並的版本;
- 只有前端脚本會用到的資料,被整個序列化進 script 标簽;
- 大量重复的導航、頁脚、推荐位、彈窗模板;
- 以 Base64 内联的图片、字体和图标。
這些内容對用戶是必要的,對蜘蛛来说大多是噪声。它們不會让頁面被判為無用,但會挤占每次抓取的传輸與解析成本。
正文位置:越靠前越容易被稳定提取
蜘蛛通常按文档顺序讀取源碼。如果正文出現在几十 KB 的脚本和導航之後,抓取和解析都要多绕一步。更稳妥的做法是让主体内容尽早出現在 HTML 中:把主标题、正文、發布時間等關键信息放在靠前的位置,把脚本放到後面或改為异步加载。
這並不是要牺牲頁面效果,而是調整源碼里内容的先後顺序。同样的视觉效果,源碼顺序不同,蜘蛛讀到的“第一印象”也不同。
一次抓取的成本
抓取是有限资源。頁面越大,一次抓取占用的连接時間越長;在抓取频次基本稳定的情况下,能覆盖的 URL 數量就會變少。對于頁數較多的站点,這個差异會慢慢累积。
把每個頁面当成一次传輸机會:省下来的字节,可以留给更需要被發現的頁面。
可以顺手检查的几個点
- 用查看源碼或命令行工具,看 HTML 的原始大小和 gzip 压缩後的大小;
- 搜一下正文第一句在源碼里出現的位置,估算它前面堆了多少内容;
- 確認 script 與 style 是否压缩、是否可以缓存;
- 检查占位内容有没有以大量空 DOM 的形式寫在源碼里。
收敛体积的几個做法
- 公共脚本合並压缩,並配上缓存头,让蜘蛛重复訪問时不必重新下载全部内容;
- 頁面里只放目前頁面需要的資料,其余按需請求;
- 减少不參與索引的装饰性区块在源碼中的重复;
- 图片、字体用外鏈资源,而不是内联的 Base64。
什么时候不必太在意
如果站点只有几十個頁面,抓取频次充足,体积带来的影响通常不明顯,優先級可以排在内容與内鏈之後。頁面數量多、更新频繁、抓取预算偏紧的站点,才更值得先處理体积和正文位置。
這些調整不會立刻改變抓取结果,但會降低蜘蛛單次訪問的成本。当站点規模變大、抓取次數有限时,省下来的這部分消耗,往往就是能多抓几個頁面的空間。