站内連結里多一個問号、结尾多一個斜杠、大小寫換一下,浏览器都能打開同一個頁面,但對蜘蛛来说,這可能是好几條不同的 URL。抓取次數是有限的,重复地址越多,真正需要被發現的頁面分到的机會就越少。
一個頁面為什么會變成多個地址
變体多數不是刻意造成的,而是模板寫法、第三方追踪工具和服務器配置叠在一起的结果。常见的可以归成三類。
參數類變体
- 追踪參數:utm_source、from、ref 之類被直接寫進源碼連結里。
- 會话與缓存參數:sessionid、sid、随机數,同一次訪問生成不同地址。
- 排序與篩選:?sort=price_desc、?color=red,组合起来能生成几十上百條。
- 站内搜尋:?s=關鍵詞,用戶搜什么就产生什么 URL。
- 分頁與视图:?p=1 與不带參數的首頁内容相同;打印頁、分享頁、评论跳轉頁各自獨立。
這些地址在浏览器里是正常功能,問题出在它們被当成連結寫進了頁面源碼,蜘蛛顺着爬就會一路展開。
格式類變体
- 大小寫不同:/Product 與 /product。
- 结尾斜杠:/about 與 /about/。
- 預設首頁寫法:/index.html、/index.php 與 /。
- 多重斜杠或路径中的冗余符号:/news//123。
- 中文或特殊字符是否统一编碼方式。
服務器往往對它們一视同仁,但 URL 字符串不同,在蜘蛛那里就是不同地址。
协议與主机名變体
- http 與 https 同时可訪問。
- 带 www 與不带 www。
- 獨立的移動域名與主站域名指向同一套内容。
- 源站域名與 CDN 域名都能直接打開頁面。
這一類通常需要在服務器层做统一跳轉,否則蜘蛛會分別建立抓取记錄。
變体多了會怎样
最直接的影响是抓取份額被摊薄:同一份内容占用了多條 URL 的額度,新頁面和深层頁面就排在後面。其次,外鏈和站内信号被拆散到不同地址上,识別主版本的成本變高。日誌也會變得难看,同一篇内容在报表里出現多次,容易把真實的抓取分布讀错。
判断标准可以很简單:同一段内容,如果有两個以上能被蜘蛛抓到的地址,就要明确選出唯一的正式地址。
怎么收敛
- 選定唯一的規范地址,把协议、主机名、路径大小寫、是否结尾斜杠都寫進站点規則。
- 在服務器层用 301 把其它變体永久跳到規范地址,避免用 302 或 JS 跳轉代替。
- 源碼里的導航、面包屑、正文内鏈、相關推荐,全部只寫規范版本,保持寫法一致。
- canonical 指向規范地址,並且與内鏈、Sitemap 中的寫法一致,不要三處各说各话。
- 功能性參數頁(篩選、排序、站内搜尋)给明确策略:限制抓取或标记 noindex,別让它們進入抓取主路径。
- 追踪參數不要出現在源碼連結里,需要統計时在点击时拼接。
- 打印頁、分享頁、分頁之間不要互相連結成环。
回头驗證
從服務器日誌里按路径聚合,看看同一篇内容是否有多個地址被高频抓取;用站内抓取工具掃一遍全站内鏈,找出仍指向非規范地址的連結;检查 Sitemap 里是否混進了带參數的 URL;再观察篩選頁和站内搜尋頁,蜘蛛是不是顺着參數一路走了下去。
這類問题不需要一次改完。先把被連結最多、被抓取最频繁的几個變体收敛掉,日誌里重复地址的占比通常就會下降。抓取總量不會因此暴涨,但會更集中地花在你希望被發現的頁面上。