做站点运营时,常會遇到這样的情况:一個内容頁,索引里却出現了好几個地址形式——有的是末尾多了斜杠,有的是把路径里的大寫字母換成了小寫,還有的把 /a/ 和 /a/index.html 都收了一遍。它們指向的其實是同一份内容,但搜尋引擎會把它們当成不同的 URL 来處理,權重被拆散,索引量也顯得虚高。
這類問题的處理,關键不在于“改得多快”,而在于先把變体分類,再按顺序收口。
一、先判断這些地址是不是同一個资源
常见的 URL 變体大致有這几類:
- 协议與主机名:http 與 https、带 www 與不带 www。
- 大小寫差异:/Article/1 與 /article/1,取决于服務器是否区分大小寫。
- 末尾斜杠:/topic 與 /topic/,两種寫法都可能返回 200。
- 預設文件名:/topic/ 與 /topic/index.html、/topic/default.aspx 之類。
- 路径细节:重复斜杠、路径中的 /./、端口号顯式寫出、编碼形式不同(如中文路径的编碼寫法)。
判断标准不是“長得像不像”,而是服務端對每一種寫法返回了什么。如果變体已经 301 到主地址,問题基本已经解决;如果變体照样返回 200 且頁面内容一致,那才是真正的重复入口。
二、按這個顺序核對
- 先定一個規范形式:域名用哪個、协议用哪個、路径是否带末尾斜杠、大小寫風格怎么统一。這一步要先定下来,否則後面每改一處都在摇摆。
- 看日誌里實际被訪問和被抓取的形式:哪些變体真的有人在爬、有内鏈指向。只存在于理论中的變体,優先級可以放低。
- 抽样看索引里出現的形式:不用追求一次看全,先找出重复最集中的那几類。
- 確認服務端响應:對每個變体直接訪問,记錄狀態碼。是 200、301 還是 404,决定了後面能不能用最省事的方式處理。
- 统一入口来源:内鏈、導航、面包屑、sitemap、分享出去的連結、以及外部合作方给的連結,都要跟着改。只改服務端不改入口,變体會被重新带進来。
三、几種處理手段的邊界
301 優先于 canonical
如果服務端能把變体 301 到規范地址,這是最干净的做法。canonical 是一個提示信号,不是替代品——服務端照舊返回 200、内鏈照舊混着寫,只靠 canonical 兜底,效果往往不稳定。
内鏈和 sitemap 要一起收
站内連結是最容易被忽略的一环。導航、相關推荐、分頁、舊文章里的引用,如果還寫着變体形式,搜尋引擎會認為這個變体仍然值得抓。sitemap 里只保留規范地址,能减少一部分無效抓取。
谨慎用 robots 屏蔽
用 robots.txt 屏蔽變体路径,看起来省事,但被屏蔽的地址仍可能因為外部連結而出現在索引里,甚至只顯示一個空标题。相比之下,301 是更明确的選擇。
四、容易踩的几個坑
- 一次同时改大小寫、斜杠和預設文件名,出問题後很难定位是哪一處引起的。
- 只改了一部分模板的内鏈,另一部分模板還在生成舊寫法。
- 把“site 查询里看不到變体”当作已经處理完,但外部連結和日誌里仍有訪問。
- 對本来就不返回 200 的變体也做 301,實际上服務端已经是 404,属于多此一举。
處理 URL 變体,本质是把“同一個资源”收敛成一個入口。先看服務端返回什么,再决定用 301 還是靠内鏈统一,最後才是 canonical 之類的辅助信号。一次收一個维度,比一次性全改更容易回滚和驗證。
收口之後,隔一段時間再看日誌和索引里的地址形式,確認變体訪問量在下降、規范地址的抓取在集中。如果没有變化,多半是某一层入口還没改到,回到第二步重新核對即可。