搜尋抓取

列表分頁與蜘蛛抓取:翻頁連結断掉,後面的頁面就少了入口

列表頁的翻頁連結是内容被發現的主要通道。本文讲传统 a 标簽翻頁、点击加载更多、無限滚動三種實現下蜘蛛能走到哪里,分頁參數與 canonical 的處理方式,翻頁請求對服務器的压力,以及一份可落地的自查清單。

搜尋抓取

列表分頁與蜘蛛抓取:翻頁連結断掉,後面的頁面就少了入口

列表頁、频道頁、聚合頁往往承担着把内容铺開的任務。蜘蛛從一個入口進来,能不能沿着翻頁連結一路走到第 20 頁、第 50 頁,直接决定這些頁面背後的詳情頁有没有机會被發現。分頁看起来是前端實現的小事,落到抓取环节却很實在。

分頁連結是列表頁 URL 發現的主干

一個频道頁只有几十條連結时,蜘蛛一次抓取就能全部看到。当内容累积到几千條,列表被切成几十上百頁,真正的入口就變成了那些“下一頁”“2 3 4 5”的連結。如果這些連結只在前端渲染,或者被脚本接管,蜘蛛看到的可能永遠只有第一頁。

判断方式很直接:用不执行 JS 的方式請求列表頁,看返回的 HTML 里是否含有後續頁面的 可点击連結。没有連結,就没有路径。

三種翻頁實現,区別在連結是否可解析

传统 a 标簽翻頁

每頁底部一组指向 page=2、page=3 的 a 标簽,是最稳妥的做法。层級清晰,蜘蛛可以逐頁跟進,頁面之間的先後關系也容易理解。需要留意的是分頁地址不要层层带上多余的追踪參數。

点击加载更多

按钮触發請求拿資料再插入 DOM。如果按钮本身不是連結,蜘蛛不會去点它。可行的做法是给“加载更多”配一個真實的分頁地址,让不执行脚本的环境也能走到後續内容。

無限滚動

滚動到底自動加载,用戶体驗顺滑,但地址栏不變,蜘蛛没有新地址可跟。常见的补救是額外提供一個分頁版地址,或在 Sitemap 中單獨提交重要的列表分頁 URL。

分頁參數與規范化

同一個列表,可能因為排序參數、篩選參數、會话參數组合出多個地址。蜘蛛抓到這些變体,容易把抓取量花在重复内容上。可以用 canonical 指向主分頁地址,同时让排序類參數产生的结果保持可訪問但優先級更低。

另外要注意分頁地址不要被 robots.txt 或 noindex 誤伤。有些站点為了控制抓取量屏蔽了带參數的地址,结果连正常的翻頁也一起挡在外面,後面的内容就彻底没有入口了。

翻頁請求對服務器的压力

列表頁通常是動態查询,翻一次頁就是一次資料库掃描。蜘蛛连續翻頁时,如果响應明顯變慢,抓取节奏也會跟着放缓,越往後的頁面越难被走到。给列表頁做缓存、限制單頁查询深度、避免深分頁的 offset 過大,往往比事後反复調參更有效。

自查清單

  1. 用不执行 JS 的方式請求列表頁,確認底部是否存在指向後續頁的 a 連結。
  2. 翻到最後一頁,確認“下一頁”是自然消失,而不是返回重复内容或错誤頁。
  3. 检查分頁地址是否被 canonical、robots.txt 或 meta 指令誤伤。
  4. 在 Sitemap 中补充重要的列表分頁地址,尤其是無限滚動的頁面。
  5. 观察服務器日誌,看蜘蛛是逐頁推進,還是長期停在第一頁。
分頁不是给蜘蛛看的装饰,而是列表内容被發現的實际通道。通道断了,後面的頁面就只能靠其他入口兜底。

分頁设計的核心問题只有一個:從第一頁到最後一頁,是否存在一條蜘蛛能走通的連結路径。把這條路径理顺,比事後到處补 Sitemap 更省事。