做站内运营时,很容易在連結後面顺手加一串參數:投放渠道带 utm_source,分享按钮带 share_token,後台报表带 ref,列表頁带排序和篩選條件。對用戶来说這些地址打開的是同一篇文章,但在搜尋引擎眼里,它們是不同的 URL。如果不做区分,同一份内容可能被拆成很多版本參與抓取和收錄。
先把參數分成三類
1. 追踪參數
常见的有 utm_source、utm_medium、utm_campaign、gclid、fbclid、ref、from、spm 等。它們只记錄来源,不改變頁面内容,是重复 URL 的主要来源。
2. 篩選與排序參數
例如 ?color=red、?price=100-200、?sort=new。這類參數通常會改變頁面上展示的结果,可能對應真實的搜尋需求,不能一概当成垃圾處理。
3. 會话與分頁參數
PHPSESSID、sid 這類會话标识會為每個訪客生成一個新的 URL,属于需要優先清理的類型;page=2 這類分頁參數則是正常内容的一部分,一般保留。
參數 URL 多了會怎样
- 同一内容出現多個地址,搜尋引擎需要自己挑一個作為代表版本;
- 收錄量看起来變大,實际有效頁面没有增加,反而稀释了頁面信号;
- 抓取量被大量重复地址占用,新内容和真正需要更新的頁面排队更久;
- 篩選條件可以自由组合时,可能生成成百上千個近似空结果的地址。
處理顺序建议
- 内鏈和站点地图只寫干净 URL。追踪參數放在外部渠道、广告落地頁和邮件里,不要寫進站内導航、正文連結和 sitemap。
- 會话 ID 改到 Cookie。让 URL 不随訪客變化,這是最省事的做法。
- 内容相同的带參地址,用 canonical 指向無參版本。canonical 要寫绝對地址,並且目标頁面本身能正常訪問、返回 200。
- 篩選頁按质量取舍。有真實搜尋量、结果内容充實的篩選组合,可以保留並让它們自指 canonical;只是把參數随便拼出来的组合頁,可以設定 noindex,或者干脆不生成可抓取的連結。
- 谨慎使用 robots.txt 屏蔽带參地址。屏蔽抓取可以省下抓取预算,但被屏蔽的 URL 上寫的 canonical 和 noindex 也不會被讀到,容易让舊地址長期停留在索引里。
判断一個參數要不要處理,最简單的标准是:它會不會真的改變用戶在頁面上看到的主要内容?不會,就收敛到一個地址;會,就当成獨立頁面来判断质量。
怎么確認問题存在
在服務器日誌里按 URL 統計,看带參數地址的抓取占比;在收錄结果里搜尋 utm_source、ref 之類的關鍵詞,看是否有带參地址被收錄;再看後台的抓取統計,確認重复抓取是否在挤占正常頁面的空間。三步做完,基本能判断問题出在追踪參數、篩選參數還是會话參數上。
几個容易踩的坑
- 把所有带參數的地址一律 301 到無參版本,连带把有真實需求的篩選頁也砍掉;
- canonical 寫成相對路径,或者指向一個本身带參數的地址,等于没寫;
- 只改了 robots.txt,站内連結和 sitemap 里的带參地址没有同步清理;
- 以為加了 canonical 就一定會被采纳,忽略了頁面本身的内容质量和内鏈是否一致。
參數本身没有對错,問题在于同一份内容是否被拆成了多個可抓取的地址。先分類、再收敛,通常比一刀切屏蔽更稳妥。