列表页通常是站点里 URL 数量最集中的地方,也是蜘蛛最容易走到一半就停下的地方。抓取路径能不能往后延伸,不只是内容够不够多的问题,更取决于分页链接怎么写、页码地址怎么设计,以及深层页面打开时服务器是否扛得住。
蜘蛛翻页时实际在做的事
蜘蛛进入一个列表页后,看到的是两类链接:指向详情页的链接,以及指向第 2 页、第 3 页的链接。它不会像人一样顺手点“下一页”一路点下去,而是把这些链接放进待抓队列,按一定优先级和抓取预算排队访问。所以“能不能翻到后面”并不是一次决定,而是由每一页提供的链接、这些链接的可访问性、以及服务器响应速度共同决定的。
常见的现象是:第 2、3 页抓得比较勤,越往后记录越少,某一页之后几乎不再出现。多数时候这不是惩罚,而是路径变长、预算有限、以及深层页码本身缺少新增链接可走的结果。
三种常见的分页写法,走法不一样
普通 a 链接加页码
每一页都列出 1、2、3…以及“下一页”的 a href,蜘蛛可以从任意一页继续往后走,也可以从首页直接跳到较深的页码。这是最省事、最不容易断的结构。缺点是列表页很长时,页脚会堆出大量页码链接,可能把注意力从详情页链接上分走一部分。
只保留一个“下一页”
页面里只有“下一页”的真实链接,路径就变成了线性的:第 1 页 → 第 2 页 → 第 3 页。能走通,但到第 20 页需要经过 19 跳,中间任何一跳出问题都会让后面的页面拿不到入口。可以在页码区域补几个跳页链接,比如前后各跨 5 页,把长路径缩短一些。
按钮或滚动加载,地址由脚本生成
如果“下一页”是 button,或者滚动到底部才由脚本插入新内容,而最初的 HTML 里没有可点击的 href,蜘蛛往往只能停在首屏能看到的链接上。至少要保证有一个真实可抓取的 href 指向下一页,再考虑补上滚动加载作为体验增强。
页码 URL 的设计细节
分页地址建议用稳定的路径形式,例如 /list/page/2/,并且可以被直接访问、返回 200。查询参数形式的地址也能被抓,但一旦和筛选、排序参数混在一起,就容易产生大量内容近似的地址,把有限的抓取次数分散掉。
- 页码从 1 开始,避免用 page=0 和 page=1 表示同一页,造成两个地址同一内容;
- 不要用 #page=2 这类片段标识当分页地址,片段不会被视为新的 URL;
- 筛选与排序的组合,最好有明确的索引规则,或在 robots 文件中收口,避免生成无穷组合。
上线前可以自己走一遍的清单
- 查看页面源代码,确认“下一页”在 HTML 里存在真实 href,而不是只有脚本事件;
- 从第 1 页开始手动点到第 5 页以上,看每一跳是否都能到达;
- 抽查较深的页码,比如第 10、20 页,确认能直接打开并返回 200;
- 检查“上一页”“下一页”是否存在指向同一地址的循环;
- 确认分页页没有被 noindex 或 robots 屏蔽,否则后面的页面会同时失去入口。
从服务器日志确认翻页有没有被抓
在日志里筛出蜘蛛的 UA,统计带页码的 URL 出现频率和状态码分布。如果只有前几页有记录,说明路径在中途断了,可以回头检查链接形式和深层页码的可用性;如果深层页码大量返回 5xx 或响应时间明显偏长,就要先解决服务端问题,再谈路径优化。也可以隔一段时间再看一遍,观察新内容发布后,深层页码是否重新被访问。
分页本身不决定收录,它决定蜘蛛有没有机会走到后面那些 URL。把路径铺直、把响应做稳,剩下的交给时间和持续更新。