站内頁面本身没什么問题,但用 site 查询或在索引报告里翻几頁,會看到一批带 utm_source、from、spm 這類參數的地址。它們和主地址的内容几乎一样,只是被不同渠道的連結带出来的。同一内容出現多條索引地址,一方面让索引頁數看起来虚高,另一方面也會分散内鏈和權重信号。
參數 URL 是怎么被蜘蛛抓到的
绝大多數带參數的地址不是你自己提交的,而是從外部進来的:广告投放、社交分享、邮件簽名、合作方轉载、站内自動生成的分享連結。蜘蛛顺着這些入口抓到參數地址後,如果頁面上没有明确的規范信号,它就可能把參數地址当成一個獨立 URL 處理。
另一部分来自站内。篩選、排序、分頁、打印這些功能本身就會生成參數地址,如果這類連結在列表頁和詳情頁里大量出現,蜘蛛會顺着它們一路往里走。
先分三類,再决定怎么處理
- 纯跟踪參數:utm 系列、gclid、fbclid、spm、from、ref 等,只记錄来源,不改變頁面内容。這類地址應当统一归到無參數版本。
- 會改變内容的參數:篩選、排序、分頁、語言、地区。它們可能是獨立頁面,也可能只是同一頁面的不同视图,需要逐個判断是否有獨立的搜尋價值。
- 功能型參數:登入回跳、临时 token、session id。這類地址對用戶和蜘蛛都没有意义,通常可以在服務端就避免寫進連結。
處理顺序:從規范信号開始,而不是先封禁
很多人第一反應是在 robots.txt 里寫一條規則,把带問号的地址全挡掉。這样做的問题在于,蜘蛛被挡住之後就看不到頁面上的 canonical 和 noindex,已经進索引的地址反而更难清理。
- 保證每個參數地址都能輸出正确的 canonical。無參數版本自己指向自己,带跟踪參數的版本指向無參數版本。注意是服務端輸出,不要靠前端脚本後补。
- 统一站内連結的寫法。列表頁、面包屑、相關推荐里的連結都用干净地址,分享按钮也尽量避免把參數寫進可抓取的連結。
- 對確認無價值的參數地址使用 noindex,meta 标簽或 HTTP 响應头都可以。前提是頁面能被抓取,否則規則不會被讀到。
- 外部渠道的參數尽量收敛。如果同一個活動同时用了五六種參數寫法,可以统一成一套,减少需要處理的 URL 變体數量。
- 已经進索引的地址,靠 canonical 慢慢收敛。不建议為了清理參數地址而大規模改動 URL 结构,改動本身带来的波動往往比參數地址更大。
几個容易踩的坑
- canonical 由模板動態生成,结果把带參數的目前地址寫成了規范地址,等于自己承認這是主副本。
- canonical 和 noindex 同时出現在一個參數地址上,信号互相打架,蜘蛛的取舍不一定符合预期。
- 把篩選參數当成纯跟踪參數處理。篩選结果如果确實是用戶會搜的内容,一刀切 noindex 可能损失一部分入口。
- 在 robots.txt 里用通配符挡住所有带問号的地址,顺带把分頁和語言版本也挡住了。
怎么驗證有没有效果
看三個地方:索引报告里带參數的地址數量有没有缓慢下降;日誌里參數地址的抓取次數是否减少;無參數版本的主地址抓取是否更集中。這個過程通常以周為單位,前几天没變化属于正常。如果连續几周都没有動静,再回头检查 canonical 是否真的輸出正确、noindex 是否被 CDN 或缓存层覆盖。
參數地址本身不是错誤,問题在于同一個内容被拆成了多條索引记錄。先让規范信号清晰,再考虑封禁和清理,顺序反過来往往會绕遠路。