列表頁通常是蜘蛛發現詳情頁的主要通道。但翻頁机制怎么设計,直接决定了蜘蛛能走到第几頁:有的站点只有第一頁被反复抓取,第二頁之後几乎没有记錄,問题往往不在服務器,而在分頁連結本身。
三種常见的分頁形態
传统數字分頁
第一頁、第二頁、末頁各有獨立 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 做收敛,把抓取留给常規分頁。
分頁不是越深越好,而是让蜘蛛用尽量少的步數触達尽量多的有效詳情頁。
怎么核對分頁是否被抓
- 在服務器日誌里篩選含 /page/ 或分頁參數的 URL,看第二頁之後是否有抓取记錄;
- 观察同一路径的抓取频率是否只集中在第一頁;
- 用不带 JS 的方式打開列表頁,確認分頁連結是否出現在 HTML 源碼里;
- 手動顺着連結点击几层,看能否只靠連結走到末頁。
分頁设計没有统一答案,但有一條稳定原則:把通往後續頁面的路径寫進 HTML,让它成為一個普通連結。做到這一点,剩下的只是每頁放多少條、留多少個頁碼入口的取舍問题。