做蜘蛛池和站点运营时,经常遇到這種情况:入口頁在日誌里明明有搜尋蜘蛛訪問记錄,返回碼也是 200,但入口頁上挂的一部分目标 URL 始终没有出現抓取记錄。很多人第一反應是連結位置不對、被 robots 屏蔽了,其實還有一個容易被忽略的因素——頁面响應太慢,搜尋蜘蛛没抓完就走了。
搜尋蜘蛛抓一個頁面,是有预算的
搜尋引擎抓取任何一個 URL,都要消耗它自己的带宽、解析和服務资源。所以搜尋蜘蛛不會在一個頁面上無限等待。当你把頁面做得又大又慢,或者服務端首字节時間(TTFB)很長,搜尋蜘蛛可能在讀到你那批目标連結之前就断開了连接。這種情况下,日誌里會留下一次訪問记錄,但頁面靠後的連結並没有被解析出来。
這不等于搜尋引擎在惩罚你,只是抓取预算被消耗在了等待上。
哪些情况最容易被“抓到一半就走”
- 首字节時間過長:資料库慢查询、接口阻塞、後端串行調用。
- 頁面体积過大:几十萬行 HTML,内联了完整 CSS 和 JS。
- 關键連結放在頁面最後:前面的内容已经耗掉了大部分抓取资源。
- 大量外部资源加载:統計脚本、字体、广告位,虽然是浏览器行為,但會拖慢整体可用性。
- 入口頁挂了一串跳轉,每跳一次都在消耗時間。
- 服務器對搜尋蜘蛛的並發限制過嚴,响應排队後直接超时。
連結位置确實會影响發現顺序
搜尋蜘蛛大多是邊下载邊解析 HTML。連結出現在文档越靠前的位置,被解析到的概率越高;放在頁脚、翻頁区,或者由 JavaScript 後置渲染出来的連結,相對更容易被截断。所以做入口頁时,別把核心的目标連結全堆在底部導航里。
同时也要注意,正文堆得太長、無關内容太多,等于人為提高了解析成本。入口頁的價值是让連結被發現,不是寫一篇長文。
怎么確認是不是漏抓
- 查服務器日誌,按入口頁 URL 統計响應時間和返回碼,看是否存在 4xx、5xx 或超时记錄。
- 統計入口頁上目标連結的總數,再對比日誌中這些目标 URL 的抓取次數,看差了多少。
- 換個時間段再看一次:如果每次都是靠後的連結没被抓,基本可以判断是解析中断。
- 用抓取工具或 curl 模拟一次請求,看完整下载耗时和實际返回的 HTML 長度。
可以做的優化
- 把 TTFB 压下来:加缓存、優化查询、减少後端串行調用。
- 压缩 HTML,去掉不必要的内联资源和注释。
- 把最重要的目标連結放在頁面靠前位置。
- 入口頁拆小,一頁連結數量适中,宁可分几頁,也不要一頁塞满。
- 保證稳定返回 200,避免瞬时超时導致整次抓取失敗。
- 入口頁不需要复杂前端渲染,服務端直出 HTML 最稳妥。
几個常见誤区
常见誤区:日誌里有搜尋蜘蛛訪問,就以為入口頁上所有連結都被發現了;返回 200,就以為蜘蛛一定讀完了整頁;連結越多,發現机會越大,于是不断加量。
實际上,抓取是被预算约束的行為,加量不等于增效,反而可能让本来能被抓到的連結也一起被拖慢。
寫在最後
入口頁响應速度是 URL 發現鏈路里最基础的一环。先把頁面做快、做小、把連結放對位置,再谈數量,通常比單纯堆連結更有效。需要注意的是,任何優化都只是提高被發現的概率,無法保證收錄或排名,最终结果仍取决于搜尋引擎自己的判断。