蜘蛛抓一個頁面,並不是把整份 HTML 從头讀到尾的無限過程。抓取器通常會在讀取到一定字节量後停下,把已经拿到的部分交给後續流程。這意味着:如果關键内容和内鏈排在截断点之後,它們對蜘蛛来说可能並不存在。
抓取器為什么會有讀取上限
抓取本身是资源消耗行為:带宽、解析、存储、後續判断都要花钱。為了防止一個超大頁面拖慢整條流水线,抓取器會設定單頁讀取上限。這個上限各家引擎不同,公開文档里也很少给出精确數值,所以更實用的做法不是去卡某個具体字节數,而是確認自己的頁面有没有明顯偏大、有没有把结构性内容堆到很後面。
哪些寫法最容易把 HTML 撑大
- 图片直接以 base64 内联在 HTML 或 CSS 里,一張图就能带来几百 KB 的文本。
- 把整份接口資料塞進 script 标簽,尤其是列表頁的完整資料對象。
- 整站组件库内联輸出,每頁都重复一份样式和脚本片段。
- 下拉菜單、彈窗、折叠面板里的隐藏内容全量輸出,用戶看不到,字节數却實實在在存在。
- 大量模板注释、調试信息和未清理的空标簽。
這些内容未必影响用戶浏览,但會让蜘蛛在讀到正文和内鏈之前,先把讀取額度消耗掉一部分。
頁面被截断之後會怎样
最常见的情况是:狀態碼仍是 200,頁面没有报错,蜘蛛也没有任何提示。但排在後面的連結没被發現,後半段内容没參與判断。表現上就是——頁面看起来能抓,内鏈却像没有一样,新發布的深层内容迟迟不见来訪,而首頁和频道頁的抓取记錄一直很正常。
怎么判断頁面是否偏大
- 看未压缩的 HTML 源碼体积,而不是浏览器渲染後的视觉效果。
- 對比压缩前後的大小,差距過大說明重复文本或内联资源偏多。
- 查服務器日誌里的响應字节數,看看蜘蛛拿到的和你本地看到的是不是一致。
- 把 HTML 存成文件,搜尋第一條正文内鏈出現在源碼的哪個位置附近。
瘦身與结构調整的做法
- 图片、字体、图标改為外鏈资源,让 HTML 只保留引用地址。
- 列表頁控制單頁條數,把翻頁交给分頁 URL,而不是一次輸出全部條目。
- 非首屏模块按需加载,但正文和主要内鏈必须直接輸出,不要依赖脚本再插入。
- 把資料從脚本中剥离,或只保留渲染所必需的最小字段。
- 清理模板注释、調试残留和無意义的嵌套容器。
- 把次要内容拆到獨立 URL,让每個頁面承担相對單一的职责。
注意這里的顺序:先保證正文和導航内鏈出現在前半部分,再考虑压缩体积。只做压缩而不動结构,内鏈位置偏後的問题依然存在。
体积和抓取预算的關系
抓取预算不是抽象概念,它由請求數和字节數共同构成。一個頁面平均几百 KB 的站,和一個平均几十 KB 的站,在同样的抓取容量下能覆盖的 URL 數量差距明顯。列表頁、频道頁這類被抓最频繁的模板,体积收益往往最直接。
一個可执行的观察顺序
- 先看入口頁(首頁、频道頁)的 HTML 体积和内鏈位置。
- 再看被频繁抓取的列表模板,確認單頁輸出條數是否過多。
- 最後抽查詳情頁,確認正文和主導航是否落在前半部分。
- 改動後隔一段時間對比蜘蛛来訪的 URL 分布,而不只是看總請求數有没有涨。
頁面變小不一定让蜘蛛抓得更多,但頁面過大几乎總會让蜘蛛抓得更少。