SEO 百科
分页的网址
本页目录
分页的网址
分页的网址是列表页拆成多页之后的独立地址,第 2 页、第 3 页各有自己的网址,常见写法是 /list?page=2[2]。引擎把一个分页序列里的每个网址当作独立网页,抓取、收录和排序都按独立网页计算[2]。列表页指把多条信息聚合展示的页面,例如文章列表、商品类目页、问答列表[3]。地址标错会让后面的页面不再被单独收录,页面拆得过碎又会让每一页给不出足够的信息量,这两处判断都要在上线前定下来。
分页序列里的网页关系
页与页之间的关系由链接交出去。Google 在文档里写了做法:
为确保搜索引擎理解分页内容的网页之间的关系,请使用
<a href>标记在每个网页上添加指向下一页的链接。Google《分页和增量加载以及它们对 Google 搜索的影响》[2]
抓取工具按链接找页面。第 2 页没有任何链接指向它时,它只剩站点地图和历史抓取记录两条进入路径。反过来看,链接按顺序排好,第 2 页、第 3 页会依次进入抓取队列,各页里的条目也就各自有了被收录的机会。
Google 还建议从序列里的每一页链接回第一页,用来强调这一组网页的起点[2]。这里的判断落在着陆页归属上,着陆页指用户点击结果之后到达的第一个页面。第 1 页承担整组内容的门面,后面的页面承担细分需求,两者在搜索结果里竞争的是不同的查询。
<nav aria-label="分页">
<a href="/list/">1</a>
<a href="/list?page=2" rel="next">2</a>
<a href="/list?page=3" rel="next">3</a>
<a href="/list?page=2">下一页</a>
<a href="/list/">返回列表首页</a>
</nav>
页码链接写成真实的 <a href>,用户在浏览器里禁用脚本也能进第 2 页,抓取工具拿到的就是同一批地址。
每页的规范网址标注
规范网址指一组重复或相似网页里被选定的那个地址,它代表整组网页,行业也写作 canonical。分页的处理规则是每条网址各标自己:
不要将分页序列的第一个网页用作规范网页。应为每个网页提供各自的规范网址。
Google《分页和增量加载以及它们对 Google 搜索的影响》[2]
这条规则的原因在规范化的作用上。Google 的规范化文档说明,指定规范网址之后,搜索引擎会把已经掌握的信号整合到一个首选网址上,指向各个网址的链接也算在这种信号里[1]。第 2 页如果标 <link rel="canonical" href="/list/">,指向第 2 页的链接、第 2 页独有条目的信息,都会被并到第 1 页去,第 2 页本身退出结果。
Google 对规范化另有两条硬约束:请在规范网页本身上添加 rel="canonical" 链接,也就是自引用规范;也不要用 noindex 选定站内的规范网页,因为 noindex 会让那个页面完全不出现[1]。
<!-- /list?page=2 的 head -->
<link rel="canonical" href="https://www.example.com/list?page=2" />
<!-- /list?page=3 的 head -->
<link rel="canonical" href="https://www.example.com/list?page=3" />
标题和描述可以整组共用,页码写进标题尾部的做法更常见,例如 第 2 页 - 前端专栏。Semrush 的指引同样主张每页自引用,理由是这种做法能避免分页序列被判定成重复内容[4]。
内容拆分的收益与代价
Google 支持把长列表拆开,因为一次性取回全部结果会拖慢首屏。文档列出的好处包括初始网页加载更快、网络流量更少、后端从数据库取的内容量更小[2]。移动设备上流量代价更明显,拆分带来的速度收益也就更容易被用户感知。
代价同样写在 Google 的对照里:内容被拆成多个网页而不是一个连续列表,想看更多内容就要加载新网页[2]。拆得过碎会带来两个后果。一个后果是每一页的条目太少,用户要连续跳好几页才能看完一轮,第 4 页之后的到达率通常掉得很快。另一个后果是同一篇内容在相邻两页各出现一次,两页看起来高度相似,引擎按相似网页处理时,两页的收录与排序表现都会下降。
一页装多少条由列表本身决定。商品类目页一屏能看到的数量、文章列表页的摘要长度、图片列表页的缩略图尺寸,都会改变合理取值。判断标准是首屏能给出这一页的主张,用户不必跳转就知道这一组结果的整体规模。
页码写法与筛选排序地址
页码放进网址时,写法上有三种情况需要区分。
- 查询参数:
?page=2,Google 要求为每个网页提供唯一网址,推荐的就是这种绝对页码[2]。 - 路径分段:
/list/2/,服务器能收到,效果与查询参数等价,规则要保持一致。 - 网址片段:
#page=2,不可用。Google 的说法是“Google 会忽略片段标识符”,抓取工具看到只有#之后不同的地址,会认为这一页已经取过[2]。
筛选和排序会生成大量指向同一组结果的地址。以 ?order=price 为例,它返回的还是那一列商品,只是顺序不同。Google 的建议是把这些变体挡在索引之外,手段有两样:noindex 的 robots meta 标记,或者用 robots.txt 降低抓取意愿[2]。noindex 是让页面不进索引的指令,写在页面 head 里。
<!-- 筛选结果页:可抓取,但不进索引 -->
<meta name="robots" content="noindex" />
User-agent: *
Disallow: /*?order=
Disallow: /*&color=
上面两条规则只挡抓取,挡索引要用 noindex。两者一起用时,被 Disallow 的页面取不到 <head>,noindex 反而读不到,只能选一种。
自检办法
分页设置完成后,取第 2 页的源码看三件事:列表项在不在、规范网址指向谁、下一页链接是不是带 href 的 <a>。
# 看第 2 页原始 HTML 里的规范网址与下一页链接
curl -s "https://www.example.com/list?page=2" | grep -E "rel=\"canonical\"|rel=\"next\""
# 确认第 2 页与第 1 页返回的不是同一份列表
curl -s "https://www.example.com/list?page=2" | grep -c "class=\"card\""
第二条命令数的是列表卡片数量。两页数量相同而且条目重复,说明分页参数没有真正生效,服务器返回的是同一份内容。
常见误用
- 把第 2 页往后的规范网址统一指向第 1 页,后面的页面不再被单独收录;
- 用
#page=2承载页码,抓取工具视为同一个地址,链接不再被跟踪[2]; - 分页序列里缺
href链接,只留一段脚本点击的“下一页”,后续页面的发现渠道只剩站点地图和偶然链接; - 把筛选地址、排序地址和不带参数的列表页一起放进索引,同一组结果出现多个版本;
- 一页只放两三条内容,整组页面每一页的信息量都撑不起一个独立结果;
- 用
robots.txt屏蔽了分页地址,又在页面里写noindex,两处指令互相遮挡。
附录
参见
参考资料
官方(境外)
- 《如何使用 rel="canonical" 及其他方法指定规范网址》,Google 搜索中心。
- 《分页和增量加载以及它们对 Google 搜索的影响》,Google 搜索中心。
官方(国内)
- 《百度APP移动搜索落地页体验白皮书5.0》,百度搜索资源平台,2020-03-19 更新。
第三方
外部链接
无。