不少人在做入口頁时只盯着“蜘蛛有没有来”,来了以後就不再管了。實际上蜘蛛抓走入口頁之後,還要经歷解析 HTML、抽取連結、把 URL 放進待抓队列這几步。頁面体积過大、連結埋得太深,影响的主要就是這几步的完整度和效率,而不是“来不来”。
一、先分清:能發現 和 愿意抓 是两回事
入口頁返回 200,蜘蛛正常抓取,這是前提。接下来它會把 HTML 交给解析器,從中提取出 a 标簽的 href,再决定哪些 URL 值得進队列。体积和深度問题發生在“解析—抽取”這一段;抽取出来之後抓不抓、多久抓,則是另一套逻辑。把這两件事混在一起,很容易誤判問题出在哪。
二、HTML 体积多大算大
没有一個官方公布的硬阈值,但搜尋引擎對單個頁面的解析量确實存在上限,常见说法在几百 KB 到 1MB 這個量級。超過的部分可能被截断,連結也就跟着丢了。
不過現實中更常见的不是“超大頁面”,而是一些没必要的体积来源:
几個容易被忽略的体积来源
- 模板里塞了整站導航、侧栏、頁脚,每個入口頁都重复几千行代碼
- 内联的 CSS 和 JS 没有压缩,注释、空行全留着
- 用 base64 直接嵌图片,一張图就能顶几十 KB
- 把列表資料以 JSON 形式内联,再靠 JS 渲染成連結
前三條只是拖慢解析,真正的風險在第 4 條:初始 HTML 里根本没有連結。
三、“埋得深”通常指三種情况
- DOM 层級深:一個 a 标簽外面套了几十层 div。這基本不影响解析,解析器並不在意嵌套多深。
- 位置靠後:連結放在頁面最底部、折叠区域或者很長的列表末尾。頁面被截断时,這些連結最容易被丢掉。
- 依赖 JS 渲染:初始 HTML 里没有 a 标簽,需要执行脚本之後才出現。
第三種是主要風險。搜尋引擎确實能渲染 JS,但渲染资源有限、有排队延迟,不保證每個頁面都會渲染。對入口頁這種“靠連結吃饭”的頁面来说,把連結完全交给 JS 並不划算。
四、可以這样自查
- 用關閉 JS 的方式抓取入口頁,看返回的纯 HTML 里有没有目标連結。
- 查看頁面 HTML 大小,以及目标連結大致出現在第多少 KB 的位置。
- 對比服務端日誌里蜘蛛實际抓取的 URL 數,和頁面里實际存在的連結數,看差距有多大。
- 抽几個典型頁面做手動對比,別只看首頁。
五、調整方向
- 精简模板,把和入口頁無關的導航、推荐位去掉或延後加载。
- 把目标連結尽量前置到主体内容区,而不是頁面最底部。
- 至少輸出一份服務端渲染的静態 a 标簽,保證不执行脚本也能讀到。
- 連結數量多时考虑分頁拆分,每頁保持体量可控。
- 入口頁本身做成简洁的列表頁,比堆满模块的“门戶式”頁面更容易被完整解析。
六、別把它当成唯一變量
体积和深度只影响“發現”這一环。發現之後還有抓取预算、内容质量、站点整体狀態等因素在起作用。
改完這些通常能看到抓取覆盖變好,但不等于目标 URL 就會收錄。發現只是第一步,別把它当成一個開關。
建议的做法是先做一次對比測試:調整前後各观察两周左右的日誌,看目标連結的抓取覆盖有没有變化,再判断改動是否真的有效。