同一個頁面,往往可以拼出好几條 URL:带不带尾斜杠、域名前有没有 www、用 http 還是 https、路径里字母大小寫不同。對用戶来说這些地址打開後可能看到同一屏内容,但對搜尋引擎来说,它們先被当成不同的 URL 来抓取和存储。最後會不會在索引里留下多條,取决于站点有没有把信号说清楚。
常见 URL 變体先列出来
排查之前,先把站点真實存在的變体列清楚。比較常见的包括:
- 协议:http 與 https 並存,或 https 證书切換後舊地址仍可訪問。
- 主机名:example.com 與 www.example.com 都能打開,或者带預設端口。
- 尾斜杠:/page 與 /page/ 都返回 200。
- 大小寫:/Page、/page、/PAGE 在部分服務器上被当成不同路径。
- 參數:追踪參數、排序參數、會话 ID 生成大量地址。
- 索引文件:/index.html 與目錄根地址同时可訪問。
這些變体不一定都會進索引,但如果服務器對每一條都返回 200,且没有規范信号,搜尋引擎就可能分別抓取、分別评估,甚至留下重复版本。
服務器层先做 301,而不是只靠 canonical
最稳的收口方式是在服務器层把變体 301 到規范地址。例如把所有 http 請求跳到 https,把裸域跳到 www,把带尾斜杠和不带尾斜杠统一成一種。301 會让抓取和索引信号沿着跳轉走到同一個目标,比頁面里的 canonical 更直接。
canonical 仍然有用,尤其是当 URL 必须保留、不能直接跳轉时。它相当于在頁面里声明“這一组地址里,請以這個為准”。但要注意:canonical 是提示,不是强制命令。如果服務器同时返回 200、内鏈又混着指向多個變体,canonical 的效果會被削弱。
能 301 的尽量 301,不能 301 的再用 canonical 收口,两者不要互相打架。
内鏈、sitemap 和提交入口要统一
很多重复 URL 不是服務器造出来的,而是站内連結自己带出来的。導航、面包屑、分頁、文章正文里的連結,如果同一個目标有时带尾斜杠、有时不带,蜘蛛就會沿着不同地址反复抓。建议做一次站内連結掃描,把指向同一頁面的連結统一成規范形式。
sitemap 里也只放規范 URL。不要把某一頁的各種變体都塞進去,那等于主動告诉搜尋引擎“這些地址都值得看”。提交入口同样如此,提交規范地址即可,不必把重定向前的舊地址反复提交。
按這個顺序排查
- 先確認規范地址是哪一個:协议、主机名、路径、尾斜杠分別定成什么。
- 用抓取工具或日誌检查變体是否返回 200。返回 200 的變体要優先處理。
- 能 301 的做 301,並確認跳轉鏈只有一跳,不要 A 跳 B 再跳 C。
- 不能跳轉的頁面,检查 canonical 是否指向自身或規范地址,且不是互相指向。
- 检查站内連結與 sitemap,是否混入了變体地址。
- 观察一段時間抓取日誌,看變体請求是否减少,而不是只看索引量數字。
哪些情况不用太紧張
不是所有變体都會造成重复收錄。如果服務器已经 301、canonical 明确、内鏈统一,搜尋引擎通常會自己合並信号。偶尔被發現的參數地址,如果内容與規范頁一致且没有外部連結指向,也可能只是被抓取後不索引。真正要盯的是那些持續返回 200、有内鏈或外鏈支持、内容又和規范頁高度相似的變体。
另外,URL 規范化不是一次做完就結束的事。改版、換域名、加 CDN、調整路由規則,都可能让舊變体重新可訪問。把規范地址寫進開發和运维清單,比事後從索引里清理更省力。