做站点运营时,常會遇到一種情况:自己觉得只有一個頁面,索引里却出現了好几個地址。它們内容一样,只是大小寫不同、末尾多了或少了一個斜杠,或者协议、域名前缀有差异。搜尋引擎不會自動把這些地址合並成一個,除非你给出足够明确的信号。
常见的 URL 變体有哪些
先分清哪些差异属于同一頁面的變体。多數情况下,下面這些地址返回的内容完全相同:
- 大小寫差异:/About 和 /about。有些服務器不区分大小寫,但 URL 字符串本身不同。
- 末尾斜杠:/guide 和 /guide/。服務器可能自動跳轉,也可能两個都返回 200。
- 协议差异:http:// 和 https://。迁移到 HTTPS 後,舊协议如果仍可訪問,就多了一套地址。
- 域名前缀:example.com 和 www.example.com。两者都解析时,會形成两套入口。
- 預設文件名:/index.html 和 /。目錄首頁的两種寫法。
带參數的篩選、排序和追踪參數也属于這一類,但處理思路更复杂,通常要结合參數的作用單獨判断。
為什么它們會被当成不同 URL
對爬虫来说,URL 首先是一串字符串。只要服務器返回 200,並且没有明确的 canonical 或重定向信号,它就有理由把每個變体当作獨立地址来抓取和索引。即使頁面内容一致,索引系統也可能先分別收錄,再尝试選擇規范版本。這個選擇過程不一定和你期望的一致。
變体越多,抓取和索引里需要處理的對象就越多。原本一個頁面的事,可能變成几個頁面的事。
统一 URL 的處理顺序
1. 先選定規范版本
在動手改之前,先确定每個頁面最终要用哪個地址。通常優先選已经有一定外鏈和收錄的版本;如果是新站,按自己的习惯定好即可,比如统一使用小寫、不带末尾斜杠、HTTPS、带 www 或不带 www。關键是全站保持一致。
2. 用 301 把變体指向規范版本
如果變体地址不應该繼續存在,優先用 301 重定向。它比 canonical 更直接:用戶和爬虫訪問舊地址时,會直接到達規范版本,不再看到舊頁面内容。注意不要用 302 或 JS 跳轉来替代,也不要让重定向鏈過長。
3. 用 canonical 處理無法重定向的情况
有些變体必须保持可訪問,比如带追踪參數的落地頁,或者服務器配置暂时無法改。這时可以在頁面 head 里用 canonical 指向規范版本。canonical 是提示,不是强制指令,但它能帮助索引系統理解你的選擇。canonical 指向的地址最好是 200 狀態、可抓取的規范頁面,不要指向 404 或另一個重定向地址。
4. 内部連結、sitemap 和導航保持一致
這是最容易被忽略的一步。如果站内連結一會儿用 /about,一會儿用 /About/,爬虫就會不断發現新變体。把導航、正文連結、面包屑、sitemap、RSS 里的地址统一成規范版本,能减少後續變体产生的机會。
容易踩坑的地方
- canonical 和 301 指向不同地址,信号互相矛盾。
- 服務器對大小寫不敏感,但站内連結混用大小寫,導致爬虫反复抓取同一路径的不同寫法。
- 末尾斜杠自動跳轉正常,但 sitemap 里仍保留舊寫法,形成两套發現入口。
- canonical 指向的頁面本身也被 robots.txt 禁止抓取,導致提示無法生效。
- 只處理首頁,忽略了栏目頁和詳情頁也存在同样的變体。
怎么检查有没有被拆開
- 用 site: 查询观察同一内容是否出現多個地址,注意這只是粗略參考。
- 在 Search Console 的頁面报告里查看“重复網頁,Google 選擇的規范網頁與用戶指定的不同”等狀態。
- 翻服務器日誌,看爬虫是否在抓取大小寫、斜杠或协议不同的同一路径。
- 用第三方工具對比索引和實际頁面,找出多余的變体地址。
處理這類問题的顺序通常是:先统一站内連結和 sitemap,再對已有變体做 301 或 canonical,最後观察一段時間。不要因為一时看到重复记錄就频繁更換規范版本,信号反复變化反而會让索引系統难以判断。