栏目页、列表页、标签归档页、站内搜索结果页,只要内容够多,早晚都会撞上分页。不少站点的抓取日志里,列表第一页几乎天天有访问,第二页之后却稀疏得可怜。这通常不是蜘蛛“不想抓”,而是翻页这条路本身没铺好。
一、先确认蜘蛛能不能走到第 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、超时或跳转链。
- 把结果和栏目结构对照,重点看那几个内容最多、层级最深的栏目。
分页不是要被“优化掉”的东西,它更像站点里的一条内部走廊。走廊通不通,决定了蜘蛛能不能走到你后半个站的内容。
七、多久查一次
建议在改版、上线新栏目、调整模板分页控件之后各查一次,之后按季度做一次抽查即可。分页结构一旦稳定,很少需要频繁改动;真正的风险往往来自某次前端重构,把原本可抓取的翻页链接换成了脚本跳转,而这件事通常没人会在发布前注意到。