搜索抓取

分页、瀑布流与“加载更多”:蜘蛛怎么走完一长串列表页

列表页是站点里 URL 发现能力最强的入口,但无限滚动和“加载更多”按钮常常让蜘蛛只看到第一屏。本文梳理数字分页、参数分页与 JS 渲染列表在抓取路径上的差别,并给出让蜘蛛走得更深的几种做法。

搜索抓取

分页、瀑布流与“加载更多”:蜘蛛怎么走完一长串列表页

列表页往往是一个站点里 URL 发现能力最强的地方。详情页再多,如果蜘蛛进不来,等于不存在;而蜘蛛进入详情页的主要通道,通常就是那些按顺序排列的列表与分页。翻页方式设计得合不合理,直接决定了蜘蛛能走多深、能发现多少条 URL。

传统数字分页:对蜘蛛最友好的一种结构

形如 /list/page/2/ 或 /list?page=2 的分页链接,是蜘蛛最容易处理的形式:它是一个真实的 a 标签,href 指向一个独立 URL,点进去就是一个新页面。蜘蛛顺着 1、2、3 一路爬下去,每翻一页就多拿到一批详情页地址。

  • 每个分页 URL 独立可访问,不要用 JS 点击事件代替链接。
  • 页码链接出现在 HTML 源码里,而不是等 JS 执行之后再插入。
  • 保留“下一页”链接的同时,也保留一段连续的数字页码,避免蜘蛛只能靠猜。

瀑布流与“加载更多”:蜘蛛可能只看到第一屏

无限滚动和“加载更多”按钮对用户友好,但对抓取路径不友好。如果新增内容是在用户滚动或点击之后由 JS 请求接口才渲染出来的,蜘蛛在 HTML 里往往只能看到最开始的十几条。按钮本身如果是 button 或 div,没有 href,蜘蛛也没有理由去“点”它。

常见的补救方式有三种:

  1. 在页面底部放一条真实的分页链接,指向带参数的下一页 URL,让不执行 JS 的抓取也能继续走。
  2. 让“加载更多”对应的接口地址在 HTML 中以链接形式出现,例如带 page 参数的静态入口。
  3. 用 Sitemap 分片把深层列表 URL 直接交给蜘蛛,作为路径之外的补充。

分页参数本身也要能被抓

可抓取性还取决于分页地址长什么样。带多个筛选参数的地址容易产生大量组合,蜘蛛会在这类页面上消耗掉不少抓取预算,却拿不到多少新 URL。相对稳妥的做法是:

  • 排序参数、会话参数尽量别混进分页链接里,保持地址可预测。
  • 分页页面的 canonical 指向自身,不要统一指向第一页,否则分页 URL 容易被判定为重复而减少被抓的机会。
  • 筛选结果页超过一定组合量时,用 robots.txt 或 nofollow 收口,把路径留给真正需要被发现的页面。

让蜘蛛有一条走到底的路

列表很长时,蜘蛛通常不会一路翻到最后一页,越靠后的分页被抓的频率越低。想让深层内容仍有机会被发现,可以搭配几种手段:

  • 时间归档页:按月份或分类归档,给老内容一个稳定的入口。
  • Sitemap 分片:把深层详情页写进单独的 Sitemap 文件,用索引文件串起来。
  • 相关推荐与内链:在详情页之间横向互链,让蜘蛛从任意一条被爬到的 URL 继续扩散。
判断路径是否通畅,不要只看页面在浏览器里能不能翻,而要看源码里有没有可抓取的 href。浏览器的滚动和点击,不会自动变成蜘蛛的抓取路径。

用日志验证,而不是靠猜

想知道分页到底被走到第几层,最直接的办法是翻服务器日志:筛出列表页和分页 URL,看它们的抓取频次怎么随页码衰减。如果第 2、3 页都很少被抓,后面的详情页自然发现得慢。这时优先调整分页链接的可抓取性和 Sitemap 覆盖,而不是盲目增加内容量。