EN
展现形式 · 概念

Pagination:分页、加载更多与无限滚动

比较分页、Load more 按钮与无限滚动三种长集合翻页方式,说明焦点与位置保持、返回按钮恢复、页脚可达、可抓取链接、nav 地标与 aria-current 等要求,并转述 Google 与 W3C 官方页面所写。

Pagination 把一个长集合拆成多段浏览,常见方式有三种:分页(页码加上一页、下一页)、Load more(按钮追加下一段)和无限滚动(滚到底部自动追加)。它处理的是同一集合在纵向上的分段;在固定区域内横向切换项目属于 Carousel。

适合与不适合

适合集合页、搜索结果、评价列表、订单历史这类项目多、需要逐段浏览的长集合。项目不多时一页显示更简单;步骤有先后依赖的流程用 Timeline 或表单步骤,而不是翻页。

三种方式怎么选

方式适合主要代价
分页目标明确、需要比较或回到某一页;需要可分享、可抓取的位置换页打断,需要点击
Load more顺序浏览、希望保留列表上下文,同时让用户控制何时加载已加载项累积后位置难恢复,需为每段设置可寻址 URL
无限滚动内容流式消费、没有明确终点页脚难以到达,返回后位置易丢,屏幕阅读器与键盘用户难以定位

集合页与搜索结果通常需要比较、返回与分享,以分页或“Load more 加真实链接”为稳妥起点;无限滚动只在内容确为流式时使用。以上是编辑建议,不是官方规定。

与相邻模式的区别

对照判据
CarouselCarousel 在有限空间里切换少量项目;Pagination 对长集合分段,项目仍按 Grid 或 List 排列
TabsTabs 切换并列的互斥视图;页码切换的是同一视图的不同区段
Navigation Menu二者都用导航地标,但菜单指向不同栏目,分页指向同一集合的其他区段

优点与缺点

优点缺点
分段加载降低首屏数据与渲染量分段让比较跨越页面,筛选与排序变化后需重置
分页天然对应可分享的链接页码控件在小屏占位,触摸目标需足够大
Load more 让用户控制节奏追加后焦点与阅读位置易错乱

内容与交互要求

  • 分页:显示当前页与总页数或结果总量;上一页、下一页是真实链接。换页后把视线与焦点带回结果区顶部,并让页面标题或状态反映“第 N 页”。
  • Load more:按钮说明会加载多少、已显示多少,例如“再显示 24 项,已显示 24 / 96”。加载后保持焦点仍在可操作位置,并用状态文本通知新增数量。
  • 无限滚动:页脚必须仍可到达,通常需要终点或“Load more”兜底;每一段有稳定地址。
  • 返回与恢复:从商品详情返回时,应回到离开的位置和已加载的项数,而不是回到第一段。
  • 筛选与排序变化:重置到第一段,并让状态可见。

响应式与无障碍

  • 导航地标:页码控件放入带名称的 nav(WAI 页面区域教程:一个页面可有任意数量导航区域,用标签区分);当前页链接设置 aria-current="page",MDN 明确以分页链接为例,且同组只标一个。
  • 状态通知:WCAG 2.2 的 4.1.3 Status Messages(AA)要求状态消息不获得焦点也能被辅助技术得知,理解文档以“18 results returned”为例;“已加载 24 项”应通过状态区域播报,不要移动焦点去朗读。
  • 目标尺寸:2.5.8 Target Size (Minimum)(AA)要求指针目标至少 24×24 CSS 像素,另有间距等例外;页码之间要留出间距。
  • 不可用状态:首页的“上一页”要么移除,要么明确不可用,不能只靠颜色区分。
  • 触发方式:无限滚动的自动触发不得成为唯一路径。MDN 说明 Intersection Observer 可用于无限滚动,且不阻塞主线程;它只是检测手段,不替代按钮与链接。

SEO 与可抓取链接

Google 的分页页把三种方式并列,并写明:其爬虫不会点击按钮,通常也不会触发需要用户动作才更新页面内容的 JavaScript,因此 Load more 与无限滚动需要额外处理。页面同时写明:

  • Google 通常抓取 <a> 元素 href 中的 URL,每页应含指向下一页的 <a href>,并可考虑从各页链回第一页(页面称这可提示第一页是更合适的落地页);
  • 每页使用唯一 URL,各页拥有自己的 canonical,不要以第一页作为所有页的 canonical;
  • 页码不要用 URL 片段标识符(# 之后);
  • 带筛选或不同排序的变体,使用 noindex 或 robots.txt 避免重复索引;
  • Google 已不使用 <link rel="next"> 与 <link rel="prev">,其他搜索引擎可能仍使用;
  • 页面还建议用 preload、preconnect 或 prefetch 优化用户翻到下一页的性能(该页更新于 2025-12-10)。

Google 懒加载页对无限滚动另写:每一段有独立且持久的 URL,同一 URL 每次加载内容一致,并按顺序链接各段 URL;其示例方法不依赖滚动或点击,因为 Google Search 不与页面交互。以上均为页面所写,核验于 2026-09-29,不构成对索引或排名的保证。

状态与退化

零项:空状态并提供清除筛选;只有一页:隐藏分页控件;越界页码:回到最后一页或返回明确的空状态;加载中:按钮显示进行状态并阻止重复点击;加载失败:保留已加载项并提供重试。无 JavaScript:分页本就是普通链接;Load more 应以指向下一页的真实链接为基础,脚本只负责追加。减少动态效果:不做滚动动画与自动滚动定位。

常承载的内容与模块

集合页的商品(Featured Products、Product Categories)与评价列表(Customer Reviews)最常用;集合浏览与筛选的整体契约由集合浏览模块另文说明。

集合页的完整浏览、筛选、排序与翻页契约见集合浏览与筛选模块;搜索结果的翻页见站内搜索模块。

平台落点(Shopify,核验于 2026-09-29)

  • paginate 标签页写明:可对 collection.products、blog.articles、search.results、customer.orders、product.variants 等分页,可分页至数组第 25,000 项为止;可用 paginate 对象或 default_pagination 过滤器生成页码导航。
  • paginate 对象页写明:page_size 最大 250,page_param 默认为 page,另有 next、previous、parts 等属性。
  • 标签页未提及无限滚动;是否支持及怎样支持须看具体主题。Horizon 4.2.0 中分页控制器的分工见集合与搜索,两个固定版本的筛选与分页实现见Dawn 筛选与分页、Horizon 筛选与分页。

发布前检查

  • 每一段是否有可访问的唯一 URL,链接是否真实存在于 HTML?
  • 从详情页返回、刷新、分享链接后,位置与已加载项是否恢复?
  • 键盘与屏幕阅读器能否翻页、得知新增数量并到达页脚?
  • 筛选或排序变化后是否重置且状态可见?
  • 关闭 JavaScript 后能否翻到第二页?

待继续完善

  • 用真实设备复测位置恢复与屏幕阅读器播报;
  • 补充评价列表与搜索结果各自的分页取舍;