列表页的分页是站内 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 混用。
分页入口梳理通常不需要大幅改版,把控件改成真实链接、补上降级地址、清理误拦截规则,就能改善一批列表页的发现效率。具体效果取决于站点规模和抓取预算,建议每次只调整一项,并持续观察日志变化。