搜尋抓取

分頁、加载更多與無限滚動:列表頁怎么把蜘蛛送到詳情頁

列表頁是蜘蛛發現詳情頁的主要入口。本文對比传统分頁、加载更多按钮和無限滚動三種方式在抓取上的差异,說明每屏連結數量、分頁深度與參數收敛的取舍,並给出用服務器日誌驗證抓取路径是否走通的思路。

搜尋抓取

分頁、加载更多與無限滚動:列表頁怎么把蜘蛛送到詳情頁

列表頁承担了大部分 URL 發現

除了 Sitemap,蜘蛛發現新頁面最依赖的就是列表頁。首頁、分類頁、标簽頁、聚合頁,這些能一次列出几十條連結的地方,构成了站点的主要抓取入口。問题在于,很多站点把列表頁做得越来越“轻”——第一屏只放十几條,剩下的靠按钮和滚動加载,人看着顺滑,蜘蛛却可能一條都碰不到。

三種翻頁方式,蜘蛛看到的東西不一样

传统分頁

每頁一個獨立地址,如 /list?page=2,連結直接寫在 HTML 里,蜘蛛顺着点就能一頁頁走下去。這是最稳的方式。要注意两点:一是分頁頁自身要有可抓的連結,不要让第 2 頁只能通過第 1 頁的脚本生成;二是分頁頁不要寫 canonical 指向第 1 頁,那等于告诉蜘蛛這几頁“不算數”,後面的詳情頁入口也跟着被削弱。

加载更多按钮

按钮触發的通常是异步請求,返回的是資料而不是完整頁面。蜘蛛不會去点按钮,所以按钮背後的那批連結對它是不可见的。常见的补救办法是给按钮配一個真實連結,比如“加载更多”同时是一個指向 /list?page=2 的 a 标簽,脚本拦截点击,蜘蛛拿到的是可抓地址。這样人机两不誤。

無限滚動

對蜘蛛最不友好。滚動到底部才加载的内容,在初始 HTML 里往往完全不存在。三種處理方式:一是提供分頁降級,把 /list?page=n 作為真實可訪問地址並在頁面里留連結;二是把全部條目放進 Sitemap,让蜘蛛從另一條路找到;三是在底部放“查看全部”的入口。只靠無限滚動,等于把詳情頁的入口交给一個並不存在的点击動作。

每屏放多少條,不只是设計問题

列表頁每屏的連結數量會影响抓取效率,但不是越多越好。

  • 首屏連結價值最高,重要的、更新频繁的條目尽量往上放;
  • 一頁塞几百條連結容易稀释每個連結的站内信号,蜘蛛也未必都走;
  • 列表條目尽量用标题做锚文本,不要只放图片或只放按钮;
  • 把“下一頁”做成文字連結並保持在固定位置,比用图标更容易被识別。

分頁深度與翻頁收敛

蜘蛛顺着分頁往下走是有耐心的,但這個耐心有限。抓取深度越深,越靠後的頁面被抓的概率越低。對内容量大的站点,可以考虑用時間归档、分類切分、标簽聚合把長列表拆成多條浅路径,而不是一條几百頁的分頁鏈。另一头也要收敛:篩選參數、排序參數會组合出大量地址,尽量用 robots.txt 或參數處理規則把無意义的组合挡掉,让抓取花在真正的詳情頁上。

判断标准很简單:關掉脚本,用抓取工具或直接查看 HTML 源碼,看看詳情頁連結還在不在。在,就是可抓的;不在,就得补一條路。

用日誌驗證路径是否通

改完之後別急着下结论。看服務器日誌里蜘蛛訪問列表頁的频次,以及随後訪問詳情頁的比例:如果蜘蛛只抓列表頁、不往下走,說明連結没有被识別;如果一直停在第一頁,說明分頁入口有問题;如果反复抓同一批地址,說明去重或參數收敛没做好。把這几類信号對齐,列表頁這條抓取路径基本就理顺了。