搜索抓取

列表页分页的抓取路径:蜘蛛怎样从第一页走到最后一页

列表页是蜘蛛从栏目走向详情页的中转站,分页链接的写法决定了它能不能继续往下走。本文从可抓链接、canonical 误用、分页深度、无限滚动、参数组合与服务器响应几个角度,梳理分页抓取路径中常见的问题,并给出一份上线前后的检查清单。

搜索抓取

列表页分页的抓取路径:蜘蛛怎样从第一页走到最后一页

在站点的抓取路径里,列表页往往承担中转站的角色。首页或栏目页把蜘蛛送进列表,列表再把它分发给详情页。问题在于,列表通常不会只有一页,分页链接的写法直接决定了蜘蛛能不能继续往下走,以及能走多远。

分页链接要真的能被跟着走

很多站点把下一页做成按钮,用 JS 动态拼接 URL,或者只在点击时发起请求。视觉上没问题,但蜘蛛拿到的 HTML 里可能只有一个空容器。想让分页进入抓取路径,最简单的方式是保留可点击的 a 标签,href 指向真实 URL。即使同时用 JS 增强,鼠标点击与蜘蛛跟进也不冲突。

常见写法有 /list?page=2、/list/page/2/、/list/2/ 等,都可以,关键是全站保持一致,不要让同一份内容在多种形态之间来回跳。如果分页 URL 里混入会话 ID 或时间戳,每次抓到都像新地址,反而会让蜘蛛反复走同一段路。

rel=next/prev 与 canonical 的常见误用

rel=next/prev 曾经被用来标记分页序列,后来主流搜索引擎不再把它当作强信号,但它本身不影响链接可抓。真正容易出问题的是 canonical:有人为了集中权重,把所有分页的 canonical 都指向第一页,这会让蜘蛛倾向于认为后续页只是第一页的重复版本,抓取价值降低。更稳妥的做法是让每个分页自指 canonical,或者至少不要强行指向第一页。

如果分页内容确实与第一页高度重复,可以考虑用合理的标题与描述做出区分,而不是靠 canonical 掩盖。分页的每一页都应该有自己的位置,而不是被当作第一页的影子。

往下走多远:分页深度与抓取预算

分页是线性延伸的路径:第一页有第二页链接,第二页有第三页链接。路径本身不复杂,但页数一多,蜘蛛要走的步数会明显增加。如果每页还挂着筛选、排序、时间范围等参数,链接组合会快速膨胀,把本来有限的时间消耗在相似列表上。

常见的收敛方法:

  • 限制分页层数,超过一定页数后改用归档或按时间切分;
  • 过滤无意义的排序参数,只保留有独立价值的入口;
  • 筛选结果是否产出可抓链接,按业务价值决定,必要时用 noindex;
  • 列表页不要输出大量重复的推荐位链接,减少路径分岔。

无限滚动与加载更多怎么留后路

无限滚动对用户体验友好,但对 URL 发现不友好。如果只靠滚动触发接口,蜘蛛拿不到后续 URL。比较实用的折中方案是:

  • 第一屏仍然返回可抓的分页链接,作为兜底;
  • 滚动加载的接口返回真实详情页 URL,并确保这些 URL 能从别处被发现;
  • 加载更多按钮最好是一个带 href 的链接,JS 只做拦截增强;
  • 移动端与桌面端保持同一套 URL,不要额外生成一套仅供爬虫使用的地址。

这些做法不会让蜘蛛一次抓完所有内容,但能让它有一个稳定的入口,逐步把新链接纳入队列。

服务器响应与分页抓取的节奏

分页请求往往比详情页更密集,因为蜘蛛需要在较短时间内连续取多个页面。如果服务器响应慢,或者每页都触发复杂的数据库查询,抓取队列会越排越长,蜘蛛可能降低对本站的访问频率。给列表页做缓存、控制每页输出条数、避免一次查询拉取全部数据,都是比较直接的做法。稳定性比偶尔的一次快速响应更重要。

上线前后的检查清单

  • 分页链接是否为可抓的 a 标签,href 指向真实 URL;
  • 分页 URL 是否稳定,不随会话或时间戳变化;
  • canonical 是否误指第一页;
  • 是否存在参数组合导致的无限路径;
  • 列表页响应时间是否稳定,是否有缓存;
  • 分页内容是否与第一页有足够差异。

分页看起来只是列表的延伸,但它决定了蜘蛛能走多深、走多快。把分页链接做成蜘蛛能理解、能连续跟进的路径,通常比事后调整更容易。

抓取路径不是越深越好,而是每一步都有明确的下一站。