搜尋抓取

分頁、瀑布流與“加载更多”:蜘蛛怎么走完一長串列表頁

列表頁是站点里 URL 發現能力最强的入口,但無限滚動和“加载更多”按钮常常让蜘蛛只看到第一屏。本文梳理數字分頁、參數分頁與 JS 渲染列表在抓取路径上的差別,並给出让蜘蛛走得更深的几種做法。

搜尋抓取

分頁、瀑布流與“加载更多”:蜘蛛怎么走完一長串列表頁

列表頁往往是一個站点里 URL 發現能力最强的地方。詳情頁再多,如果蜘蛛進不来,等于不存在;而蜘蛛進入詳情頁的主要通道,通常就是那些按顺序排列的列表與分頁。翻頁方式设計得合不合理,直接决定了蜘蛛能走多深、能發現多少條 URL。

传统數字分頁:對蜘蛛最友好的一種结构

形如 /list/page/2/ 或 /list?page=2 的分頁連結,是蜘蛛最容易處理的形式:它是一個真實的 a 标簽,href 指向一個獨立 URL,点進去就是一個新頁面。蜘蛛顺着 1、2、3 一路爬下去,每翻一頁就多拿到一批詳情頁地址。

  • 每個分頁 URL 獨立可訪問,不要用 JS 点击事件代替連結。
  • 頁碼連結出現在 HTML 源碼里,而不是等 JS 执行之後再插入。
  • 保留“下一頁”連結的同时,也保留一段连續的數字頁碼,避免蜘蛛只能靠猜。

瀑布流與“加载更多”:蜘蛛可能只看到第一屏

無限滚動和“加载更多”按钮對用戶友好,但對抓取路径不友好。如果新增内容是在用戶滚動或点击之後由 JS 請求接口才渲染出来的,蜘蛛在 HTML 里往往只能看到最開始的十几條。按钮本身如果是 button 或 div,没有 href,蜘蛛也没有理由去“点”它。

常见的补救方式有三種:

  1. 在頁面底部放一條真實的分頁連結,指向带參數的下一頁 URL,让不执行 JS 的抓取也能繼續走。
  2. 让“加载更多”對應的接口地址在 HTML 中以連結形式出現,例如带 page 參數的静態入口。
  3. 用 Sitemap 分片把深层列表 URL 直接交给蜘蛛,作為路径之外的补充。

分頁參數本身也要能被抓

可抓取性還取决于分頁地址長什么样。带多個篩選參數的地址容易产生大量组合,蜘蛛會在這類頁面上消耗掉不少抓取预算,却拿不到多少新 URL。相對稳妥的做法是:

  • 排序參數、會话參數尽量別混進分頁連結里,保持地址可预测。
  • 分頁頁面的 canonical 指向自身,不要统一指向第一頁,否則分頁 URL 容易被判定為重复而减少被抓的机會。
  • 篩選结果頁超過一定组合量时,用 robots.txt 或 nofollow 收口,把路径留给真正需要被發現的頁面。

让蜘蛛有一條走到底的路

列表很長时,蜘蛛通常不會一路翻到最後一頁,越靠後的分頁被抓的频率越低。想让深层内容仍有机會被發現,可以搭配几種手段:

  • 時間归档頁:按月份或分類归档,给老内容一個稳定的入口。
  • Sitemap 分片:把深层詳情頁寫進單獨的 Sitemap 文件,用索引文件串起来。
  • 相關推荐與内鏈:在詳情頁之間横向互鏈,让蜘蛛從任意一條被爬到的 URL 繼續扩散。
判断路径是否通畅,不要只看頁面在浏览器里能不能翻,而要看源碼里有没有可抓取的 href。浏览器的滚動和点击,不會自動變成蜘蛛的抓取路径。

用日誌驗證,而不是靠猜

想知道分頁到底被走到第几层,最直接的办法是翻服務器日誌:筛出列表頁和分頁 URL,看它們的抓取频次怎么随頁碼衰减。如果第 2、3 頁都很少被抓,後面的詳情頁自然發現得慢。這时優先調整分頁連結的可抓取性和 Sitemap 覆盖,而不是盲目增加内容量。