列表頁的分頁是站内 URL 發現最稳定的来源之一,但實际抓取中经常出現一種情况:搜尋蜘蛛反复訪問第 1 頁,很少進入第 2 頁及以後。很多时候不是服務器拦住了蜘蛛,而是分頁入口在原始 HTML 里根本不存在。
先分清分頁入口的几種形態
- 静態連結分頁:HTML 里直接给出指向第 2 頁的 a 标簽,地址形如 ?page=2。
- 脚本渲染分頁:頁碼按钮由 JS 点击事件生成,原始响應里没有連結。
- 加载更多與無限滚動:只有按钮或滚動监听,没有獨立的可訪問地址。
- 路径式分頁:通過 /list_2.html 這類地址翻頁,是否可發現取决于連結是否輸出。
第一種對抓取最友好,後几種能否被發現,取决于有没有降級連結和稳定地址。
蜘蛛只停在第 1 頁的常见原因
- 翻頁控件寫成了 button 或 div,没有 href,解析不到新地址。
- 頁碼列表由前端請求接口後再渲染,無 JS 执行时頁面上只有第 1 頁。
- 点击加载更多只在目前頁追加内容,歷史狀態無法通過 URL 复現。
- 分頁連結被加上 nofollow,或整块被 display:none 隐藏。
- 分頁規則寫在 robots.txt 里,或分頁參數命中了屏蔽規則。
- 分頁頁面的 canonical 全部指向第 1 頁,地址虽被發現,却容易被判定為重复而降低後續處理意愿。
排查顺序
- 關閉 JS 渲染,直接抓第 1 頁的原始 HTML,搜尋是否存在指向第 2 頁的連結。
- 換用不带 Cookie 的請求再確認一次,排除會话或登入態造成的差异。
- 检查翻頁控件的标簽類型和属性,確認是否真的輸出 href。
- 核對 robots.txt、meta robots、X-Robots-Tag 是否覆盖了分頁路径。
- 检查分頁 URL 是否触發服務端限流,返回 403、429 或空响應。
- 查看 canonical 與 hreflang 對分頁頁的声明是否合理。
- 對照抓取日誌,確認第 2 頁之後的請求比例和首次發現時間。
處理方式與取舍
最直接的做法是保留一套静態可抓取的分頁連結。即使前端体驗上用加载更多,也要在 DOM 中同时輸出下一頁的真實地址。無限滚動可以配合一個查看全部或下一頁的降級入口,保證每一頁地址能被單獨訪問和复現。
分頁深度不必無限放開。對商品、文章這類列表,通常前几頁加上站点地图里的核心入口已经够用;更深的翻頁可以交给篩選、标簽或专题頁承接,避免同一批内容产生大量近似地址。分頁頁的 canonical 建议指向自身,而不是第 1 頁,否則容易出現入口被压制的情况。
分頁問题的核心不是翻頁按钮是否好看,而是每一頁是否存在一個稳定、可直接訪問、能被解析到的 URL。
驗證角度
- 抓取日誌中第 2 頁及以上路径的請求占比是否上升。
- 深层列表頁從首次出現到被回訪的時間是否缩短。
- 分頁地址返回的狀態碼是否稳定,是否出現 200 與 404 混用。
分頁入口梳理通常不需要大幅改版,把控件改成真實連結、补上降級地址、清理誤拦截規則,就能改善一批列表頁的發現效率。具体效果取决于站点規模和抓取预算,建议每次只調整一項,並持續观察日誌變化。