列表頁的分頁,是蜘蛛從栏目入口走向深层内容的主要通道之一。它决定了一個栏目里有多少條内容有机會被抓到,也决定了蜘蛛在每個列表頁上要花多少時間。围绕分頁做處理,本质上是让蜘蛛走得動、也走得值。
分頁連結的常见形態
同样是翻頁,蜘蛛拿到的路径可能完全不同:
- 路径式:/list/page/2/ 這類地址最容易识別,也便于在日誌里按前缀区分。
- 參數式:?page=2 或 ?p=2,可以抓,但要留意參數顺序、大小寫和附加參數组合出的近似 URL。
- 按钮式:用井号锚点或纯 JS 绑定点击事件的“下一頁”,不产生新的可抓 URL,蜘蛛一般不會跟進。
- 無限滚動:滚動或点击後才出現的内容,如果没有對應的分頁地址,後續條目通常只能靠 Sitemap 或詳情頁内鏈被發現。
蜘蛛沿分頁往下走时會遇到什么
分頁不是一條無限延伸的通道,實际抓取中常见的约束有几類:
- 深度衰减:頁碼越靠後,被訪問的频率通常越低。第二、三頁還算常客,第二十頁之後往往很久才来一次。
- 重复度:列表頁之間的标题、摘要高度相似,容易被判断為低價值頁面,停留時間随之缩短。
- 抓取预算:一個栏目如果有几百頁分頁,全部走一遍會占掉相当一部分配額,挤压其他頁面的机會。
- 空结果頁:翻到超出内容范围的頁碼,若仍返回 200 的空列表,會白白消耗抓取次數。
让分頁既好抓又不失控
- 保留真實連結:翻頁用普通超連結指向可訪問的 URL,而不是只靠 JavaScript 事件。视觉上仍然可以做成按钮样式。
- 控制可翻頁深度:把頁碼收在一個合理范围,例如只保留最近若干頁;更早的内容交给归档頁、Sitemap 或站内搜尋入口去發現。
- 處理空结果頁:超出范围时返回 404 或 410,或者干脆不輸出下一頁連結;也可以用 noindex 让頁面保留在站内但不出現在索引中,不過 noindex 並不能减少抓取。
- 用 canonical 收敛參數噪声:排序、篩選、视图切換等參數组合出的頁面,指定規范地址,减少同一批内容被当成几十個頁面来抓。
- 詳情頁回鏈列表頁:在文章底部给出返回栏目、上一篇或下一篇,让蜘蛛從深层頁面還能回到主干,不至于停在叶子节点。
無限滚動與“加载更多”
這两種交互對用戶体驗不错,但對抓取並不友好:内容藏在滚動或点击之後,HTML 里没有對應 URL。折中做法是保留一套可訪問的分頁地址,把無限滚動当作前端增强;或者在頁面中放一個指向查看更多、下一頁的常規連結,让蜘蛛有路可走。
關于 rel=next 與 rel=prev:它們曾被用来标记分頁序列,後来主流搜尋引擎公開說明不再將其作為索引信号使用。保留它們通常没有坏處,但不要指望靠這两個标簽解决分頁抓取問题,真正的入口仍然是頁面里的可点击連結。
怎么驗證分頁有没有被抓
- 在服務器日誌里按路径前缀過滤,看分頁地址的請求分布,重点關注最深的頁碼。
- 观察列表頁的响應時間,分頁查询如果很慢,蜘蛛的抓取节奏也會被拖累。
- 對比 Sitemap 里提交的詳情頁數量與實际被抓數量,判断是分頁深度不够,還是別的地方卡住了。
分頁處理的目标不是让蜘蛛把每一頁都抓一遍,而是让它在有限的次數里拿到更值得收錄的内容。把可走的路径留给蜘蛛,把重复和空轉挡在门外,通常比單纯追求翻得更深更有用。