常见問题

入口頁 HTML 体积過大、連結排在很後面:搜尋蜘蛛會不會讀一半就停

入口頁 HTML 体积過大时,搜尋引擎的解析可能提前中断,排在後面的連結就不會被讀到。本文說明常见的体积與节点上限、哪些内容最容易把連結挤到後面、压缩為什么解决不了這個問题,以及把入口頁做薄、把連結提前、合理分頁的具体做法。

常见問题

入口頁 HTML 体积過大、連結排在很後面:搜尋蜘蛛會不會讀一半就停

先把结论说清楚

大多數搜尋引擎的解析器對 HTML 都有字节上限,常见说法在几百 KB 到几 MB 之間,不同引擎不一样,也没有公開承诺。超過之後,後面的内容基本不會被解析,連結自然也就不會被發現。所以入口頁体积太大真正的風險不是收錄變差,而是排在後面的連結压根没被讀到。

連結在文档里的位置也确實會影响被讀到的概率。這不是玄学,是解析顺序的問题:解析自上而下流式進行,越靠後的内容越容易撞上上限或被提前中断。

哪些東西會把連結挤到後面

  • 内联的 CSS 和 JS:一個几萬行的内联脚本,占的空間可能比所有連結加起来還大。
  • base64 内联的图片、字体、图标。
  • 大段模板注释、調试日誌、被注释掉的舊代碼。
  • 重复的導航和頁脚块,每個頁面都完整塞一遍。
  • 表格或列表里堆了几千行資料。

這里有個常被誤解的点:gzip / br 压缩只影响传輸体积,不影响解析时的字节數。传得再小,解析上限该撞還是會撞。

几個容易混淆的概念

抓取预算和解析上限不是一回事

抓取预算决定蜘蛛来多少次、抓多少頁;解析上限决定單頁能被讀多深。两個問题的成因不同,结果却常常一样:連結没被發現。

DOM 节点數量也有影响

部分渲染路径對 DOM 节点數同样有上限,节点太多时後半部分渲染出来的内容也可能丢。静態 HTML 里直接寫連結,比依赖 JS 渲染更稳。

實际怎么處理

  1. 把入口頁做成薄頁面:只保留标题、少量說明和連結列表,样式和脚本放外部文件。
  2. 連結列表尽量往前放,別排在几千行内容之後。導航块甚至可以放到連結列表下面。
  3. 條目多就分頁。一頁放几十到一两百條,比一頁塞几千條更容易被完整讀到。
  4. 内联资源換成外鏈,图片用真實 URL 而不是 base64。
  5. 上线前看一下 HTML 的原始字节大小(不是压缩後的大小),超過几百 KB 就考虑拆。
  6. 入口頁不要承载全站資料,那是資料库该做的事,不是 HTML 该做的事。
判断方法很简單:把頁面另存為 HTML 看文件多大,再用纯文本方式打開,看開头 100 KB 能不能覆盖大部分連結。如果連結都落在後半段,就该調整结构了。

几個常见疑問

把連結放前面就一定被抓吗

不一定。位置只解决能不能被讀到的問题,能不能被抓還取决于服務器响應、robots 規則、URL 本身是否可訪問等。但位置是你最容易控制的一环。

頁面很大但蜘蛛還是来了,是不是就没事

来得勤不代表讀得完整。日誌里能看到抓取记錄,但看不到它解析到了哪一行。別把抓取成功等同于連結被發現。

分頁會不會削弱效果

不會。分頁只是把連結拆到多個 URL 上,每個 URL 各自處在解析上限内。前提是分頁本身也能被蜘蛛發現,並且做好上一頁、下一頁的連結。

一句话:入口頁是给蜘蛛讀的,不是给人看的。控制体积、把連結提前,是成本最低的一件事。