常见問题

入口頁 HTML 体积太大时,搜尋蜘蛛可能讀不到後半部分的連結

入口頁返回正常、日誌里也能看到抓取,但目标 URL 迟迟没有抓取记錄,原因可能出在 HTML 体积上。本文說明搜尋蜘蛛解析頁面存在上限,列出最容易把入口頁撑大的几類内容,並给出判断是否踩到体积問题的方法和几個實操控制点。

常见問题

入口頁 HTML 体积太大时,搜尋蜘蛛可能讀不到後半部分的連結

入口頁上明明寫了目标連結,日誌里也看到搜尋蜘蛛来抓過入口頁,可目标 URL 的抓取记錄迟迟不出現。這種情况除了检查 robots、nofollow、JS 渲染之外,還有一個容易被忽略的原因:入口頁的 HTML 体积太大,搜尋蜘蛛讀到一半就不再往後解析了。

頁面解析确實存在上限,只是各家没公布确切數字

搜尋蜘蛛抓取頁面时,要先下载响應体,再交给解析器抽取連結。下载有大小限制,解析也有時間和内存開销。各搜尋引擎對這個上限的设定並不相同,也没有對外公開一個可以直接照搬的准确字节數,而且會随渲染方式、响應速度、站点整体情况變化。可以确定的只有一件事:超過一定体积之後,後半部分的連結被解析到的概率會明顯下降,越靠後的内容越吃亏。

涨体积的通常不是正文,而是這几類東西

  • 把整套 CSS 和 JS 内联在 head 里,尤其是未压缩的框架代碼;
  • 用 base64 直接嵌入的图片、字体和图标;
  • 每個入口頁都複製同一套頁头頁脚、導航和友鏈模块;
  • 大量 data-* 属性、未清理的調试注释、模板残留的隐藏节点;
  • 為了堆連結,把目标 URL 一條條拼成超長列表,甚至连 query 參數一起堆進去。

怎么判断自己是不是踩到了体积問题

  1. 用 curl 拉一次入口頁,看响應头里的 Content-Length。這只是压缩後的传輸大小,不等于解析器看到的解压後大小,注意区分;
  2. 把 gzip 解压後的 HTML 存下来看文件大小,這才是解析器實际要處理的量;
  3. 检查日誌:如果入口頁抓取正常、返回 200,但同一批目标 URL 長期没有任何抓取记錄,可以怀疑連結没有被解析到;
  4. 做一次對比測試:把同一批連結從頁面底部挪到靠前的位置,或者拆成两個入口頁,观察一段時間再看日誌差异。

實操上的几個控制点

  • CSS 和 JS 尽量走外鏈,让浏览器和蜘蛛都能缓存;
  • 图片、字体用獨立文件,不要用 base64 塞進 HTML;
  • 連結区块放在頁面靠前的位置,別埋在十几屏模板块之後;
  • 入口頁只承担“被發現有連結”這一件事,内容尽量精简,不需要完整的站点框架;
  • 連結多的时候優先拆成多個入口頁,而不是堆成一個超長頁面。

這里没有给一個硬性數字,因為不同入口頁的结构差別很大。實用的做法是给自己定一個内部标准,比如解压後控制在几十到一百多 KB 的区間,然後長期用日誌驗證:連結是否真的被跟到了。

別把体积当成唯一解释

連結没被跟,還可能是因為用了 rel="nofollow"、連結由 JS 在交互後插入、跳轉鏈太長、入口頁本身返回了非 200 狀態,或者目标 URL 在 robots.txt 里被挡住。

体积只是其中一個變量。把入口頁做小、把連結提前,是成本最低的一步,但不要指望它單獨解决所有抓取問题。