同一篇内容,訪客從不同地址都能打開:有人從 http 進,有人從 https 進;有人複製的是带 www 的連結,也有人拿到的是不带 www 的;有的地址结尾带斜杠,有的不带。對人来说這些都能看,但站在搜尋索引的角度,它們可能是好几個不同的 URL。
常见的 URL 變体有哪些
- 协议:http://example.com/page 與 https://example.com/page
- 主机名:example.com 與 www.example.com
- 尾斜杠:/page 與 /page/
- 大小寫:/Page、/page、/PAGE,在部分服務器上會被当成不同路径
- 追踪參數:utm_source、utm_medium、fbclid 等,同一個頁面能生成無數地址
- 會话與排序參數:sessionid、sort、filter 之類
- 路径寫法:/category/page 與 /page,或者 ID 與 slug 並存的两套地址
URL 不归一會带来什么
蜘蛛的抓取有配額和节奏。同一份内容對應多個地址,它可能反复抓取這些地址,真正需要更新、需要被發現的頁面反而排到後面。索引层面也一样:内容几乎一致时,索引會自己挑一個版本留下,但這個選擇未必和你的预期一致。结果就是内鏈指向的那份可能没被留下,外鏈积累的那份反而在索引里,之後排查收錄問题时很容易對不上。
更麻烦的是統計口径。抓取日誌里同一個頁面出現多個地址,收錄數字看起来涨了,實际有效頁面並没有增加,站点地图和站長平台的資料也會互相打架。
先归一 URL,再谈 canonical
遇到重复地址,很多人第一反應是给每份都加 canonical。canonical 有用,但它只是提示,不是命令。更稳的做法是先让站点只暴露一個規范地址,再让 canonical 作為补充。
- 定下唯一形式:選 https、選带 www 或不带 www、選带尾斜杠或不带,全站统一,寫進開發規范。
- 用 301 而不是 302:把舊地址永久跳到規范地址,301 表達的是地址已经換了,302 只是临时跳轉,语义不同。
- 内鏈只指向規范地址:導航、面包屑、文章互鏈、分頁連結保持统一,不要一會儿带斜杠一會儿不带。
- 站点地图只放規范地址:sitemap 里出現非規范地址,等于又给蜘蛛递了一份副本。
- 處理參數頁:追踪參數尽量在服務端忽略或重定向;排序、篩選類參數頁按是否值得收錄分別處理。
canonical 解决的是哪一份是主版本,301 解决的是地址已经換了。两者管的事情不同,別用一個代替另一個。
上线前過一遍這些检查
- 從 http 訪問是否 301 到 https,且路径完整保留
- www 與非 www 是否只有一個能直接返回 200
- 带尾斜杠和不带尾斜杠是否只有一種返回 200
- 頁面上所有内鏈是否都指向規范地址
- sitemap、RSS、分享按钮里的地址是否统一
- 服務器是否對大小寫敏感,模板生成的連結大小寫是否一致
- 翻頁、排序、篩選參數是否會产生大量内容相同的地址
已经乱了怎么办
如果索引里已经存在多份相同内容,先別一次性大改。可以按流量和連結價值分档:有外鏈、有自然点击的舊地址優先做 301,其余低價值地址逐步收敛。改動後观察一段時間的抓取日誌,看舊地址的訪問是否下降、規范地址的抓取是否變多。索引替換需要時間,過渡期里不同工具顯示的數字可能仍不一致,這属于正常現象,不必反复改動。
URL 归一看着是技術细节,但它决定了蜘蛛把抓取配額花在哪里、索引里最终留下哪一份。把這一步做在前面,後面的收錄维護會省很多力气。