搜尋抓取

搜尋蜘蛛抓取:分頁連結形態與列表頁翻頁断鏈造成的抓取路径中断排查

列表頁是站内新 URL 的主要發現通道。当翻頁依赖 JS 事件、無限滚動或篩選參數时,蜘蛛常停在第一頁。本文梳理從源碼核對分頁連結、识別断鏈形態,到用日誌驗證並修复的顺序,帮助恢复列表頁到詳情頁的抓取路径。

搜尋抓取

搜尋蜘蛛抓取:分頁連結形態與列表頁翻頁断鏈造成的抓取路径中断排查

列表頁是站内新 URL 被發現的主要通道之一。当分頁連結不能以可抓取的形式出現在 HTML 里,蜘蛛往往只能停在第一頁,後面的詳情頁即使内容质量不错,也很难進入抓取队列。這類問题通常不會报错,表現也更隐蔽:抓取量看起来正常,但新 URL 增長缓慢,或者收錄集中在最近更新的那几篇。

第一步:確認翻頁連結是否真的在 HTML 里

排查要從源碼開始,而不是從浏览器里看到的頁面開始。浏览器里能点、能翻,不代表蜘蛛能看到。

  • 關閉 JavaScript 後再請求列表頁,检查第 2 頁及之後的連結是否出現在返回的 HTML 中。
  • 区分「上一頁 / 下一頁」與頁碼锚点两種形態。只有上一頁下一頁时,蜘蛛需要逐頁推進,深层列表的路径長度會明顯增加,抓取预算消耗也更慢。
  • 检查翻頁控件是 a 标簽带 href,還是 button、div 加事件绑定。後者没有可解析的連結地址,蜘蛛無法把它当作一條路径。
  • 確認分頁 URL 是否稳定。每次請求都带随机數、時間戳或會话參數的分頁地址,會让同一個列表頁被反复当作新入口。

几種常见的翻頁断鏈形態

只渲染首屏分頁

前端框架先輸出第一頁資料和前几個頁碼,後續頁碼靠滚動或点击「加载更多」再渲染。如果服務端返回的初始 HTML 里没有這些頁碼連結,抓取路径在第一頁之後就直接断掉。判断方法很简單:在源碼里搜尋分頁容器的 class 名,看真實連結數量。

無限滚動没有静態兜底

整頁滚動加载的列表,通常在 HTML 里一條連結都没有。可行的做法是保留一個分頁版本作為兜底地址,例如给列表加上可訪問的頁碼參數,並在滚動加载失敗或未执行脚本时輸出這些連結。

分頁與篩選參數混用

篩選條件、排序方式、頁碼常常拼在同一個 URL 上,组合數量迅速膨胀。蜘蛛會把其中一部分当作獨立入口抓取,稀释真正需要抓取的分頁路径。建议让基础分頁地址保持干净,篩選结果通過内鏈少量暴露,而不是让每個组合都成為可点击連結。

核對與驗證顺序

  1. 先確認列表頁本身能被抓取,排除 robots、狀態碼、跳轉等前置問题。
  2. 再關閉 JS 抓取源碼,統計源碼里實际存在的分頁連結數量與最深頁碼。
  3. 用站点日誌或抓取日誌,查看蜘蛛對同一列表的訪問是否出現了第二頁、第三頁的請求记錄。
  4. 抽样查看几個深层詳情頁,確認它們是否有除列表頁之外的其他内鏈入口,例如相關推荐、标簽頁、归档頁。
  5. 對照 Sitemap,看分頁地址和深层詳情頁是否只依赖單一入口。若只靠列表推進,任何一次断鏈都會让整段 URL 失联。

修复时值得優先處理的方向

  • 把分頁控件改成带 href 的連結,保持服務端可輸出,脚本再在此基础上做拦截和增强。
  • 在列表頁底部保留一组頁碼連結,让深层分頁有稳定的短路径可達。
  • 為詳情頁补充横向入口,比如同栏目推荐、上下篇、标簽聚合,降低對列表翻頁的單一依赖。
  • 控制每頁條目數,让同样的詳情頁數量對應更少的分頁层級,减少路径深度。
  • 修正後再观察日誌,確認第二頁之後的請求记錄是否稳定出現。
分頁路径恢复後,蜘蛛訪問列表頁的频次通常會更稳定,但這並不等于詳情頁一定被收錄。抓取只是把 URL 送進队列,最终是否保留還要看頁面自身的内容與重复度。

把這件事当作一次路径核對来做,比反复刷新日誌更有效:先確認源碼里有連結,再確認日誌里有訪問,最後確認這些 URL 有不止一條入口。三步都對齐,列表頁到詳情頁的抓取通路才算真正打通。