同一個頁面,因為 www、协议、大小寫、末尾斜杠、追踪參數的不同,可能被服務器当成好几個不同的地址。對訪客来说只是換個入口,對搜尋引擎来说却是几份内容相似的頁面,抓取和判断都會變得犹豫。這一篇讲的是怎么把地址收敛成一份,属于站点运营里偏基础但很容易被忽略的一环。
先弄清楚重复地址從哪来
多數站点的重复並不是有人刻意複製,而是配置和日常操作留下的痕迹。
- 带 www 和不带 www 的域名同时能打開,且都返回 200。
- http 與 https 都能訪問,没有做协议层的强制跳轉。
- URL 大小寫不敏感,/About 和 /about 都能命中同一個頁面。
- 目錄地址末尾斜杠不一致,/news 與 /news/ 被视為两條。
- 分頁、排序、篩選參數被抓到,生成大量近似地址。
- 投放連結带 utm 等追踪參數,被抓取後当成獨立頁面。
统一入口:把首選地址定下来
第一步不是改頁面,而是决定“哪個地址是官方的”,然後让其他寫法都跳到它。常见做法是選一個主域形態(例如统一带 www 或统一不带),统一使用 https,全站連結、站点地图、外鏈尽量只寫這一個形態。
跳轉要用 301,並且一跳到底,不要 http 跳到 https、再跳到 www、再跳到带斜杠的版本。层层接力會拖慢响應,也让蜘蛛多绕几圈。
服務器层與頁面层分工
- 服務器层负责:域名、协议、非規范形態的 301 跳轉。
- 頁面层负责:canonical 标簽,声明目前頁面的規范地址。
- 两者说法要一致,服務器跳到 A、canonical 却寫 B,等于给出两個答案。
canonical 的寫法與常见誤区
canonical 是建议而不是命令,它的作用是当重复难以完全避免时,告诉搜尋引擎你希望保留哪一條。寫的时候注意几点:用绝對地址;寫目前頁面自己的規范地址,而不是跳轉目标的另一個地址;不要全站所有頁面都指向首頁,那會让内容頁失去自己的身份;不要用 canonical 跨站指向別人的域名。
如果某個參數頁确實需要保留(例如篩選组合有稳定訪問),可以给它獨立的标题和描述;如果只是临时排序,宁可让它保持可訪問但不進入站点地图,也不要一邊保留一堆入口一邊用 canonical 硬指回列表頁。
一次可执行的收敛步骤
- 抓一份全站 URL 清單,来自站点地图和訪問日誌,合並去重。
- 把清單按域名、协议、末尾斜杠、參數分组,找出同一内容的多份寫法。
- 确定唯一規范形態,配置服務器 301,逐條測試跳轉鏈長度。
- 检查頁面内鏈、導航、面包屑,把非規范寫法改掉。
- 补全 canonical,並抽查關键栏目頁與詳情頁。
- 更新站点地图,只保留規范地址。
- 观察一段時間的日誌,看非規范地址的抓取是否下降。
驗證與長期维護
改完之後用带和不带的域名分別訪問几個頁面,確認最终都落到同一個地址;查看源代碼確認 canonical 與目前地址一致;在搜尋资源平台的工具里检查規范地址的识別结果。之後把“新頁面發布时使用哪個域名形態”寫進上线清單,比事後统一要省力得多。
規范化的目标不是把地址變少,而是让每個内容只對應一個明确身份。地址越干净,後續的日誌分析、抓取統計、内容复审都會更好做。
這件事没有一次做完的说法。新增栏目、換域名、加 CDN、上投放,都可能重新引入重复地址。把它当成日常巡检的一個固定項,比等到發現問题再回头查要轻松。