列表頁是很多内容站最主要的 URL 出口。蜘蛛從栏目頁、标簽頁或首頁進入後,通常先看到第一頁,再顺着分頁連結往深處走。但實际抓取中,蜘蛛常常在第二頁、第三頁就停下。原因不一定是内容不重要,而是分頁連結本身没有被蜘蛛顺利讀到。
蜘蛛為什么會停在第一頁
最常见的情况是分頁連結由 JavaScript 生成。用戶点击下一頁时,脚本才去請求資料並更新列表,HTML 里並没有可以跟随的 a 标簽。蜘蛛抓到的第一頁源碼里,只有第一頁的詳情連結。它能發現這些 URL,却不知道後面還有列表。
另一種情况是分頁 URL 被參數規則挡住。比如 ?page=2、?paged=3 這類地址被 robots.txt 屏蔽,或者被 canonical 统一指向第一頁。蜘蛛即使從別處看到分頁地址,也可能判定不必單獨抓取。
還有分頁路径過深。第一頁到第二十頁之間没有其他入口,只有一條下一頁連結,蜘蛛需要连續抓取二十次才能到達。中途如果某次請求超时或返回错誤,鏈條就断了。
几種常见分頁寫法的抓取表現
- 静態分頁路径:如 /list/page/2/。路径清晰,HTML 里有 a 标簽,蜘蛛容易顺着走。
- 參數分頁:如 ?page=2。能抓,但容易被重复内容規則影响,需要確認 canonical 和參數處理是否合理。
- rel=next/prev:這是一種提示,不是强制指令。它不會保證蜘蛛翻頁,也不能替代可点击連結。
- 無限滚動和加载更多:對用戶友好,對蜘蛛不友好。最好保留一個普通分頁入口,或在首屏 HTML 里放足量連結。
让蜘蛛繼續翻頁的几個做法
第一,确保分頁連結是服務器渲染的 a 标簽。不要只寫 onclick 或 data 属性,蜘蛛需要真實 href。第二,在第一頁同时给出下一頁和最後一頁的連結。蜘蛛可以直接跳到末頁,再從末頁往前發現一批 URL,不必逐頁爬完整條鏈。
第三,別把所有压力都放在分頁上。重要内容如果只出現在第二十頁之後,可以再通過分類頁、专题頁、站内推荐或相關阅讀给出入口。多個入口意味着蜘蛛不必依赖一條長長的分頁鏈。
第四,Sitemap 里可以放少量重要列表頁,但不必把每一頁分頁都塞進去。分頁地址數量可能很大,全放進去會稀释抓取重点。更實际的做法是保證列表頁本身可抓,让蜘蛛自己决定翻到哪一頁。
服務器响應和狀態碼也會影响翻頁
分頁請求通常要查資料库、做篩選、拼列表,响應時間比詳情頁更長。如果列表頁加载慢,或者在高频抓取时返回 5xx、429,蜘蛛的翻頁過程就會中断。列表頁做缓存、限制單頁條目數量、避免一次性查询過多資料,都有助于让分頁請求更稳定。
還要注意分頁地址在抓取时是否触發登入、驗證碼或風控。有些站点把列表頁的频繁訪問当成異常流量,结果蜘蛛還没翻到第三頁就被拦住。這類情况需要從服務器日誌和 WAF 規則两侧一起核對。
分頁不是唯一的路
分頁解决的是用戶怎么浏览更多,抓取路径解决的是蜘蛛怎么發現 URL。两者目标不完全一样。如果列表頁有几百頁,與其想办法让蜘蛛翻完,不如用更短的内鏈结构把重要 URL 提到浅层。比如把热门内容聚合到专题頁,把新内容放進首頁或栏目首頁的推荐位,把存档頁按時間或分類拆開。
蜘蛛翻頁的深度,往往取决于它從第一頁能讀到多少條可靠連結,以及每次請求是否顺利返回。
最後,定期看日誌里分頁 URL 的抓取记錄。哪些頁被频繁抓取,哪些頁只抓過一次,哪些頁返回了错誤,這些信息比猜测更有用。根據记錄調整連結位置、分頁數量和缓存策略,通常比一次性改動全部模板更稳妥。