一个 blog hub,/blog/page/2/、/blog/page/3/ 被加了那条流传很广的 SEO 建议:<meta name="robots" content="noindex,follow">,让分页不跟主 hub 竞争,又保留链接传递。半年后,只能从第 3 页之后链接到的文章从索引里消失了。Search Console 显示 “Discovered – currently not indexed” 或 “Crawled – currently not indexed”。这个看起来很聪明的做法,跟 Google 实际处理长期 noindex,follow 的方式正好相反。
Google 公开表态过:长期处于 noindex 状态的页面,Google 会逐渐当成 noindex,nofollow 处理,上面的链接停止传递信号。如果第 2 页之后是文章 10-200 的唯一路径,那这些文章就成了孤儿。
常见原因
1. WordPress / Yoast / Rank Math 的分页设置
大多数 SEO 插件出厂就带一个 “Noindex subpages of archives” 开关,通常默认开着。它会给 /category/x/page/2/、/tag/y/page/3/ 写 noindex,follow。
怎么判断:访问 yoursite.com/category/whatever/page/2/,view-source,grep robots。看到 noindex,follow 就是插件干的。
2. Astro / Next.js 分页路由的一刀切 meta
模板 [page].astro 在 page > 1 时输出 <meta name="robots" content="noindex,follow">。写代码的同事看了一篇 2014 年的 Moz 文章。
怎么判断:检查 getStaticPaths / 动态路由文件,找按 pageNumber > 1 分支的 noindex 逻辑。
3. 分页是深层内容的唯一站内路径
Hub 链到文章 1-10,第 2 页链到 11-20,第 3 页链到 21-30。没有 category index、没有相关文章、sitemap 里也没有 11 之后的文章。第 2 页之后是 noindex,文章 11+ 就零个 Google 信任的站内链接。
怎么判断:挑一篇住在第 3 页的文章。Search Console URL Inspection → “Referring page”。如果唯一 referrer 是一个 noindex 页,就是它。
4. Sitemap 漏掉分页 URL 和文章
Sitemap 只列 hub /blog/ 和精选文章,第 2 页之后的文章 URL 从没出现。再加上分页是 noindex,Googlebot 没有入口。
怎么判断:下载 sitemap,grep 一篇掉的文章 URL。没有就说明 sitemap 没在帮忙。
5. 把 noindex,follow 跟”canonical 到 hub 的 index,follow”混淆
有些团队想用 rel=canonical 把分页”合并”到第 1 页,让所有分页都 canonical 指回第 1 页。Google 在非重复页之间的 canonical 会被忽略。分页页还是会被爬,canonical 信号浪费掉,反而增加混乱。
怎么判断:第 2 页的 <link rel="canonical"> 指向第 1 页(内容不同)。Search Console 会报 “Duplicate, Google chose different canonical” 或者直接忽略。
6. JS “load more” 把深层文章完全藏起来
变体:不用分页 URL,用一个 “Load More” 按钮 JS 拉取,不 push URL。Googlebot 根本看不到 11+ 的文章链接。
怎么判断:DevTools 关掉 JS,刷新 hub。如果只有 10 篇文章而且没有 <a href="/blog/page/2/">,深层文章就是纯 JS。
最短修复路径
第 1 步:明确选一个分页策略
三个合法选项,挑一个:
- A. 所有分页都 index(
index,follow)。最简单,Google 处理 hub 重复内容没问题。 - B. 分页 canonical 到第 1 页,但保持
index,follow。Google 可能还是会索引第 2 页之后。 - C. 保持
noindex,follow,但单独做一个包含每篇文章 URL 的 sitemap。 别把分页当发现路径。
A 选项对发现性最稳。
第 2 步:去掉第 2 页之后的一刀切 noindex
Astro:
---
const { page } = Astro.props;
// 删掉这个:
// const robots = page.currentPage > 1 ? 'noindex,follow' : 'index,follow';
const robots = 'index,follow';
---
<meta name="robots" content={robots}>
WordPress:Yoast → Search Appearance → Archives → “Show in search results: Yes”。或 Rank Math → Titles & Meta → Misc Pages → 取消勾选 “Noindex Paginated Pages”。
第 3 步:所有文章 URL 都进 sitemap
别依赖”穿透分页”爬。从文章全量列表生成 sitemap,不从分页 HTML 生成:
// scripts/generate-sitemap.mjs
import fs from 'node:fs';
const articles = JSON.parse(fs.readFileSync('articles.json', 'utf8'));
const urls = articles.map(a => `<url><loc>https://example.com/articles/${a.slug}/</loc></url>`);
fs.writeFileSync('public/sitemap-articles.xml', `<urlset>${urls.join('')}</urlset>`);
第 4 步:重新提交 sitemap,触发重抓
Search Console → Sitemaps → resubmit。然后挑 5-10 篇掉的文章用 URL Inspection → “Request indexing”。
第 5 步:给深层文章加二级内链
不要让任何文章只能通过分页 archives 访问到。从相关文章、tag 页、“同作者更多”组件交叉链接。
第 6 步:Search Console 持续观察
Pages → “Discovered – currently not indexed” 计数应该在 2-4 周内回落,Googlebot 通过 sitemap 和新内链重新发现文章。
哪些情况可能不是你操作错了
零外链信号的老归档文章,就算修了分页也可能再也回不来。那是内容质量 / 内链问题,不是分页指令问题。
容易误判的情况
误以为是站点速度或薄内容问题。文章本身没问题,问题是它们因为唯一入站内链在一个 noindex 页上,而 Google 不再信任那个页作为链接源——所以变成孤儿。
预防建议
- 分页 archive 默认
index,follow,除非有特别理由。 - 永远别让分页是唯一发现路径。文章一定要进 sitemap 并有交叉内链。
- 真的要 noindex 第 2 页之后,每季度做一次孤儿页审计。
- 别从分页 canonical 到第 1 页——它们不是重复页。
- 这个话题,2019 年之前的 SEO 建议都别全信,Google 立场变过。
FAQ
rel=prev/next还能帮分页吗? 不能。Google 多年前就停止支持了。不会有害,但完全被忽略。- 只在最后一页 noindex 行不行? 不行。要么全 noindex 要么全 index,混合信号让爬虫困惑。