搜索抓取

列表页分页与蜘蛛抓取:翻页链接该保留多少层

列表页是站点里 URL 最密集的区域,翻页链接既帮蜘蛛发现新页面,也可能消耗大量抓取预算。本文讲清带页码链接、加载更多、查看全部三种形态的差别,给出折叠深层页码、收敛排序参数、设置 canonical 与调整内链位置的具体做法,并说明如何用日志判断翻页是否抓取过头。

搜索抓取

列表页分页与蜘蛛抓取:翻页链接该保留多少层

列表页往往是站点里 URL 最密集的地方。一个栏目下有几百条内容,按每页 20 条排下去就是十几个甚至几十个翻页 URL。蜘蛛顺着这些链接走,既能发现新页面,也可能把抓取额度大量花在同一批内容的第 N 种排序方式上。分页本身没有问题,关键在于翻到多深、以什么形式翻。

翻页链接的三种常见形态

带页码的链接(/list?page=3 或 /list/page/3)是最容易被蜘蛛跟踪的形式,链接就在 HTML 里,不依赖脚本执行。如果链接是标签,蜘蛛会正常入队;如果是纯 JS 按钮或点击后才注入的 DOM,蜘蛛通常点不动,这条路径对它等于不存在。

“查看全部”或“每页显示 200 条”这类入口,会让同一批内容以另一种 URL 形态出现,容易和分页页互相竞争,出现多个页面指向同一批内容的情况。它的好处是减少层级,代价是重复度上升,需要用 canonical 或内链策略加以约束。

蜘蛛为什么容易在分页里越走越深

  • 翻页链接大多位于列表底部,属于典型的链式结构:第 1 页链到第 2 页,第 2 页链到第 3 页,深度线性增长。
  • 每页 20 条链接乘以 30 页,一个列表页就能贡献几百个 URL 出口,其中相当一部分是重复内容。
  • 当站点还有更重要的新页面等着被抓时,这些翻页 URL 会挤占队列,拖慢真正需要更新的页面。

几个收敛分页抓取的做法

  1. 只让前若干页可点。例如前 5 页保留普通链接,第 6 页之后折叠起来,用户需要操作才展开。蜘蛛仍有路径到达较深页码,但不会一上来就全部铺开。
  2. 不要用 noindex 来处理分页,除非确定不需要这些页出现在结果里。noindex 并不阻止抓取,蜘蛛照样会顺着链接翻下去,只是不放进索引,抓取额度该花还是花了。
  3. 分页页面建议 canonical 指向自身,而不是全部指向第一页。把第 2、3 页硬合并到第一页,用户搜到的长尾内容会失去入口。
  4. 排序参数(?sort=price、?order=desc)尽量收敛,只让默认排序的链接可被跟踪,其余交给筛选表单处理。
  5. 确认超出范围的页码不会返回 200 加空内容。列表为空时给一个合理的提示页或直接 404,避免蜘蛛把空壳页面当成有效 URL 收进队列。
  6. 重要的列表页可以考虑放进站点地图,作为翻页链接之外的补充入口,但不必把每一页翻页都提交一遍。

内链位置也在影响蜘蛛的选择

导航栏里如果直接链到某个热门的二级列表,蜘蛛会更早、更频繁地回到这个列表页。正文里出现的一条内链,通常比页脚批量输出的链接更容易被优先跟踪。所以在页脚堆几十条分类翻页链接,效果往往不如在正文里自然地引一条相关列表。多个入口指向同一个列表页时,也可以顺便观察日志里哪条路径更常被走到。

服务器与抓取节奏

分页带来的请求量是实打实的。一个 30 页的列表被频繁抓取,意味着同一路径下会连续产生几十次请求。如果此时响应偏慢,蜘蛛的并发会降下来,整体抓取速度随之变慢;若出现 5xx 或超时,队列里的其他 URL 也会被一起推迟。列表页大多是动态查询,做好缓存、给分页请求设置合理的超时与限速,往往比事后调整链接结构更有效。

怎么判断翻页抓取走过头了

看日志里带 page 参数的 URL 占比、抓取频次和响应状态,再看这些抓取有没有带来新 URL 的发现。如果第 10 页之后被频繁访问,对应内容早已收录、也没有新增页面,说明这段路径的收益有限,可以考虑折叠链接或减少暴露。反过来,如果某个深层页码确实带来了大量新 URL 的首次发现,就不必急着砍掉。

分页不是越少越好,也不是越多越好。核心是让蜘蛛在前几层就能拿到足够多的有效 URL 出口,至于第 N 页之后的翻页链接,交给用户点击即可。