栏目頁、列表頁、标簽归档頁、站内搜尋结果頁,只要内容够多,早晚都會撞上分頁。不少站点的抓取日誌里,列表第一頁几乎天天有訪問,第二頁之後却稀疏得可怜。這通常不是蜘蛛“不想抓”,而是翻頁這條路本身没铺好。
一、先確認蜘蛛能不能走到第 2 頁
翻頁控件如果是纯 JS 渲染,或者用按钮加点击事件来跳轉,蜘蛛在 HTML 里看不到任何指向下一頁的地址,自然就不會往下走。自查时最直接的办法是:打開頁面源碼,搜尋第二頁的 URL 片段,看它是否以 href 形式存在。
- 翻頁控件的 a 标簽是否在源碼中可见,href 是否是可訪問的完整地址。
- 是否被遮罩层、懒加载或前端路由包裹,導致初始 HTML 里没有連結。
- “下一頁”按钮在最後一頁之後是否變成不可点击的 span,而不是保留一個指向越界頁碼的連結。
二、分頁 URL 的几種寫法
常见的分頁地址大致三類:路径式(在栏目路径後接頁碼目錄)、參數式(列表地址後接參數)、游标式(用上一頁最後一條记錄作為游标)。三者在抓取上的区別不大,關键在于同一套分頁不要同时存在两種寫法,否則同一個第二頁會有多個入口地址,抓取预算會被白白分摊。
三、canonical 與 noindex 別用反
這是分頁里最容易出問题的地方,常见的两種做法各有代價:
- 分頁 canonical 指向第一頁:能避免重复内容堆叠,但如果後續頁里有獨立價值的内容(比如商品列表的第二屏),它們也很难再單獨出現在索引里。
- 给分頁加 noindex,follow:可以让分頁不占索引位,同时保留顺着連結繼續爬的能力。注意別顺手把 follow 也去掉,那等于把後續頁和里面的詳情頁連結一起断了。
两種都行,但同一個站内最好保持一致,別一部分栏目指向第一頁、另一部分加 noindex,後期排查會很痛苦。
四、加载更多與無限滚動
這類交互對用戶友好,對抓取却不太友好,因為新内容是通過脚本追加的,地址栏往往不變。處理思路有两種:一是保留一個真正的分頁地址作為“兜底入口”,在頁面底部或站点地图里可被發現;二是把追加出来的内容也做成可訪問的獨立地址。只做無限滚動、不给任何静態入口,後續内容基本等于對蜘蛛隐身。
五、越界頁碼與空结果
用戶手動改成第 999 頁、篩選條件组合出一個不可能有结果的列表,這類地址如果一律返回 200 加一句“暂無内容”,就等于给站点開了一個可以無限生成的地址池。更稳妥的做法是:超出總頁數返回 404 或 410,篩選無结果时要么返回空狀態頁並加 noindex,要么干脆跳回上級列表頁。
六、用日誌驗證,而不是靠猜
- 從服務器日誌里筛出带分頁特征的地址,按 URL 归類統計。
- 看抓取是否只集中在第 1 頁,或者在某個頁碼突然断掉。
- 對比返回狀態碼,確認後續頁没有出現 5xx、超时或跳轉鏈。
- 把结果和栏目结构對照,重点看那几個内容最多、层級最深的栏目。
分頁不是要被“優化掉”的東西,它更像站点里的一條内部走廊。走廊通不通,决定了蜘蛛能不能走到你後半個站的内容。
七、多久查一次
建议在改版、上线新栏目、調整模板分頁控件之後各查一次,之後按季度做一次抽查即可。分頁结构一旦稳定,很少需要频繁改動;真正的風險往往来自某次前端重构,把原本可抓取的翻頁連結換成了脚本跳轉,而這件事通常没人會在發布前注意到。