很多站点的详情页不是直接从首页链出去的,而是通过列表页一层层翻到底才能到达。蜘蛛最终能抓到多少详情页,很大程度上取决于它在分页上愿意走多远,以及分页链接在 HTML 里是否真实存在。
分页为什么容易变成抓取断点
列表页通常有几十上百条内容,第一屏只露出前 20 条,其余要靠翻页或点击按钮才能看到。如果第二页之后的链接不是标准的 a 标签,而是由 JavaScript 拼接出来,蜘蛛解析 HTML 时就看不到这条路,后面的详情页只能靠 Sitemap 或其他内链补救。
另一个常见问题是翻页参数太长。排序、筛选、时间范围与页码组合起来可能有几十种写法,蜘蛛会把它们当成互相独立的新地址,抓取消耗大量落在列表页本身,真正需要被抓的详情页反而排到了后面。
三种常见翻页方式与蜘蛛可见性
一、带链接的传统翻页
- 下一页、页码链接写在 HTML 里,蜘蛛可以顺着 href 走;
- 注意末尾几页是否被省略成“...”只保留首尾页码;
- 锚文本保持“下一页”“第 3 页”这类可读文字即可,不必堆关键词。
二、按钮式“加载更多”
- 按钮如果没有 href,蜘蛛无法点击,列表页等于被截断在第一屏;
- 可给按钮配一个指向下一页的真实链接,或保留一份静态分页入口;
- 核对时分别查看渲染前后的 HTML,确认链接是否出现。
三、无限滚动
- 滚动加载的内容对蜘蛛最不友好,通常需要配合分页地址兜底;
- 至少要保证每一屏内容都有一组可访问的静态 URL。
分页 URL 的组织方式
两种写法最常见:?page=2 这类查询参数,以及 /list/page/2/ 这类路径。参数形式改动方便,但容易和排序、筛选参数混在一起;路径形式更清晰,在日志里按前缀统计也更省事。
- 尽量把分页地址固定成一种形态,不要两套同时存在;
- canonical 一般指向当前分页自身,而不是统一指向第一页,避免整列被合并;
- 分页页面可以不提交 Sitemap,但不必急着用 noindex 切断路径,除非确认不再需要被抓;
- 筛选参数建议用 robots.txt 或页面内链接约束,避免和页码自由组合。
用日志核对分页是否被抓到底
打开抓取日志,按列表页地址前缀筛一遍,重点看几个数字:
- 第一页以外的访问占多大比例;
- 访问过的页码最大到第几页,是否总卡在同一个位置;
- 分页请求的状态码是否干净,有没有 3xx、5xx 混在里面;
- 从分页进入详情页的请求,是否在时间上紧随其后。
如果日志里几乎没有第 3 页之后的记录,问题多半出在链接本身,而不是蜘蛛“不想抓”。反过来,如果分页请求很多但详情页请求很少,更可能是参数组合把抓取分散掉了。
修复顺序建议
- 先确认分页链接在 HTML 中是真实存在的 a 标签;
- 再统一分页地址形态,去掉冗余的排序、会话类参数;
- 检查最后一页的“下一页”是否链回自身或指向错误地址;
- 把重要列表页放进 Sitemap 或首页内链,缩短到达路径;
- 连续观察一到两周日志,比较修复前后分页访问与详情页发现的差异。
分页不是额外的入口,而是详情页的必经之路。核对的重点不在页数多不多,而在每一页到下一页的链接是否真的存在、地址是否唯一。