為什么 URL 變体會影响收錄
搜尋引擎對 URL 的识別是字符串层面的。同一份内容如果可以通過多個地址打開,它不會自動合並,而是先当作多個候選。抓取配額被分散,權重被拆開,收錄狀態也可能一個正常一個異常。
更麻烦的是,變体之間互相内鏈、sitemap 里混着寫、canonical 各指各的,最後你自己也说不清哪個是主版本。
常见的 URL 變体有哪些
- 协议:http 與 https
- 主机名:example.com 與 www.example.com
- 尾斜杠:/page 與 /page/
- 大小寫:/Page 與 /page
- 預設文件:/ 與 /index.php、/index.html
- 參數顺序:?a=1&b=2 與 ?b=2&a=1
- 跟踪參數:?utm_source=... 等附加在正式 URL 後面
- 路径重复:/a//b、/a/./b
先找出變体,而不是先改
不要凭印象改。用工具或日誌把同一路径的不同 URL 列出来。
- 打開服務器日誌,按路径聚合,看同一路径出現了哪些 host、协议、尾斜杠寫法。
- 用 site: 或抓取工具,检查同一内容是否被多個 URL 收錄。
- 检查 sitemap、内鏈、canonical 三處指向是否一致。
- 對參數類 URL,看哪些是功能必需,哪些只是跟踪。
确定主 URL 的原則
主 URL 一旦定了,就不要频繁換。一般按這几個原則:
- 與證书、DNS 配置一致,能長期稳定提供服務的那個。
- 與站内绝大多數内鏈、sitemap 一致的那個。
- 對外分享、投放、QR Code里已经在用的那個。
如果歷史原因導致两種寫法都有大量外鏈,選外鏈更多、更自然的那個作為主版本。
用三层動作把變体收拢
第一层:服務端跳轉
對非主版本做 301 永久跳轉,指向主 URL。http 到 https、非 www 到 www、去尾斜杠到加尾斜杠,都走這一层。跳轉要在服務端完成,不要用 JS 或 meta refresh。
第二层:頁面标注
每個頁面寫自指的 canonical,指向主 URL。注意 canonical 是建议不是命令,如果站内跳轉和 canonical 指向不一致,搜尋引擎會自己判断,结果不可控。
第三层:入口统一
sitemap、内鏈、分頁、hreflang、结构化資料里的 URL 全部換成主版本。這一步最容易被漏掉,但恰恰是让搜尋引擎確認口径的關键。
跳轉、canonical、内鏈三者指向一致时,URL 归一才算完成;只做其中一項,往往還會留下變体。
參數類 URL 怎么處理
跟踪參數、排序參數、篩選參數要分開看。
- 跟踪參數:用 canonical 指回無參數版本,同时在站長工具里配置忽略參數。
- 排序、篩選:如果内容确實不同且用戶會搜到,可以考虑保留;如果只是同一批内容的重新排列,用 canonical 或 robots 處理。
- 分頁參數:保留可抓取的路径,別用 canonical 把第二頁指回第一頁。
判断标准很简單:這個參數 URL 打開後,用戶看到的内容和主 URL 是否實质相同。
改完怎么看效果
- 先看跳轉是否生效,用 curl -I 或浏览器開發者工具確認狀態碼是 301。
- 再看 canonical 是否自指且與跳轉目标一致。
- 观察日誌里非主版本的抓取是否逐渐减少,主版本抓取是否增加。
- 在索引覆盖报告里看重复類、已排除類的數量變化,但不要指望几天内归零。
如果跳轉鏈出現多跳,比如 http 非 www 跳到 https 非 www 再跳到 https www,尽量合並成一跳,减少抓取损耗。
几個容易踩的坑
- 用 302 做長期归一,搜尋引擎可能不传递權重,也不確認主版本。
- 跳轉目标又指向一個變体,形成循环。
- 只在首頁做跳轉,内頁没有覆盖。
- canonical 指向 404 或重定向 URL。
- sitemap 里同时提交多個變体,等于主動告诉搜尋引擎“這些都要抓”。
總结一句:URL 归一不是一次性的技術動作,而是把“同一個頁面只有一個正式地址”這件事在服務端、頁面标注和入口三處對齐。對齐之後再看收錄,很多“收不進去”或“重复收錄”的困惑會少一大半。