同一個頁面,如果存在多個可訪問的地址,蜘蛛和用戶就會在不同 URL 之間来回切換。對站点来说,這不算致命問题,但會分散連結權重、增加抓取消耗,也让統計口径變得混乱。URL 規范這件事不复杂,难在坚持,下面按顺序過一遍。
同一頁面常见的多種地址形態
- 协议與主机名不一致:http 與 https 並存,带 www 與不带 www 同时可訪問。
- 路径细节不一致:结尾斜杠有無、路径大小寫不同、末尾挂一個 index.html 或 index.php。
- 參數拼接:utm_source 等追踪參數、排序與篩選參數、會话 ID、翻頁參數。
- 锚点與编碼:带 #锚点 的地址被当成獨立 URL,中文路径未做统一编碼。
這些地址如果都能返回 200,就等于给同一份内容發了好几張身份證。
一步一步做归一
- 先定基准:确定唯一的主机名(带不带 www)、唯一的协议(https)、唯一的路径寫法規則(是否保留结尾斜杠)。選定後寫進团队文档,別每次临时决定。
- 全站掃描:用爬虫工具或服務器日誌導出可訪問 URL,按去掉參數後的路径分组,找出指向同一内容的多個地址。
- 非基准地址做 301:统一跳到基准版本,且一步到位,不要中間再跳一站。
- 站内連結同步改成基准寫法:菜單、面包屑、正文内鏈、分頁連結、RSS 都算在内。
- 站点地图只放基准地址,不要再把带參數的版本一並提交。
- 检查 canonical:自引用且指向基准地址,避免指向一個本身會跳轉的地址。
canonical 使用中的几個坑
不要和 301 互相矛盾
如果 A 已经 301 到 B,A 頁面上的 canonical 却寫回 A,等于给蜘蛛两個相反的信号。二選一,保持一致。
不要跨頁誤标
把列表頁的每一頁都标成 canonical 指向第一頁,是分頁场景里的常见做法。這會让後續頁面的内容难以被單獨理解,需要根據實际需要判断,必要时保留自引用。
不要在 canonical 里塞會變的參數
canonical 指向的地址本身如果带排序參數,等于没有统一。
參數 URL 的處理思路
先分清哪些參數會改變頁面的主要内容,哪些只是展示方式。篩選、排序、追踪、會话類參數大多属于後者,可以在服務器或 CDN 层面统一跳轉到無參數版本;如果無法跳轉,可以在 robots.txt 里屏蔽抓取,或在站長工具中設定參數處理規則。需要注意的是,屏蔽的是抓取而不是索引,被外部連結引用的參數地址仍可能出現在结果里,所以規范标簽最好一起用上。
改完之後怎么看效果
- 随机抽查各栏目頁面,確認只有基准地址返回 200。
- 查看日誌中蜘蛛訪問的 URL 形態,看带參數、带 index.html 的請求是否在减少。
- 在搜尋平台的工具里核對已收錄地址與站点地图提交的地址是否大体一致。
- 复查内鏈,确保没有頁面還在鏈向舊的寫法。
URL 規范不是一次性任務。模板改一次、活動頁加一次參數、編輯器自動补一次斜杠,都可能让老問题重新出現。把检查频率固定下来,比一次做得完美更管用。
归根结底,目标只有一個:让每份内容都只有一個正式地址,其余寫法都能干净地指向它。做到了,抓取、統計和後續的改版都會省心不少。