同一個頁面,往往可以通過不止一個地址打開:带 www 和不带 www、http 和 https、结尾有没有斜杠、字母大小寫不同、甚至多一段 index.html。如果服務器對這些地址都正常返回 200,搜尋引擎就有理由把它們当成不同頁面,分別抓取、分別收錄。结果就是同一個内容在索引里出現多份,标题和摘要互相竞争,站内站外的信号也被分散。
先判断:是真變体,還是本来就不同的頁面
不是所有看起来相似的 URL 都属于變体。带篩選參數的列表頁、分頁的後續頁碼、真正面向不同語言或地区的版本,都是獨立頁面,不该强行合並。判断标准是内容本身:正文、頁面标题、主要结构是否基本一致。只有当几個地址指向的是同一份内容时,才谈得上收敛。
常见的 URL 變体清單
- 协议不同:http 與 https 同时可訪問
- 主机名不同:www 與非 www 都能打開
- 尾斜杠不同:/about 與 /about/
- 大小寫不同:/About 與 /about
- 預設文档:/about/ 與 /about/index.html
- 顯式端口:example.com:443 與 example.com
- 參數顺序與追踪參數:同一路径挂上不同排列的查询串
- URL 编碼寫法:同一字符的不同轉义形式
它們為什么會各自被收錄
常见原因有几類:服務器没有做跳轉,任意變体都能拿到 200;站内連結、導航、站点地图混用了不同寫法;頁面本身允许多地址訪問,canonical 只寫了一個地址;CDN 或反向代理對 host 的判断不一致,回源後仍返回正常頁面。對爬虫来说,只要地址能正常返回内容,它就可能抓取並尝试索引。
核對顺序
- 先選定一個規范形式,一次决定、長期不改:通常是 https,加上固定選擇 www 或非 www,路径统一為小寫,並统一是否带尾斜杠。
- 在服務器层面 301 到規范形式,而不是只靠 canonical 兜底。跳轉是给爬虫最直接的信号。
- 检查跳轉鏈,避免“變体 → 另一個變体 → 規范”的多跳,尽量一次到位,减少抓取浪費。
- 统一站内寫法:導航、面包屑、正文内鏈、站点地图、RSS、分享按钮、广告落地頁都使用規范地址。
- canonical 寫成規范地址本身(自引用),其余仍可訪問的變体頁面在條件允许时指向規范地址。
- 检查 CDN、反向代理與负载均衡的 host 判断,確認非規范 host 不會回源出 200 頁面。
- 观察實际收錄地址:用 site 查询和抓取工具看索引里留下的是哪個形式,確認收敛是否在推進。
收敛之後要注意什么
- 已收錄的舊變体不會立刻消失,索引更新需要時間,不必频繁改動策略。
- 如果舊變体還有外鏈,301 能把信号传递到規范地址,通常比直接返回 404 更平滑。
- 不要用 canonical、robots 限制、301 同时去解决同一件事,多個信号容易互相冲突。
- 參數類變体優先在服務器或爬虫規則层面處理,比逐頁寫标簽更省事。
URL 變体的核心不是“让搜尋引擎替你選一個”,而是服務器和站内連結只提供一個。你给出的信号越乱,索引里的结果越不确定。
小结
遇到同一頁面多個地址被分別收錄,先確認内容是否真的一致,再選定唯一規范形式,用 301、内鏈和 canonical 逐步收敛。顺序上,服務器跳轉優先于标簽提示,站内统一優先于事後清理。收敛完成後给索引留出更新時間,再用收錄地址分布来驗證。