搜索抓取

列表页翻页的抓取路径:蜘蛛怎么走到第 3 页以后

列表页是蜘蛛发现详情页的主要入口,但翻页写法不同,抓取结果差别很大。本文对比数字页码、上一页下一页、加载更多三种常见做法,说明分页参数该怎么收敛、canonical 在分页上的常见误用,以及如何用服务器日志确认蜘蛛是否真的翻到了后面几页。

搜索抓取

列表页翻页的抓取路径:蜘蛛怎么走到第 3 页以后

列表页承担了大部分 URL 发现

对内容型站点来说,除了首页,蜘蛛发现新 URL 最集中的地方就是列表页和分类页。详情页之间往往互不相连,或者只连向少数相关页面,真正把全站串起来的还是列表页。所以列表页的翻页结构,直接决定了蜘蛛能走多深、多久能把新内容走一遍。

三种常见翻页写法,蜘蛛看到的差别很大

数字页码链接

形如 /list?page=2 或 /list/2 的链接排成一排时,蜘蛛可以从任意一页跳到前后几页,路径短,覆盖也稳定。需要注意的只是页码条别太长,一屏塞进几十个链接会摊薄站内链接的指向,但对抓取本身通常不是问题。

只有上一页、下一页

这种结构对用户友好,对蜘蛛来说却是一条链:要先抓到第 2 页,才能拿到第 3 页,再拿到第 4 页。链路越长,末端页码被抓到的机会越小。想让它走到后面,可以在前几页里给出跳到靠后页码的入口,或者用 Sitemap 补一份分页 URL 清单作为辅助。

加载更多与无限滚动

如果翻页靠按钮点击、靠 JS 拼接下一批数据,而 HTML 里没有对应的普通链接,蜘蛛通常点不到。比较稳妥的做法是给每一批内容配一个真实可访问的 URL,并在页面里放上 a 标签,让用户和蜘蛛都能沿着链接走过去,而不是只依赖脚本触发。

别让分页掉进循环

有些站点给翻页叠加了时间戳、会话参数或排序参数,同一批内容会生成大量不同 URL,蜘蛛越走越多,抓取额度被消耗在重复页面上。可以往几个方向收敛:

  • 保持分页 URL 参数的名称、数量和顺序稳定,不要每翻一页就多出新参数;
  • 给分页设一个合理的页码上限,更早的内容用归档页或按时间切分承接;
  • 列表内容没变时,同一页的 URL 保持稳定,避免每次刷新都生成新地址。

canonical 别把分页统一指向第一页

一个常见的误操作是,把第 2 页到第 N 页的 canonical 全部指向第 1 页。这样蜘蛛会判断后面几页属于重复内容,减少继续深入,页面上独有的那批详情页链接也就失去了被发现的机会。分页页面一般把 canonical 指向自身;如果确实想表达这是同一列表的延续,也要留意别把后续页面变成没有抓取入口的死角。

怎么确认蜘蛛真的翻到了后面

去看服务器日志里列表页的请求分布:如果第 2 页有请求,第 5 页之后几乎为零,问题多半出在链接结构或链路太长,而不是蜘蛛不愿意来。也可以对照抓取统计中各类页面的占比,列表页长期接近于零,说明入口没有被有效暴露出去。

几点落地建议

  • 在列表页给出跳到较后页码的入口,减少纯链式翻页带来的深度;
  • 翻页用可抓取的 a 标签,加载更多同时保留普通链接;
  • 限制分页参数组合,避免同一批内容产生大量变体 URL;
  • 列表里的详情链接数量保持合理,把抓取引导到更重要、更新的内容上;
  • 新内容上线时让它出现在靠前页码或置顶位置,比等蜘蛛慢慢翻到后面更可控。
翻页结构的作用不是把蜘蛛留在列表页,而是把该被发现的详情页尽快交出去。