搜尋抓取

列表頁翻頁與“加载更多”:蜘蛛能顺着分頁走多遠

列表頁是蜘蛛發現詳情頁的主要入口,但翻頁方式决定了它能走多遠。本文梳理數字分頁、加载更多與 JS 拼接分頁的差异,說明怎样让翻頁連結出現在 HTML 里,canonical 该怎么寫,分頁深度與抓取预算如何權衡,以及從日誌核對分頁抓取情况的方法。

搜尋抓取

列表頁翻頁與“加载更多”:蜘蛛能顺着分頁走多遠

列表頁通常是蜘蛛發現詳情頁的主要通道。但翻頁机制怎么设計,直接决定了蜘蛛能走到第几頁:有的站点只有第一頁被反复抓取,第二頁之後几乎没有记錄,問题往往不在服務器,而在分頁連結本身。

三種常见的分頁形態

传统數字分頁

第一頁、第二頁、末頁各有獨立 URL,例如 /list/page/2/。這類结构對蜘蛛最友好,連結是頁面 HTML 里真實存在的 a 标簽與 href,顺着走就能到達。

“加载更多”與無限滚動

点击按钮後由 JS 請求接口,把结果插入頁面。如果按钮本身没有 href,也不生成可訪問的 URL,蜘蛛只能看到第一屏内容,後面的條目對它等于不存在。即便接口返回了資料,也需要浏览器环境执行,第一轮抓取经常拿不到。

靠 JS 拼接的分頁

分頁連結由脚本動態寫入,或者寫在 onclick 里跳轉,在原始 HTML 中並不存在,抓取阶段容易漏掉。折中做法是在頁面底部保留一套静態分頁連結,數量可以少,但要有真實 URL。

让翻頁連結可被抓到

  • “下一頁”用带 href 的連結,而不是按钮加事件绑定;
  • 分頁 URL 尽量简短稳定,避免带一串排序、時間戳參數;
  • 列表頁底部保留至少一條通往後續頁面的静態路径;
  • 第一頁上不要只出現“下一頁”,适当给出若干頁碼,方便蜘蛛跳轉。

canonical 與分頁标记

一個常见错誤是把第二頁、第三頁的 canonical 指向第一頁。這等于告诉搜尋引擎“這些頁面是同一頁的副本”,後續頁面也就失去了被單獨抓取和索引的理由。分頁頁應当各自指向自己。rel=next/prev 現在更多是线索而非索引信号,可以保留,但不必指望它解决分頁發現問题。

同时,分頁頁之間的标题、描述、正文高度相似时,被抓取和索引的意愿都會下降。可以在标题里带上頁碼或该頁覆盖的区間,正文中保留每一條目的摘要。

分頁深度與抓取预算

站点越大,分頁的性價比越需要權衡。每頁只放 5 條,意味着蜘蛛要走十几次才能覆盖 50 條内容;每頁放 50 條,抓取路径變短,但單頁体积和渲染成本上升。多數列表頁在 20 到 50 條之間比較平衡。

另外,排序、篩選、時間范围等參數會生成大量结构相似的分頁變体,蜘蛛很可能把時間花在這些頁面上。如果這些變体没有獨立價值,可以用 robots.txt、nofollow 或 canonical 做收敛,把抓取留给常規分頁。

分頁不是越深越好,而是让蜘蛛用尽量少的步數触達尽量多的有效詳情頁。

怎么核對分頁是否被抓

  1. 在服務器日誌里篩選含 /page/ 或分頁參數的 URL,看第二頁之後是否有抓取记錄;
  2. 观察同一路径的抓取频率是否只集中在第一頁;
  3. 用不带 JS 的方式打開列表頁,確認分頁連結是否出現在 HTML 源碼里;
  4. 手動顺着連結点击几层,看能否只靠連結走到末頁。

分頁设計没有统一答案,但有一條稳定原則:把通往後續頁面的路径寫進 HTML,让它成為一個普通連結。做到這一点,剩下的只是每頁放多少條、留多少個頁碼入口的取舍問题。