搜尋抓取

分頁列表頁里的蜘蛛:從第一頁翻到最後一頁要经過什么

列表頁的分頁不只是翻頁组件,而是蜘蛛從栏目走到詳情頁的通路。本文讲清三種分頁實現的抓取差异、分頁 URL 的參數叠加問题,以及怎样让蜘蛛顺着下一頁一路走下去而不卡在前两頁。

搜尋抓取

分頁列表頁里的蜘蛛:從第一頁翻到最後一頁要经過什么

栏目頁、商品列表頁、文章归档頁通常都會分頁。對用戶来说翻頁只是点一下,但對蜘蛛来说,每一次“下一頁”都是一次新的 URL 發現。能不能從第一頁一路走到最後一頁,很大程度取决于分頁連結寫成了什么样子。

蜘蛛是怎么顺着分頁往下走的

蜘蛛抓到一個列表頁後,會把頁面上所有可识別的連結扔進待抓取队列,其中就包括“下一頁”。它不會像人一样按顺序点,而是按队列調度,第一頁、第三頁、第八頁可能差不多時間被抓。所以分頁連結必须是 HTML 里真實存在的連結,才可能進入這個队列。

三種分頁實現的抓取差异

1. 传统 a 連結分頁

最稳的一種。/list/page/2/ 這样的地址在源碼里能直接讀到,蜘蛛每抓一頁就能拿到下一頁的 URL,路径一层层展開。分頁层數很深时,前几頁的抓取優先級通常更高。

2. “加载更多”按钮

如果按钮靠 JS 监听点击、請求接口再拼接 DOM,那么在頁面不被渲染的情况下,蜘蛛看不到後續内容,也拿不到新 URL。除非把下一頁的真實連結放進按钮的 href,再用 JS 去拦截預設跳轉。

3. 無限滚動

滚動加载本身不产生可抓取入口,蜘蛛滚不動頁面。常见做法是保留分頁連結作兜底,或者額外提供一個静態的“查看全部”頁面作為入口。

分頁 URL 的几種形態

  • 路径型:/category/page/3/,结构清晰,容易做規則。
  • 參數型:/category?page=3,實現简單,但容易和其他參數混在一起。
  • 混合型:排序、篩選、分頁參數叠加,URL 數量會成倍增長。

分頁參數和篩選參數叠在一起时,蜘蛛很容易被带進大量内容高度相似的组合頁。常见的收敛办法是:分頁參數保留可抓,排序、篩選類參數只對部分有價值的组合開放,其余用 robots.txt 或連結上的 nofollow 收住。

让分頁路径更顺的几件事

  1. 分頁連結用标准 a 标簽,href 指向真實 URL,不要只挂在 onclick 上。
  2. 第一頁與後續頁的标题、描述、H1 尽量做区分,减少“複製内容”的观感。
  3. 不要用 canonical 把所有分頁都指向第一頁,這等于告诉蜘蛛後面几頁不必單獨看,深层的詳情頁也更难被發現。
  4. 给分頁加上“上一頁 / 下一頁”的文字連結,別只放一個箭头图标。
  5. 分頁响應時間要稳。列表頁查询通常較重,慢响應會让蜘蛛放慢整站的抓取节奏。
  6. 保留一個静態的“查看全部”或分類索引頁,作為兜底入口。

几個容易踩的坑

一是把分頁參數整段屏蔽,蜘蛛只抓到第一頁,後面的内容只能靠 Sitemap 补,發現速度明顯變慢。二是分頁頁數無限增長,比如空结果也返回 200 和分頁導航,會制造大量空壳頁。三是 Sitemap 與内鏈的口径不一致,Sitemap 里放了詳情頁,内鏈却只到第二頁,蜘蛛進来後仍要自己摸索路径。

分頁不是“翻頁组件”,而是一條让蜘蛛逐层走到詳情頁的通路。把這條路留得清楚、稳定,比事後补 Sitemap 更省事。

最後可以用抓取日誌驗證:观察列表頁被訪問的层數分布。如果日誌里長期只有第一頁和第二頁出現,說明後面的分頁要么没被連結到,要么响應太慢被放弃了。