Google Search Console 的 Page indexing 报告(Indexing → Pages,就是以前那个 “Index Coverage”)里冒出一堆你根本没打算发布的 URL:/products/laptop?utm_source=newsletter、/products/laptop?ref=affiliate-42、/products/laptop?sort=price&page=2&filter=brand-x。每个组合都被当成独立 URL。有的落到 Duplicate without user-selected canonical,有的落到 Alternate page with proper canonical tag,索引总数膨胀,排名信号被切散到各种变体上,Googlebot 把爬取预算浪费在几乎一模一样的页面上。
最快的修法:让每个页面都输出一个指向干净、无参数 URL(只保留 path)的 rel="canonical",并且别再在自己的内链里塞 tracking 参数。这一套组合拳就能把重复收敛掉。下面是细节,以及对付那些已经被索引的 URL 的清理办法。
先把定性说清楚:这不是惩罚。Google 没有”参数重复”这种惩罚机制——Duplicate without user-selected canonical 是一个合并/稀释问题,修法是告诉 Google 哪个 URL 是主版本,而不是删页面。另外要注意,Google 已经在 2022 年 4 月 28 日下线了 URL Parameters tool;你要是以前靠它,那个信号现在没了,替代品就是 rel="canonical"。
先判断你属于哪一桶
改任何东西之前先诊断。搜一下 site:yoursite.com inurl:utm_(或 inurl:ref=、inurl:sort=),打开 Page indexing 报告。
| Search Console 里的症状 | 最可能的原因 | 主要修法 |
|---|---|---|
一堆 ?utm_* / ?ref= / ?gclid= URL 被索引 | tracking 参数被外部分享或被你自己的内链带上 | canonical 指向干净 URL + 内链去掉参数 |
一个分类下上千条 ?color=&size=&sort= 组合 | faceted navigation 笛卡尔爆炸 | canonical 指向干净 URL;低价值 facet 挡掉爬取 |
Duplicate, Google chose different canonical than user | 你的 canonical 信号弱/不一致 | 内链 + sitemap + og:url 统一指向干净 URL |
| View Source 里参数 URL 把自己当 canonical | canonical 从 request.url 构造(带了 query) | canonical 只用 pathname 构造 |
页面上根本没有 <link rel="canonical"> | 模板缺这个标签 | 加一个去掉参数的自指 canonical |
常见原因
1. UTM 和 tracking 参数被索引
邮件营销和广告会加 ?utm_source=...&utm_medium=...。用户点进来、分享 URL、被博客转贴,每个带参数的变体都会被发现、被索引。
怎么判断:Google 搜 site:yoursite.com inurl:utm_。有结果就说明带 UTM 的 URL 被索引了。
2. Affiliate ref 参数被索引
?ref=partner-123 本意是追踪来源,但 Googlebot 把它当独立 URL。
怎么判断:Search Console → 对一个 ?ref= URL 做 URL Inspection。它会跟干净 URL 一起显示为已索引。
3. Filter 和 sort 参数搞出笛卡尔爆炸
电商分类页带筛选:?color=red、?color=red&size=l、?color=red&size=l&sort=price。组合数是指数级的。Google 把这叫 faceted navigation,并明确把它列为最常见的爬取膨胀来源之一。
怎么判断:在 Page indexing 报告里数一个分类下的不同 URL 数。上千就是 filter 在爆。
4. 分页 + filter 双重叠加
?page=2、?page=2&filter=brand、?page=2&filter=brand&sort=price。每个 filter 组合又长出自己的一棵分页树。
怎么判断:Page indexing 报告里看 Duplicate, Google chose different canonical than user 这一项,很多行共用同一个 canonical 根。
5. canonical 缺失,或者自指向参数变体
模板没有 <link rel="canonical">,Google 只能自己猜主版本。或者 canonical 从 request.url 构造、带上了 query string,参数变体就把自己当成了 canonical。
怎么判断:view source /products/laptop?ref=foo。canonical 如果是 https://yoursite.com/products/laptop?ref=foo,那是自己指自己;如果完全缺失,Google 就靠猜。
6. 内链自带 tracking 参数
首页用 /products/laptop?utm_source=homepage 链产品,想做埋点。结果 Googlebot 看到的目标就是带参数的 URL。Google 明确警告:不要在内链里带 session ID、tracking code 这类临时参数,原因正在于此。
怎么判断:检查渲染后首页 HTML 里的 anchor 标签。任何带 ?utm_* 的内链都在漏。
7. 还在假设老的 “URL Parameters tool” 配置生效
你之前在 Google URL Parameters tool 里配过 ref、sort 等的处理规则。Google 已于 2022 年 4 月 28 日 下线该工具。那份配置现在毫无作用,它提供的信号也没了。
怎么判断:你记得配过,但从没用 rel="canonical" 替代过——那你现在就是在裸奔。
最短修复路径
第 1 步:盘点参数 URL
# 从 Search Console "Pages" 导出里抽样
grep -oE '\?[^"]+' search-console-export.csv | sort | uniq -c | sort -rn | head -30
把参数分两桶:tracking(utm_*、ref、gclid、fbclid、msclkid)和 content(page、sort、filter、lang)。tracking 参数永远不配拥有自己的索引 URL;部分 content 参数则配。
第 2 步:canonical 指向干净 URL
模板里 canonical 只用 URL pathname 构造、去掉 query string——除非某个参数实质性改变了内容。这正是 Google 的建议:“use the URL with the query parameter omitted as the canonical URL.”
// pages/products/[slug].astro
const url = new URL(Astro.request.url);
const canonical = `https://yoursite.com${url.pathname}`; // 不带 query
---
<link rel="canonical" href={canonical}>
分页是真内容的地方(第 2 页列的是不同产品),就在那条 URL 的 canonical 里保留 ?page=2,让每页自指。任何真正改变页面的参数(?lang=de,或换了主图和价格的产品变体)也照此处理。
第 3 步:去掉内链上的 tracking 参数
审你的 anchor 标签。把内链 <a href="/products/laptop?utm_source=homepage"> 改成 <a href="/products/laptop">。点击来源改用 JavaScript 在 click 时记录(或用 first-party 事件),别塞进 href。一致性是 canonical 选择里最大的杠杆——内链、sitemap、og:url、rel="canonical" 都指向同一个 URL 时,Google 会给你回报。
第 4 步:用 robots.txt 管 faceted-navigation 的爬取——是管爬取,不是做 canonicalization
对没有 SEO 价值的电商 filter/sort URL,你可以干脆不让 Googlebot 爬:
User-agent: *
Disallow: /*?*sort=
Disallow: /*?*filter=
Disallow: /*utm_
有两个常把人坑住的点:
- 别用 robots.txt 做 canonicalization。 Google 说得很直白:被 robots.txt
Disallow的 URL 如果有别人链它,仍然可能被索引;而且因为 Googlebot 读不到页面内容,它也读不到你的 canonical tag。所以 robots.txt 和rel="canonical"解决的是两件事——robots.txt 在垃圾 facet 上省爬取预算,canonical 收敛排名信号。还需要 Google 读到的 canonical 信号的 URL,别去Disallow它。 - 如果你确实想让 faceted URL 可被索引,Google 的技术要求是:用标准的
&做分隔符、保持一致的 filter 顺序、空筛选组合返回404。
不想直接挡爬取的话,可以给 filter 链接加 rel="nofollow"、给干净 URL 加 rel="canonical";按 Google 的说法,这会随时间降低非 canonical 变体的爬取量。
第 5 步:已被索引的烂 URL 用 Removals 工具清
Search Console → Removals → Temporary removals,挑最严重的删。这只是把它从搜索结果里藏约 6 个月;长期修复必须靠 canonical 加内链清理。删除只是争取时间,不是解决方案。
第 6 步:盯 “Duplicate, Google chose different canonical than user”
在 Page indexing 报告里,如果 Google 选了某个参数 URL 当 canonical 而不是你指定的那个,说明你的信号弱或互相矛盾。加强方法:
- 几乎所有内链都指向干净 URL。
- 确认 sitemap 只列干净 URL(sitemap 是较弱的 canonical 信号,但起码不能跟
rel="canonical"打架)。 og:url和 Twitter Card URL meta 也用干净 URL。- 别给出互相矛盾的信号——别让 redirect、sitemap、canonical 指向三个不同的 URL。
第 7 步:观察 4–8 周
canonical 重新处理一般要 2–6 周(高权重站更快)。Page indexing 里的”已索引”总数应随合并下降,Performance 报告里干净 URL 的曝光应上升。再跑一遍开头那条 site: 查询,确认参数 URL 在掉出去。
怎么确认修好了
- view source
/products/laptop?ref=foo——canonical 必须是https://yoursite.com/products/laptop,而不是那个参数 URL。 - 对一个参数 URL 做 URL Inspection——“User-declared canonical” 应是干净 URL,时间长了 “Google-selected canonical” 也应跟它对上。
site:yoursite.com inurl:utm_的数量往零走。- Page indexing 报告里
Duplicate without user-selected canonical的数量逐周下降。
哪些情况不是你操作错了
外站带参数链你的 URL,你控制不了。canonical tag 能正确处理——Google 会跟你的提示走,把链接权重收敛到干净 URL 上。
容易误判的情况
误判成 duplicate content penalty。参数重复没有惩罚——这是发现和稀释问题。修法是合并,不是 de-index;在这儿伸手去用 noindex 反而会害你(见 FAQ)。
预防建议
- canonical 默认只用 pathname;只对真正改变内容的页面类型按需 opt-in 加参数。
- 内链永远不带 UTM;来源追踪用 JS click handler 或 first-party 事件。
- 每月审一遍 Page indexing 报告里的参数爆炸。
- robots.txt 把垃圾 facet 挡掉以保护爬取预算——但收敛机制始终是 canonical。
- 明确文档化:哪些参数改内容(canonical 和 sitemap 要带)、哪些只是 tracking。
FAQ
- 参数 URL 重复会被 Google 惩罚吗? 不会。没有参数重复惩罚这回事。这是合并问题,
rel="canonical"能修。 - 参数 URL 应该用
noindex而不是 canonical 吗? 不应该。noindex会把 URL 丢掉、连同它的排名信号一起丢;canonical 是把信号合并到干净 URL 上。优先 canonical。noindex留给那些永远不该排名的页面(站内搜索结果、致谢页)。 - 我直接在 robots.txt 里把参数挡掉不行吗? robots.txt 只挡爬取,被挡的 URL 如果有外链仍可能被索引——而且 Googlebot 抓不到它,就永远看不到你的 canonical。robots.txt 只该用来在没价值的 facet 上省爬取预算,绝不能当 canonicalization 的手段。
- URL Parameters tool 为什么没了? Google 在 2022 年 4 月 28 日下线了它,因为它的爬虫已经能很好地猜参数意图(只有约 1% 的配置真有用)。改用
rel="canonical"、干净内链,以及 robots.txt 做爬取控制。 - 分页显示成重复——第 2 页该 canonical 到第 1 页吗? 不该。如果第 2 页列的是不同产品,那它就是独立内容,
?page=2应该自指 canonical。把所有分页都 canonical 到第 1 页会让深层产品对 Google 隐身。
相关阅读
- Duplicate without User-Selected Canonical
- canonical 配置错误
- Alternate Page with Canonical
- 分页页面设了 noindex,follow,深层文章悄悄掉出索引
- URL Removed 工具用混乱了
- 页面被索引但零曝光
- Search Console Pages 报告下跌
- Sitemap 提交了但 URL 还是没被索引
- Google 没发现你的站内链接
标签: #SEO #排查 #收录 #Search Console #Canonical #query-parameters