Search Console Pages 报告里出现一堆奇怪 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 canonical”,索引总数膨胀,真内容被稀释,排名信号被切散到各种变体,Googlebot 把爬取浪费在几乎一模一样的页面上。
修法:用 rel=canonical 收信号、在 URL 构造层处理营销参数、明确告诉 Google 哪些参数改内容、哪些只是 tracking。
常见原因
1. UTM 和 tracking 参数被索引
邮件营销和广告加 ?utm_source=...&utm_medium=...。用户点进来、分享 URL、博客转贴。每个带 UTM 的分享 URL 都会被发现、被索引。
怎么判断:Google 搜 site:yoursite.com inurl:utm_。有结果就说明带 UTM 的 URL 被索引了。
2. Affiliate ref 参数被索引
?ref=partner-123 用来追踪来源,但 Googlebot 当独立 URL。
怎么判断:Search Console → Pages → 对 ?ref= URL 做 URL Inspection。会看到跟干净 URL 一起被索引。
3. Filter 和 sort 参数搞笛卡尔爆炸
电商分类页带筛选:?color=red、?color=red&size=l、?color=red&size=l&sort=price。组合数指数级。
怎么判断:Search Console 里数一个分类下的不同 URL 数。上千就是 filter 在爆。
4. 分页 + filter 双重叠加
?page=2、?page=2&filter=brand、?page=2&filter=brand&sort=price。每个 filter 组合都有自己的分页树。
怎么判断:Search Console “Excluded” 报告 → “Duplicate, Google chose different canonical”——同一个 canonical 根下一大片。
5. canonical 缺失或自指向参数变体
模板没 <link rel="canonical">,Google 没法判断主版本。或者 canonical 从 request.url 构造、带上参数,参数变体就变成自己的 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。
怎么判断:检查首页 HTML 里的 anchor 标签。任何内链带 ?utm_* 都在漏。
7. 老的 “URL Parameters tool” 配置失效了
之前在 Google URL Parameters tool 里配过 ref、sort 等的处理规则。Google 2022 年废弃了这个工具。你的配置不再生效,对应的信号没了。
怎么判断:你记得配过但没用 canonical tag 替代过,那你现在在裸奔。
最短修复路径
第 1 步:参数 URL 盘点
# 从 Search Console "Pages" 导出抽样
grep -oE '\?[^"]+' search-console-export.csv | sort | uniq -c | sort -rn | head -30
把参数分两桶:tracking(utm_*、ref、gclid、fbclid)vs. content(page、sort、filter、lang)。
第 2 步:canonical 指向干净 URL
模板里 canonical 从 URL pathname 构造、去掉 query string——除非参数实质性改变内容:
// 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 页是不同内容),canonical 里就保留 ?page=2。
第 3 步:去掉内链上的 tracking 参数
审 anchor。把内链 <a href="/products/laptop?utm_source=homepage"> 改成 <a href="/products/laptop">。来源追踪改用 JS click(点击时设 UTM 等价物),不放进 href。
第 4 步:用 robots.txt 处理非内容参数的爆炸
无 SEO 价值的电商 filter URL:
User-agent: *
Disallow: /*?*sort=
Disallow: /*?*filter=
Disallow: /*?utm_
跟 canonical 配合用。注意:Disallow 阻止爬取,但外链导入的 URL 仍可能被索引——canonical 才是真正做收敛的。
第 5 步:已经被索引的烂 URL 用 Search Console “Remove URLs”
Search Console → Removals → 最严重的临时删除。长期修复必须靠 canonical + 内链清理;删除只是争取时间。
第 6 步:盯 “Duplicate, Google chose different canonical”
Search Console Pages 报告。Google 选了参数 URL 而不是你指定的当 canonical,说明你的 canonical 信号弱。加强方法:
- 99% 内链指向干净 URL。
- 确认 sitemap 只列干净 URL。
og:url和 Twitter Card URL meta 也用干净 URL。
第 7 步:观察 4-8 周
Search Console “Pages” 总数应随合并下降。干净 URL 的曝光应上升。
哪些情况可能不是你操作错了
外站带参数链你的 URL,控制不了。canonical tag 能正确处理——Google 会跟你的提示走。
容易误判的情况
误判成 duplicate content penalty。参数重复没有惩罚——这是发现和稀释问题。“修法”是合并,不是 de-index。
预防建议
- canonical 默认只用 pathname;按页面类型 opt-in 加参数。
- 内链永远不带 UTM;用 JS click handler 追踪来源。
- 每月审 Search Console Pages 报告里的参数爆炸。
- robots.txt 把 tracking 参数挡掉,做 belt-and-suspenders。
- 明确文档化:哪些参数改内容(canonical/sitemap 要带)、哪些只 tracking。
FAQ
- 参数 URL 重复会被 Google 惩罚吗? 不会——是稀释问题不是惩罚。canonical 能修。
- 参数 URL 应该 noindex 而不是 canonical 吗? 不应该——noindex 丢排名信号,canonical 合并它们。永远优先 canonical。
相关阅读
- 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