列表页通常是站点里 URL 发现最集中的地方。蜘蛛进入一个栏目,往往先看到第一页的若干条链接,再顺着分页往下走。分页怎么设计,会直接影响它能不能继续走、能走多深,以及最终能发现多少详情页。
分页链接的三种常见形态
常见的分页实现大致有三类:传统页码链接、“加载更多”按钮和无限滚动。它们对用户可能体验接近,但对蜘蛛来说差别不小。
- 传统页码链接:每一页都有独立 URL,链接写在 HTML 里,蜘蛛可以逐页跟随。只要页码链接可点击、可抓取,路径最清晰。
- “加载更多”按钮:如果按钮是链接,并且指向一个可访问的下一页 URL,蜘蛛仍能跟随;如果只是 JavaScript 事件,没有真实地址,蜘蛛通常看不到后续内容。
- 无限滚动:用户滚动时内容不断追加,但地址不变。蜘蛛没有滚动行为,能拿到的往往只是首屏那批链接。
所以,列表页需要给蜘蛛留一条稳定的 HTML 路径,而不是只依赖脚本行为。
蜘蛛沿着分页走时,会关注什么
链接是否真实存在于 HTML
蜘蛛解析的是服务器返回的 HTML。如果分页地址只存在于脚本变量里,或者要等用户交互后才生成,被抓到的概率会明显下降。把下一页、页码链接放在 HTML 的链接标签中,是更稳妥的做法。
分页 URL 是否稳定
同一个列表页,如果每次访问分页参数都不同,或者带有会话 ID、时间戳,蜘蛛容易把它当成大量不同 URL 处理,抓取预算会被分散。分页地址尽量保持简洁、可复现,比如 ?page=2 这类固定形式。
每页是否有独立内容
如果第二页、第三页返回的内容与第一页高度重复,蜘蛛可能降低继续抓取的兴趣,或者把这些页面视为低价值重复。让每页展示不同的条目集合,是最基本的要求。
分页深度与抓取预算
蜘蛛在站点上的抓取量是有限的。页码越深,被抓取的概率通常越低。一个栏目如果有几十页甚至上百页,靠后的分页可能很久才被访问一次,甚至长期不被访问。
- 把重要内容尽量放在前几页,或者提供分类、标签、时间归档等入口,减少对深页码的依赖。
- 分页数量过多时,考虑限制可抓取深度,或者用“查看更多”指向一个独立列表页。
- 不要把关键详情页只放在很深的页码序列里,否则 URL 发现会变慢。
这不是说深分页没有价值,而是要让蜘蛛有多条路到达同一批内容。内链结构越多元,单个分页路径的压力越小。
Sitemap 与内链怎么配合分页
Sitemap 适合放详情页、分类页等希望被发现的稳定 URL,而不必把所有分页都塞进去。分页的主要职责是引导蜘蛛发现新链接,详情页则可以通过内链和 Sitemap 双重保障。
分页负责“往下走”,Sitemap 负责“给清单”,内链负责“多几条路”。三者配合,URL 发现更稳,但不要指望某一种方式单独解决所有问题。
如果分页使用了“加载更多”,也可以给爬虫提供一个可访问的分页 URL,并在 Sitemap 中保留重要列表页,让蜘蛛有入口进入。
服务器响应与抓取节奏
分页请求往往集中、连续。如果服务器在蜘蛛连续访问时响应变慢、频繁超时,蜘蛛可能降低抓取频率,甚至暂时离开。列表页本身不宜过重,分页接口也要注意稳定性。
当发现蜘蛛只抓到前几页就停了,可以先看日志:是链接没有暴露,还是响应太慢导致放弃。先解决可抓取路径,再谈抓取深度,通常更有效。
总结下来,分页设计的关键不是让用户“能滑到底”,而是让蜘蛛有一条清晰的、HTML 可跟随的路径。路径稳定、内容有差异、入口多元,列表页才能真正成为 URL 发现的入口。