服務器上明明只有一份内容,蜘蛛看到的却可能是好几個 URL:带大寫字母的、结尾多一個斜杠的、挂着預設參數的。這些變体一旦同时出現在内鏈、導航或 Sitemap 里,抓取請求就會被拆散。日誌里看着抓取量不低,實际被完整覆盖的頁面却没增加多少。
一、重复入口通常從哪来
1. 大小寫混用
在区分大小寫的服務器环境下,/Article/1001 與 /article/1001 是两個不同路径,可能返回两份内容,也可能一個正常一個 404。連結由編輯手工填寫、後台自動拼接、舊版程序生成时,很容易混用。
2. 末尾斜杠差异
栏目頁常寫成 /news,詳情頁寫成 /news/2024/,模板里再补一個斜杠,就出現了带與不带两種形式。如果服務器對两者都返回 200,重复入口就固定下来了。
3. 預設參數與排序參數
列表頁的 ?page=1、?sort=default、?from=nav 這類參數,對用戶没有實际差別,却會生成一批獨立 URL。分頁、篩選、来源标记叠加後,同一個列表可以派生出几十個地址。
4. 主机名與协议
http 與 https、带 www 與不带 www、绑定的备用域名,如果没有统一跳轉,都會各自被当成入口。這類問题在換域名或上 CDN 之後尤其容易出現。
二、怎么把變体找出来
- 把抓取日誌按路径聚合,統計含大寫字母、结尾斜杠、带 query 的請求各占多少,哪些路径同时有多種寫法;
- 把 Sitemap 中的 URL 與内鏈、導航、面包屑抽出的 URL 做集合對比,看規范形式是否一致;
- 抽查分頁、相關推荐、标簽聚合模块的連結生成規則,很多變体是從模板里批量产生的;
- 观察變体是只被抓一次就跳轉,還是被反复抓取,後者說明跳轉缺失或内鏈還在指向舊形式。
核對时不必追求绝對完整,先把請求量靠前的變体挑出来處理,收益通常更明顯。
三、归並的做法
- 先确定唯一的規范形式,例如全小寫、無末尾斜杠、不带無意义參數;
- 舊形式统一用 301 指向規范形式,只跳一次,避免形成跳轉鏈條;
- 内鏈、導航、分頁、面包屑按規范形式生成,模板改一次比逐條改連結更省事;
- Sitemap 只提交規范形式,不要再把變体混進去;
- 如果頁面用了 canonical 标注,结论要與跳轉方向一致,不要一邊跳向 A 一邊声明 B。
對于确實有獨立價值的參數(例如不同的篩選结果),可以保留,但要控制组合數量,避免同一份内容被無限展開。
四、改完之後看什么
上线後重点看三件事:同一路径的請求是否收敛到一種寫法;變体請求是否以 301 為主而不是 200;抓取總量里,重复命中的比例是否下降、新路径的發現是否變多。如果變体仍在被大量抓取,通常是内鏈或 Sitemap 里還有残留入口没有清理。
归並属于大范围改動,建议按栏目分批上线,每批观察几天日誌再繼續,避免一次性改完难以判断問题出在哪一步。
URL 形式统一不會直接带来排名變化,但它能让有限的服務端资源與抓取請求集中在真正需要被發現的頁面上,這本身就是抓取效率的一部分。