你的站有 /blog/、/blog/page/2/、/blog/page/3/。Search Console 在 page 2+ 标 “Duplicate, Google chose different canonical”。老的 SEO 博客说用 rel="prev" 和 rel="next"、或者把所有分页 canonical 到 /blog/。新的博客说反过来。两边都过时了一半。Google 在 2019 年正式弃用 rel=next/prev,但消息花了好几年才传开。内容站当前最佳实践:每个分页页自指 canonical,当独立 listing 处理。低价值分页视图(搜索结果分页、faceted filter),改用 noindex, follow。
本文讲原因和各平台实现。
常见原因
按命中率从高到低。
1. 老教程说 page/2 → page/1 canonical
2019 年前的 SEO 建议是把所有分页 canonical 到 page 1。现代 Google 把这个解读为你在说”这些不是真实页面——给我看 page 1”。page 2-N 的内容在搜索里基本失去能见度。
怎么判断:看 /blog/page/2/ 的 <link rel="canonical">。指向 /blog/ 就是按老建议做的。
2. 还在发 rel=next/prev
某些模板还在发这些。无害但没用——Google 忽略。删掉更干净。
怎么判断:curl -s yoursite.com/blog/page/2/ | grep -E 'rel="next"|rel="prev"'。有就(可选)删掉,不删也无害。
3. 分页页同时有 noindex 和 self-canonical 冲突
有些模板给分页加 noindex 并 把它留在 sitemap,造成 Robots meta 与 sitemap 冲突 里描述的同类问题。
怎么判断:view-source 分页页。noindex 存在且也在 sitemap.xml 就要修。
4. 分页用 URL 参数 Google 分不清
/blog?page=2&sort=date&filter=ai——Google 的启发式可能把排列当重复处理(如果没 canonical 指引)。更糟,搜索引擎可能爬所有排列、找到大量低价值页。
怎么判断:分页用 query string 参数(特别是多个)而不是路径分段。
5. 分页内容真的是重复(过滤视图)
你有 /blog/?tag=ai、/blog/?tag=ai&page=2 等。每个组合是唯一 URL,但页面本身只是过滤已有列表。这些应该 noindex, follow。
怎么判断:分页 URL 只是因为某个过滤组合而存在(不是基于内容库的内在分页),就是过滤视图、不是真正的分页。
6. 无限滚动页没正确的 URL 状态
无限滚动 listing 通过 JS 加载更多项但不更新 URL。Google 没法爬到更深。(不同的问题但相关。)
怎么判断:滚动加载项但 URL 一直停在 /blog/。Google 只看到最初的 10 项。
最短修复路径
第 1 步:按分页类型决定
| 分页类型 | 处理 |
|---|---|
主博客索引分页(/blog/page/2/) | 每页 self-canonical,可索引 |
| 分类 / 标签分页 | self-canonical,可索引 |
| 搜索结果 | noindex, follow |
| Faceted filter 组合 | noindex, follow 或 robots.txt 拦 |
| 无限滚动 | 并行用 SSG 分页 URL |
第 2 步:博客 / 分类分页 self-canonical
Astro:
---
const url = new URL(Astro.url.pathname, Astro.site).toString();
---
<link rel="canonical" href={url} />
/blog/page/2/ 的 canonical → /blog/page/2/。完成。
第 3 步:停止发 rel=next/prev
从 layout 删掉:
- <link rel="next" href={`/blog/page/${currentPage + 1}/`} />
- <link rel="prev" href={`/blog/page/${currentPage - 1}/`} />
第 4 步:低价值分页 noindex
搜索结果或过滤组合:
<meta name="robots" content="noindex, follow">
follow 重要——Google 仍要跟内链发现可索引内容。
第 5 步:分页页要可爬
分页链接必须是真实 <a href>,不能只是 JavaScript 按钮。Google 的渲染预算可能不执行 JS 分页。
<a href="/blog/page/2/" rel="next">下一页</a>
第 6 步:sitemap 包含分页 URL
/blog/、/blog/page/2/、/blog/page/3/…都作为独立条目。帮 Google 发现深层分页。
非常深的分页(>30 页)考虑同时建可浏览的分类 / 标签 listing,让深文章有更短的发现路径。
第 7 步:修后审 Search Console
Search Console → Pages → 看分页 URL 状态。2-4 周内应从 “Duplicate, Google chose different canonical” 移到 “Indexed”。
预防建议
- 每个分页页当独立 listing——self-canonical、可索引。
- 不再发
rel=next/prev——Google 已弃用。 - 过滤 / 搜索结果分页用
noindex, follow(不要完全拦——Google 仍需要发现内容)。 - 分页用真实
<a>链接,不要只用 JS。 - 加新 listing 类型时审计分页行为。