搜尋抓取

分頁連結與抓取:蜘蛛會翻到第几頁,又從哪里繼續

列表頁分頁是蜘蛛進入深层内容的主要通道。本文梳理路径式、參數式、按钮式與無限滚動几種分頁形態在抓取上的差別,說明翻頁深度衰减、列表頁重复度與空结果頁带来的消耗,並给出控制可翻頁深度、收敛參數噪声、保留詳情頁回鏈等可落地的做法。

搜尋抓取

分頁連結與抓取:蜘蛛會翻到第几頁,又從哪里繼續

列表頁的分頁,是蜘蛛從栏目入口走向深层内容的主要通道之一。它决定了一個栏目里有多少條内容有机會被抓到,也决定了蜘蛛在每個列表頁上要花多少時間。围绕分頁做處理,本质上是让蜘蛛走得動、也走得值。

分頁連結的常见形態

同样是翻頁,蜘蛛拿到的路径可能完全不同:

  • 路径式:/list/page/2/ 這類地址最容易识別,也便于在日誌里按前缀区分。
  • 參數式:?page=2 或 ?p=2,可以抓,但要留意參數顺序、大小寫和附加參數组合出的近似 URL。
  • 按钮式:用井号锚点或纯 JS 绑定点击事件的“下一頁”,不产生新的可抓 URL,蜘蛛一般不會跟進。
  • 無限滚動:滚動或点击後才出現的内容,如果没有對應的分頁地址,後續條目通常只能靠 Sitemap 或詳情頁内鏈被發現。

蜘蛛沿分頁往下走时會遇到什么

分頁不是一條無限延伸的通道,實际抓取中常见的约束有几類:

  • 深度衰减:頁碼越靠後,被訪問的频率通常越低。第二、三頁還算常客,第二十頁之後往往很久才来一次。
  • 重复度:列表頁之間的标题、摘要高度相似,容易被判断為低價值頁面,停留時間随之缩短。
  • 抓取预算:一個栏目如果有几百頁分頁,全部走一遍會占掉相当一部分配額,挤压其他頁面的机會。
  • 空结果頁:翻到超出内容范围的頁碼,若仍返回 200 的空列表,會白白消耗抓取次數。

让分頁既好抓又不失控

  1. 保留真實連結:翻頁用普通超連結指向可訪問的 URL,而不是只靠 JavaScript 事件。视觉上仍然可以做成按钮样式。
  2. 控制可翻頁深度:把頁碼收在一個合理范围,例如只保留最近若干頁;更早的内容交给归档頁、Sitemap 或站内搜尋入口去發現。
  3. 處理空结果頁:超出范围时返回 404 或 410,或者干脆不輸出下一頁連結;也可以用 noindex 让頁面保留在站内但不出現在索引中,不過 noindex 並不能减少抓取。
  4. 用 canonical 收敛參數噪声:排序、篩選、视图切換等參數组合出的頁面,指定規范地址,减少同一批内容被当成几十個頁面来抓。
  5. 詳情頁回鏈列表頁:在文章底部给出返回栏目、上一篇或下一篇,让蜘蛛從深层頁面還能回到主干,不至于停在叶子节点。

無限滚動與“加载更多”

這两種交互對用戶体驗不错,但對抓取並不友好:内容藏在滚動或点击之後,HTML 里没有對應 URL。折中做法是保留一套可訪問的分頁地址,把無限滚動当作前端增强;或者在頁面中放一個指向查看更多、下一頁的常規連結,让蜘蛛有路可走。

關于 rel=next 與 rel=prev:它們曾被用来标记分頁序列,後来主流搜尋引擎公開說明不再將其作為索引信号使用。保留它們通常没有坏處,但不要指望靠這两個标簽解决分頁抓取問题,真正的入口仍然是頁面里的可点击連結。

怎么驗證分頁有没有被抓

  • 在服務器日誌里按路径前缀過滤,看分頁地址的請求分布,重点關注最深的頁碼。
  • 观察列表頁的响應時間,分頁查询如果很慢,蜘蛛的抓取节奏也會被拖累。
  • 對比 Sitemap 里提交的詳情頁數量與實际被抓數量,判断是分頁深度不够,還是別的地方卡住了。
分頁處理的目标不是让蜘蛛把每一頁都抓一遍,而是让它在有限的次數里拿到更值得收錄的内容。把可走的路径留给蜘蛛,把重复和空轉挡在门外,通常比單纯追求翻得更深更有用。