分页、筛选与参数 URL:列表页与电商筛选页收录控制
列表页、分页、电商筛选是大型网站最容易"失控"的地方:一个分类页加上颜色、尺码、价格、排序等条件,能瞬间衍生出成千上万个近似重复的 URL,把抓取预算烧光、稀释规范信号。这篇文章讲清分页怎么处理、筛选导航如何控制、参数 URL 如何取舍,给你一套可落地的决策框架。
分页的正确处理#
分页(pagination)是把长列表拆成多页:文章列表第 1、2、3 页,或商品分类的多页。处理分页的核心原则,比很多人想象的简单:
- 每页 canonical 指向自身:第 2 页的 canonical 就是第 2 页,不要指向第 1 页——每页内容不同,指向第 1 页会导致后续页内容不被收录。
- 页面间有真实分页链接:用带
href的<a>标签连接相邻页,让爬虫能逐页发现(参见 JavaScript SEO)。 - 每个分页项有自己的入口:列表里的每个内容(文章/商品)都应有可抓取的链接。
rel=next/rel=prev 作为索引信号。你不必专门为 Google 添加它们(加了也无害)。现在处理分页就靠:每页自引用 canonical + 可抓取的分页链接。不要再依赖 rel=next/prev 来"声明分页关系"。<!-- 第 2 页 /blog?page=2 的 canonical 指向自己 -->
<link rel="canonical" href="https://example.com/blog?page=2">
<!-- 可抓取的分页导航 -->
<nav aria-label="分页">
<a href="/blog?page=1">上一页</a>
<a href="/blog?page=3">下一页</a>
</nav>
筛选导航:URL 爆炸的根源#
筛选导航(faceted navigation,也叫分面导航)是电商的标配:让用户按颜色、尺码、品牌、价格区间、排序等维度筛选商品。问题在于,每一个筛选组合往往都生成一个独立 URL:
/shoes
/shoes?color=red
/shoes?color=red&size=42
/shoes?color=red&size=42&brand=nike
/shoes?color=red&size=42&brand=nike&sort=price
/shoes?size=42&color=red # 顺序不同,又一个 URL
...
# 5 个维度 × 各自多个取值 → 轻松上万个 URL
这些 URL 带来三重伤害:
- 抓取预算浪费:爬虫把大量资源花在低价值的筛选组合上,重要页面反而抓得少。
- 重复/薄内容:大量组合页内容高度相似甚至为空,拉低整站质量评价。
- 信号稀释:外链和权重分散到无数变体 URL,无法集中到规范页。
筛选页的处理策略#
处理筛选导航的关键,是先做一个判断:这个筛选组合有没有独立的搜索需求和价值?然后区别对待。
| 筛选类型 | 例子 | 处理 |
|---|---|---|
| 有搜索价值的组合 | "红色连衣裙""耐克跑鞋"——有人会这样搜 | 做成可收录的规范页(自引用 canonical,可进 sitemap) |
| 排序类 | ?sort=price、?sort=new | canonical 指向无排序版本(内容相同,仅顺序不同) |
| 多维叠加的长尾组合 | ?color=red&size=42&brand=... | noindex 或 robots 屏蔽,避免收录 |
| 跟踪/会话参数 | ?utm=、?sid= | canonical 指向干净 URL,不进 sitemap |
实务上还有几条配套手段:
- 固定参数顺序:服务端统一参数排列(如总是 color 在 size 前),避免
?a&b与?b&a产生两个 URL。 - 控制内部链接:不要在站内给那些不想被收录的筛选组合大量加内链——爬虫主要顺着内链发现 URL,少给入口本身就是一种控制。
- 对无价值筛选用可点击但不可抓取的控件:比如部分筛选用 JS 交互而非生成新 URL(但要确保有价值的组合仍有真实 URL)。
参数 URL 的控制工具#
控制参数 URL 收录有三件主要工具,各有边界,关键是别用错、别叠加冲突。它们的完整对比见 Canonical 规范标签 和 robots.txt 配置。
| 工具 | 作用 | 能否省抓取预算 | 能否阻止收录 |
|---|---|---|---|
| canonical | 声明规范版本,合并信号 | 否(仍会被抓) | 间接(合并到规范页) |
| noindex | 阻止进入索引 | 否(必须可抓才能读到) | 是(可靠) |
| robots.txt | 阻止抓取 | 是(立刻省) | 否(外链仍可能被索引) |
决策框架#
面对任何一个列表/筛选/参数 URL,按这个顺序问自己:
- 它有独立搜索价值吗?有人会专门搜它、它内容独特 → 做成规范页(自引用 canonical,进 sitemap,给内链)。
- 它只是同一内容的不同视图吗?(排序、跟踪参数、视图切换)→ canonical 指向规范版本。
- 它是无价值但需要存在的组合吗?用户要用、但不该收录 → 允许抓取 + noindex,或减少内链入口。
- 它是纯粹浪费抓取的垃圾 URL 吗?大量低质组合、爬虫陷阱 → robots.txt 屏蔽,节省抓取预算。
有独立搜索价值? → 是 → 规范页(canonical 自引用 + sitemap + 内链)
│
否
↓
同内容不同视图/排序? → 是 → canonical 指向规范版本
│
否
↓
用户需要但不该收录? → 是 → 可抓取 + noindex
│
否
↓
纯浪费抓取的组合? → 是 → robots.txt 屏蔽
常见错误#
| 错误 | 后果 | 修正 |
|---|---|---|
| 分页全部 canonical 到第 1 页 | 后续页内容不被收录 | 每页 canonical 指向自身 |
| 无限滚动无分页 URL | 首屏外内容无法被发现 | 配套可抓取分页链接 |
| 放任筛选组合全部可抓取可收录 | 抓取预算耗尽、薄内容泛滥 | 按价值分类处理 |
| robots 屏蔽 + 页面内 noindex 并用 | noindex 读不到,失效 | 二选一,不叠加 |
| 参数顺序不固定 | 同组合产生多个 URL | 服务端统一参数顺序 |
| 给无价值筛选页大量内链 | 主动制造抓取陷阱 | 控制内链入口 |
本站的列表与分页#
<a href> 可抓取,无需分页或无限滚动。每个页面 canonical 都指向自身。这正是"用简单的信息架构从根本上规避复杂收录问题"的示范。处理清单#
分页
- 每个分页 canonical 指向自身,不指向第 1 页
- 页面间有带 href 的真实分页链接
- 每个列表项有可抓取的入口链接
- 无限滚动配套可抓取分页 URL
筛选 / 参数
- 区分有搜索价值与无价值的筛选组合
- 有价值组合做成规范页(canonical 自引用 + sitemap)
- 排序/跟踪参数 canonical 指向规范版本
- 无价值组合用 noindex 或 robots 屏蔽(不叠加)
- 服务端固定参数顺序
- 控制无价值筛选页的内链入口
- 用 GSC 检查"已抓取未收录""重复"等异常
常见问题#
分页页面应该把 canonical 指向第一页吗?
不应该。每个分页(第 2 页、第 3 页……)的内容不同,应该让每一页的 canonical 指向它自己。把所有分页 canonical 到第一页是常见错误,会导致第一页之外的列表项和它们的链接不被发现、不被收录。Google 也已不再支持 rel=next/prev 作为分页指令,正确做法就是每页自引用 canonical,并保证页面间有真实的分页链接。
rel=next 和 rel=prev 还有用吗?
Google 已经在 2019 年宣布不再使用 rel=next/prev 作为索引信号,会忽略它们。你不需要为 Google 专门添加,但加上也无害,部分其他工具或浏览器仍可能利用。现在处理分页的关键是:每页 canonical 指向自身、页面间有可抓取的 a 标签分页链接、确保所有分页内容可被发现。
电商的筛选页(faceted navigation)会有什么 SEO 问题?
筛选导航会产生 URL 组合爆炸:颜色、尺码、价格、品牌、排序等条件叠加,可能生成成千上万个近似重复的 URL。这会严重浪费抓取预算、稀释规范信号、产生大量低价值薄内容页。解决思路是区分"有搜索价值的筛选组合"和"无价值的组合":前者做成可收录的规范页,后者通过 canonical、noindex 或 robots 屏蔽来控制。
用 robots.txt 屏蔽参数 URL 好还是用 noindex 好?
取决于目标。robots.txt 阻止抓取,能立刻节省抓取预算,但被屏蔽的页面 Google 读不到其中的 noindex 或 canonical,且这些 URL 仍可能因外链被索引(无摘要)。noindex 能可靠地阻止收录,但页面必须允许抓取才能被读到,无法节省抓取预算。一般原则:想彻底不收录用 noindex,想节省抓取预算用 robots.txt,两者不要对同一 URL 叠加。