做收錄核對时经常碰到一種情况:某個頁面看起来已经被收錄,但站内明明只有一個頁面,索引里却能對應出好几個 URL。多數时候不是内容出了問题,而是同一個頁面在對外暴露时用了不止一種地址寫法。
同一個頁面為什么會有多個地址
搜尋引擎是按 URL 分別抓取、分別入库的。只要地址字符串不同,系統就會先把它們当作可能不同的頁面来處理,之後才谈得上判断内容是否重复、要不要合並。URL 归一要做的,就是把指向同一份内容的多種寫法,收敛到一個主地址上。
常见的几類等價變体
主机與协议层面
- http 與 https 並存,頁面两邊都能打開;
- 带 www 與不带 www 的域名指向同一套内容;
- 主域、备用域、舊域名同时可訪問;
- 預設端口是否顯式寫出,例如 :80、:443。
路径與參數层面
- 结尾斜杠:/page 與 /page/;
- 目錄預設文件:/a/ 與 /a/index.html、/a/index.php;
- 路径大小寫:/Page 與 /page,服務器区分大小寫时這是两個真實地址;
- 參數顺序與冗余參數:?a=1&b=2 與 ?b=2&a=1,以及 utm 等跟踪參數;
- URL 编碼差异:中文路径全编碼與部分编碼、空格的 %20 與加号。
先做一轮 URL 盘点
- 從服務器訪問日誌或抓取记錄里,按“路径 + 參數”把同一份内容的不同寫法归成一组;
- 對每组标注三件事:站内連結用的是哪種寫法、sitemap 里放的是哪種、索引里出現的是哪種;
- 選一個主地址。優先選站内已经广泛引用、外鏈較多、语义清晰的寫法,而不是凭個人偏好重選;
- 把剩下的變体分類:哪些靠 301 跳轉、哪些只需要改内鏈、哪些留在 canonical 里声明。
主地址定下来之後怎么收敛
- 301 跳轉:等價變体统一跳到主地址,避免長期用 302 顶替,跳轉方向要一步到位,不要串成多級;
- canonical 声明:頁面内寫的主地址要和 301 指向同一個,两者方向互相打架时先修一致;
- 内鏈统一:導航、面包屑、分頁、正文連結、分享按钮都改成主地址,站内信号不一致,收敛會很慢;
- sitemap 只放主地址:把等價變体一並提交,等于主動扩大分散;
- 參數類變体:跟踪參數優先從内鏈上清掉,剩下的再靠頁面声明處理。
核對时容易踩的几個坑
- 只看總量數字,不看具体 URL 分布。归一的成效体現在“同一份内容對應的地址數變少”,而不是某天突然多出多少條;
- 把有獨立價值的頁面誤当成變体合並。判断等價前先確認内容主体是否真的相同;
- 假设路径大小寫不敏感。很多服務器上是敏感的,/Page 和 /page 是两個地址;
- 指望用 robots.txt 收敛地址。屏蔽抓取和地址归一是两件事,屏蔽反而可能让變体停留在索引里。
归一不是删頁面,而是让同一份内容只用一個地址被引用、被抓取。
處理完站内信号後,索引里的變化通常需要一段時間才顯現。核對时可以分两步:先確認 301、canonical、内鏈、sitemap 是否已经指向同一個主地址,再观察變体地址是否逐步减少。如果發現某個變体長期不消失,先回头看它的入站連結和跳轉鏈,而不是反复重复提交。