栏目页、商品列表页、文章归档页通常都会分页。对用户来说翻页只是点一下,但对蜘蛛来说,每一次“下一页”都是一次新的 URL 发现。能不能从第一页一路走到最后一页,很大程度取决于分页链接写成了什么样子。
蜘蛛是怎么顺着分页往下走的
蜘蛛抓到一个列表页后,会把页面上所有可识别的链接扔进待抓取队列,其中就包括“下一页”。它不会像人一样按顺序点,而是按队列调度,第一页、第三页、第八页可能差不多时间被抓。所以分页链接必须是 HTML 里真实存在的链接,才可能进入这个队列。
三种分页实现的抓取差异
1. 传统 a 链接分页
最稳的一种。/list/page/2/ 这样的地址在源码里能直接读到,蜘蛛每抓一页就能拿到下一页的 URL,路径一层层展开。分页层数很深时,前几页的抓取优先级通常更高。
2. “加载更多”按钮
如果按钮靠 JS 监听点击、请求接口再拼接 DOM,那么在页面不被渲染的情况下,蜘蛛看不到后续内容,也拿不到新 URL。除非把下一页的真实链接放进按钮的 href,再用 JS 去拦截默认跳转。
3. 无限滚动
滚动加载本身不产生可抓取入口,蜘蛛滚不动页面。常见做法是保留分页链接作兜底,或者额外提供一个静态的“查看全部”页面作为入口。
分页 URL 的几种形态
- 路径型:/category/page/3/,结构清晰,容易做规则。
- 参数型:/category?page=3,实现简单,但容易和其他参数混在一起。
- 混合型:排序、筛选、分页参数叠加,URL 数量会成倍增长。
分页参数和筛选参数叠在一起时,蜘蛛很容易被带进大量内容高度相似的组合页。常见的收敛办法是:分页参数保留可抓,排序、筛选类参数只对部分有价值的组合开放,其余用 robots.txt 或链接上的 nofollow 收住。
让分页路径更顺的几件事
- 分页链接用标准 a 标签,href 指向真实 URL,不要只挂在 onclick 上。
- 第一页与后续页的标题、描述、H1 尽量做区分,减少“复制内容”的观感。
- 不要用 canonical 把所有分页都指向第一页,这等于告诉蜘蛛后面几页不必单独看,深层的详情页也更难被发现。
- 给分页加上“上一页 / 下一页”的文字链接,别只放一个箭头图标。
- 分页响应时间要稳。列表页查询通常较重,慢响应会让蜘蛛放慢整站的抓取节奏。
- 保留一个静态的“查看全部”或分类索引页,作为兜底入口。
几个容易踩的坑
一是把分页参数整段屏蔽,蜘蛛只抓到第一页,后面的内容只能靠 Sitemap 补,发现速度明显变慢。二是分页页数无限增长,比如空结果也返回 200 和分页导航,会制造大量空壳页。三是 Sitemap 与内链的口径不一致,Sitemap 里放了详情页,内链却只到第二页,蜘蛛进来后仍要自己摸索路径。
分页不是“翻页组件”,而是一条让蜘蛛逐层走到详情页的通路。把这条路留得清楚、稳定,比事后补 Sitemap 更省事。
最后可以用抓取日志验证:观察列表页被访问的层数分布。如果日志里长期只有第一页和第二页出现,说明后面的分页要么没被链接到,要么响应太慢被放弃了。