运营中常遇到這種情况:内容只寫過一次,站点却有几個地址都能把它打開。http 和 https 各一份,带 www 和不带 www 各一份,结尾加不加斜杠又能分出两份,URL 里字母大小寫再變一下,數量還會繼續翻。這些地址如果都能正常訪問,又没有被明确分出主次,搜尋引擎可能把它們当成不同頁面分別抓取,甚至分別放進索引。
先看清站点自己产生了哪些變体
不用急着改,先把變体列出来。常见的几類:
- 协议:http:// 與 https:// 同时能打開同一個頁面。多數站点做過跳轉,但跳轉是否覆盖了所有路径、是否用的 301,需要逐個確認。
- 主机名:example.com 與 www.example.com 各自能打開同样的内容。
- 结尾斜杠:/about 與 /about/ 返回一样的内容,且都是 200 狀態。
- 大小寫:/News/2024 與 /news/2024 顯示相同頁面。有的服務器区分大小寫,有的會自動轉換,行為不统一时更容易出問题。
- 預設文件:/list 與 /list/index.html 都能訪問。
- 參數:排序、篩選、追踪參數生成的大量地址。這一類處理方式不同,本文不展開,但排查时要注意它們是否混在里面,導致誤判。
為什么值得花時間统一
最直接的影响是判断變难。你在站長工具里看收錄量,數字里混着重复地址,就很难判断真實的内容規模,也不清楚哪些目錄真的被收錄了。内鏈和外鏈同时被分散到不同版本上,同一份内容收到的信号被摊薄。
另一個常见問题是 canonical 寫歪。比如頁面自己声明規范地址是带 www 的版本,而站内大部分連結指向不带 www 的版本,蜘蛛每次抓到的线索互相矛盾,反而更犹豫。canonical 是提示而不是强制指令,它必须和跳轉、内鏈、sitemap 的方向保持一致才有意义。
一致性比單点技巧更重要:跳轉、canonical、内鏈、sitemap、外鏈,最终指向的應该是同一個地址。
處理顺序
- 确定唯一的規范版本。選一個主机名和一種协议,全站统一,通常建议 https 加一個固定的主机名寫法。
- 用 301 把其他版本跳過去。协议、主机名、结尾斜杠、大小寫這几類,尽量在服務器层做 301。不要長期用 302 顶着,也不要用 JS 跳轉代替。
- 頁面 canonical 指向自己所在的規范地址。注意是“自己”,不是随手指向首頁或另一個内容相近的頁面。
- 内鏈、導航、面包屑统一使用規范地址。這一步最容易被忽略,模板里残留的一個舊連結,就會持續给蜘蛛送出错誤线索。
- sitemap 只放規范地址,不要同时提交多個版本。
- 外鏈能改的尽量改,改不動的不必强求,靠站内跳轉慢慢收敛即可。
要不要用 robots.txt 挡住變体
不建议。被 robots.txt 挡住的地址,蜘蛛看不到内容,也就看不到上面的 canonical 和跳轉關系,反而可能因為仍有外鏈存在而留在索引里,顯示成没有摘要的结果。挡住不等于消失,能跳轉就跳轉。
怎么確認處理生效
處理完之後隔一段時間再查:手動訪問不带协议的域名加路径,看是否都跳到同一地址;在站長工具里观察已收錄的地址形態是否逐渐收敛;翻日誌看蜘蛛是否還在抓舊版本。這個過程通常需要经過几次回訪周期,不會立刻反映出来。
站点規模大的话不必一次改完。先處理流量高、被抓取多的目錄,再逐步铺開,比一次性大改更容易定位問题,也方便對比改動前後的差异。