一個頁面往往不止一個地址能打開:带 www 與不带 www、http 與 https、结尾有没有斜杠、參數顺序不同,甚至大小寫混用,都可能返回同一份内容。對用戶来说都能看,對搜尋引擎来说却是多個 URL。收錄阶段出現重复内容、權重分散、抓取次數被浪費,通常從這里開始。
先找出重复地址是從哪里来的
常见来源並不复杂,但容易漏掉:
- 协议和主机名:http 與 https,www 與非 www,带預設端口和不带端口。
- 路径细节:结尾斜杠有無、目錄大小寫、中文路径编碼方式不同。
- 參數:排序、篩選、會话 ID、跟踪參數、參數顺序變化。
- 功能頁:打印頁、分享頁、手机版獨立地址、舊版入口。
這些地址如果都返回 200,蜘蛛會分別抓取、分別判断,最後可能只選一個留下,也可能留下多個相似版本。
确定主版本,用 301 收口
先選一個主版本。判断依據可以看外鏈最多的那個、日誌里蜘蛛抓得最多的那個、sitemap 里一直声明的那個,以及用戶最常用的訪問方式。選好之後,其余版本统一做 301 永久重定向到主版本。
不建议用 302 長期代替 301,也不要用 JavaScript 跳轉或 meta refresh 来做收口。這些方式可能被当成临时處理,蜘蛛仍會保留原地址。重定向鏈也要尽量短,避免 A 跳 B、B 再跳 C。
站内連結和 sitemap 要保持一致
重定向只是兜底,真正影响判断的是站内信号。導航、面包屑、文章内鏈、分頁連結、sitemap 里出現的地址,都應该是主版本。如果一邊 301 收口,一邊内鏈還在大量指向舊地址,蜘蛛會持續發現舊 URL,收口速度會被拖慢。
canonical 可以作為补充,但不要把它当成唯一手段。頁面能 301 的,優先 301;不能 301 的,比如參數頁、打印頁,再用 canonical 指向主版本,同时確認 canonical 地址本身返回 200 且可被抓取。
几個容易忽略的细节
- 大小寫:有些服務器区分大小寫,/Page 和 /page 是两個地址;有些服務器不区分,但連結寫法不统一仍會制造多個入口。
- 结尾斜杠:/a 和 /a/ 是否都返回 200,要看服務器配置。目錄型地址通常保留一種寫法。
- 參數顺序:?a=1&b=2 與 ?b=2&a=1 内容相同,但 URL 不同。可以通過服務器或 CDN 统一參數顺序,或對無實际意义的參數做處理。
- 跟踪參數:utm、fbclid 之類參數最好在服務器端忽略,或通過 canonical 指向無參數版本,避免每個分享渠道都产生一個地址。
收口之後看什么指标
改動後不要只看收錄量。可以按顺序观察:服務器日誌里舊地址的抓取次數是否下降;新主版本的抓取和返回狀態是否稳定;索引里重复或备用版本是否减少;内鏈和 sitemap 中是否還有舊地址残留。
如果舊地址被抓取後返回 301,這是正常過程。蜘蛛需要時間重新確認,通常不會立刻完成替換。大批量修改时建议分批做,先改一组目錄或一種參數,观察日誌和索引變化後再繼續。
URL 收口的目标不是让所有地址消失,而是让搜尋引擎清楚知道哪一個地址代表這份内容。主版本稳定、内鏈一致、重定向清晰,收錄判断才會更干净。
最後提醒一句:不要為了让舊地址快速消失就返回 404 或 410,除非那些地址确實不再使用。正常做法是保留 301,让它把已有信号传递到主版本。