在蜘蛛眼里,URL 首先是一串字符串,而不是“這個頁面”。所以当同一篇内容在網上存在好几個地址时,蜘蛛不會自動帮你合並——它會分別排队、分別抓取,把原本可以集中在一個地址上的抓取次數和站内信号摊薄。
重复 URL 通常從哪几個地方冒出来
- 协议與主机名:http 與 https、带 www 與不带 www 同时可訪問,且互相之間没有跳轉。
- 大小寫:/About/Us 和 /about/us 在多數服務器上會被当成两個不同路径。
- 结尾斜杠:/list 與 /list/ 返回同一份内容。
- 預設首頁文件:/index.php、/index.html、/ 各自返回一次 200。
- 參數顺序與無用參數:?a=1&b=2 與 ?b=2&a=1;跟踪參數、會话 ID、来源标记。
- 排序與视图參數:按時間排序、按價格排序、打印頁、纯文本頁。
這些形態單獨看都不致命,但如果站内連結、Sitemap、canonical 各用一套寫法,蜘蛛拿到的就是互相矛盾的信号。
為什么值得花時間收拾
一是抓取次數分散。同一個頁面的多個地址都要抓一次,服務器也要多處理几次請求,對资源有限的小站不划算。二是信号分散。外鏈、内鏈、分享連結如果指向不同形態,頁面很难形成一個清晰的“主地址”。三是分析失真:日誌里的 URL 形態太多,你會誤判哪些頁面真的被抓得少。四是维護成本,改版时改了規范形式,舊形態的跳轉没跟上,就會出現新的重复。
處理顺序:先定規范,再统一,最後收敛
- 先确定唯一規范形式:選一個协议、一個主机名(www 或非 www)、统一小寫、统一是否带结尾斜杠。定了就不再改。
- 站内所有出口统一:導航、列表、正文内鏈、分頁、Sitemap、RSS、站内搜尋的跳轉地址,全部按規范形式生成。這一步比做跳轉更重要,因為蜘蛛主要是顺着連結走的。
- 其他形式做 301:舊域名、舊路径、大寫地址、带預設文件名的地址,一次性永久跳轉到規范地址。避免 302 換成 301、避免跳轉鏈一串接一串。
- 無法跳轉的用 canonical:跟踪參數、排序參數這類不能直接 301 的,用規范連結标簽声明主地址,同时尽量別在站内大量暴露這些參數連結。
- 核對 Sitemap:Sitemap 里只放規范 URL,不放參數版、也不放被跳轉的舊地址,否則等于自己制造矛盾。
- 驗證:抽查核心頁面的响應,看跳轉是否一步到位、狀態碼是不是 301、返回内容是不是規范頁。
几個常见坑
- canonical 指向的地址本身被 noindex 或返回 404,等于把信号指向空處。
- Sitemap 提交的是 A 形態,内鏈用的是 B 形態,蜘蛛两邊都要抓。
- CDN 或缓存层把大小寫不同的請求分別缓存,導致同一内容有多份缓存。
- 跳轉鏈過長,A→B→C→D,每次都要多一個往返。
- 參數頁互相 canonical,最後谁也说不清主地址是谁。
怎么確認自己做對了
- 從服務器日誌里按路径形態筛一遍,看是否還有大寫、双斜杠、带 index 的請求被大量抓取。
- 随机抽 10 個核心頁面,手動把地址改成“错誤形態”,看是否一步 301 到規范地址。
- 對比 Sitemap 里的 URL 和頁面内鏈的 URL,两者應完全一致。
- 留意新上线的功能:分頁、分享、導购參數最容易带進新的重复形態。
URL 規范化不是一次性的整理,而是一條持續维護的底线:只要站点還在加功能、改结构,新的重复地址就會不断冒出来。