同一段内容,可能同时存在 http、https、带 www、不带 www、结尾带斜杠、结尾不带斜杠、大小寫混排等多個地址。對浏览器来说這是几個不同的地址,對搜尋引擎来说也是几個不同的抓取對象。變体没有收敛时,常见的结果是重复抓取、索引里留下多份、權重被拆散,甚至最终被選中的並不是你想要的版本。
常见的 URL 變体有哪些
- 协议與主机名:http 與 https、www 與裸域
- 路径寫法:结尾斜杠、大小寫、預設文件名(如 /index.html、/default.asp)
- 參數寫法:參數顺序不同、跟踪參數、會话 ID、排序與篩選參數
- 站内寫法不一致:内鏈、站点地图、分享連結各用了一個版本
這些變体里,有些只是訪問方式不同,内容完全一样;有些則會因為參數變化产生不同内容。處理前要先分清是哪一類,後面選的收敛方式也不一样。
為什么需要收敛
每個變体都是一個獨立的 URL,要單獨抓取、單獨判断。變体多了,會带来几個连鎖反應:
- 抓取预算被同類地址消耗,真正需要抓的新頁面排队更久
- 索引里出現多個近似重复的條目,規范版本可能被選错
- 站内和站外获得的連結權重被分散到多個地址上
- 收錄資料失真,排查收錄問题时容易被這些數字誤導
收敛的排查與處理顺序
- 先確認每個變体能否正常打開,内容是否一致,有没有返回错誤狀態的
- 通過索引报告或站内查询,看看哪些變体已经進了索引
- 定下一個規范地址,通常是 https 加主域名,路径寫法固定下来
- 能在服務器层跳轉的,用 301 指到規范地址
- 不方便跳轉的,在頁面里寫 canonical 指向規范地址
- 把内鏈、站点地图、canonical 三處的寫法统一成同一個地址
不同變体的處理取舍
能跳轉的優先跳轉
协议、www、尾斜杠、大小寫、預設文件名這類變体,最干净的收口方式是在服務器层做 301。跳轉發生在抓取之前,變体地址不會被当成獨立頁面反复抓取,也不需要頁面内部再声明什么。
參數類用 canonical,不必全部跳轉
跟踪參數、排序篩選參數往往會有组合膨胀的問题,全部做 301 容易产生跳轉鏈和額外负担。這類更适合让頁面自己声明規范地址,同时尽量保證站内連結不附带多余參數。如果參數确實會产生有獨立價值的内容,那就按獨立頁面来對待,而不是强行合並。
canonical 是提示,不是命令
搜尋引擎會參考 canonical,但也會结合内鏈、站点地图、跳轉等信号综合判断。所以三處寫法保持一致,比單獨寫一個 canonical 更有效。只寫 canonical、内鏈却還指向舊寫法,收敛通常會很慢。
收敛之後要看什么
改完不要指望立刻發生變化。比較合理的观察方式是看趋势:抓取到的 URL 數量是否下降、變体在索引里是否逐步减少、規范地址是不是最终被保留的那一個。如果過了一段時間變体仍在索引里,先回头检查這几件事:舊寫法是否還能直接訪問、跳轉是否可点、canonical 是否寫在正确的頁面里、内鏈是否已经更新。
同一份内容只保留一個可訪問地址,是减少重复抓取最省事的一步;跳轉负责把舊地址收口,canonical 负责表達该選谁。
URL 變体往往不是一次形成的,改版、換域名、加統計參數、換 CMS 都可能重新带出新的寫法。把地址寫法寫進建站和上线的检查清單,比事後一份份清理要省力得多。