蜘蛛池知识

蜘蛛池入口页的分页与列表页:翻页链怎么设计才利于 URL 发现

列表页和分页是蜘蛛池里最容易产生新 URL 的地方,也是最容易失控的地方。本文从翻页形态、参数写法、每页链接数量、深度收敛和日志验证几个角度,说明入口页上的分页链该怎么放,才能让 URL 发现更稳定,同时不给服务器和抓取预算添负担。

蜘蛛池知识

蜘蛛池入口页的分页与列表页:翻页链怎么设计才利于 URL 发现

在蜘蛛池里,入口页通常承担两件事:一是自己能被蜘蛛抓到,二是把蜘蛛引向更多 URL。列表页和分页链是第二件事的主力——一个入口页放上一组翻页链接,理论上就能把成百上千个 URL 铺出去。但实际运营中,分页也是最容易失控的地方:翻页参数无限增长、每页链接堆得太密、翻到几十页之后没有任何收敛,结果抓取预算被消耗在一堆低价值页面上。

先明确分页在蜘蛛池里的角色

分页页本身不是最终目标,它更像一条通道。你需要想清楚三件事:每一条通道通向哪里、一共允许多少条通道、蜘蛛走完通道之后能不能落到有价值的页面。如果分页链接指向的还是分页,或者翻到第 20 页之后内容已经高度重复,那这些 URL 被发现的边际收益就很低。

一个常见的判断标准是:如果某个分页 URL 上的列表项,和前一页、后一页几乎没有差异,那它就属于可收敛的部分,不必每一页都做成独立可抓的地址。

翻页形态:选可被抓取的那种

常见的翻页实现有几种,对蜘蛛的友好度差别很大。

  • 静态页码链接:/list/2/、/list/3/ 这类写进 HTML 的地址,最容易被发现和跟踪。
  • 参数分页:/list?page=2 也能被抓,但要注意参数不要叠加出无穷组合,比如同时带排序、筛选、时间范围,URL 会迅速膨胀。
  • 按钮式加载更多:如果按钮背后是 AJAX,且在原始 HTML 里没有对应的链接,蜘蛛往往看不到后续内容。
  • 无限滚动:对访客体验好,但对 URL 发现基本没有帮助,除非你有额外的静态分页地址作为兜底。

如果站点必须用 JS 加载,至少要在 HTML 里保留一组可点击、可跟踪的翻页链接,让蜘蛛顺着链接走到后面的页面。

每页放多少条链接

列表页每条链接都会消耗一点抓取注意力。把 200 条链接塞进一页,和分成 10 页每页 20 条,最终被发现的 URL 数量可能差不多,但后者对服务器更友好,也更接近正常站点的形态。

比较稳妥的做法是:列表页每条目控制在几十条以内,翻页数量设置一个上限。超过上限的历史内容,可以用归档页、标签页或者站点地图的方式单独处理,而不是让它继续挂在翻页链末尾。

分页链的深度怎么收敛

蜘蛛顺着翻页往下走,深度越深,到达的概率越低。一个实用的做法是控制三层结构:

  1. 入口页指向若干个列表首页;
  2. 列表首页通过翻页链指向后续分页;
  3. 分页里的条目指向目标详情页。

到了第四层、第五层,收益通常已经很小。如果你发现日志里深层分页几乎没有被抓过,说明这条链路的实际有效性有限,与其继续加深,不如把资源转到更靠前的页面上。

分页页的规范化与去重

同一份列表内容往往会通过多条路径到达:默认排序、按时间排序、带筛选参数的版本。这些地址如果都返回 200 且内容相近,很容易形成重复页面。处理方式上有两个方向:

  • 能合并的,用 canonical 指向主分页地址;
  • 不打算被单独抓取的筛选组合,用 robots.txt 或 meta robots 挡掉,而不是让它自由扩散。

需要注意,被挡掉的 URL 仍然可能出现在外链或历史记录里,只是不参与抓取。挡与不挡要按页面价值来定,不要一刀切。

用日志验证翻页链是否真的生效

设计完不代表蜘蛛就会照做。打开访问日志,看几个指标:

  • 分页 URL 有没有被请求过,请求频率是否集中在最前面几页;
  • 翻页请求返回的状态码是不是 200,有没有大面积的重定向;
  • 从分页页出发的详情页,是否也有对应的抓取记录。

如果只看到入口页被反复抓取,分页却几乎没人访问,多半是链接没写进 HTML、被 robots 挡了,或者翻页地址本身不可访问。

分页链的价值不在于铺得多,而在于蜘蛛愿意顺着走下去,并且走到的页面值得看。数量堆到一定程度之后,真正决定效果的是结构与稳定性,而不是页数。

几个容易踩的坑

  • 翻页参数里带上会话 ID 或时间戳,导致每次生成的 URL 都不一样;
  • 分页链接用 JS 拼接,原始 HTML 里完全没有锚点;
  • 列表页只放标题文字,链接本身是空的或指向首页;
  • 翻页页数没有上限,蜘蛛一直能翻到更深的空页面;
  • 分页被设成 noindex 的同时,又指望它传递 URL,逻辑上自相矛盾。

把这几处理顺之后,再去观察抓取记录的变化,通常比单纯增加入口页数量更有意义。