網站收錄

URL 里的中文、空格與特殊字符:同一條地址的多種寫法怎么收口

中文、空格、加号、百分号编碼大小寫和參數顺序,都可能让同一條 URL 出現多種寫法。這些寫法如果都返回正常頁面,很容易被当成多個地址分別抓取,造成抓取分散、canonical 打架、收錄數虚高。本文梳理常见的不一致寫法、自查方式,以及從規范寫法、301 到内鏈统一的收口顺序。

網站收錄

URL 里的中文、空格與特殊字符:同一條地址的多種寫法怎么收口

URL 里出現中文、空格、加号、&、# 這些字符並不少见,站内搜尋頁、商品篩選頁、带中文标题的文章地址都會遇到。麻烦的地方在于:同一條地址,浏览器、CMS 後台、編輯器、外鏈来源和統計工具可能各自用不同的编碼方式寫出来,服務器如果都返回 200,蜘蛛就會把它們当成若干條不同的 URL 分別抓取和收錄。

同一條地址常见的几種寫法差异

  • 中文:顯示成“中文”還是被编碼成 %E4%B8%AD%E6%96%87;同一個字在不同字符集下的百分号串完全不同。
  • 空格:寫成 %20 還是 +,两者在查询串里常被当成一個意思,但在路径部分含义不一样。
  • 百分号编碼的大小寫:%2f 與 %2F、%3a 與 %3A,多數服務器不区分,少數环境會区分。
  • 路径尾部:带不带斜杠、带不带預設文件名,例如 /list 與 /list/、/list/index.html。
  • 參數:顺序不同(?a=1&b=2 與 ?b=2&a=1)、空參數保留(?a=&b=2)、各種追踪參數。
  • 锚点:# 後面的内容不會發给服務器,但有些轉载或跳轉會把带锚点的整串当成獨立地址。
  • 複製粘贴造成的二次编碼,比如中文字符被编成 %25E4... 這種多套一层的形式。

编碼分裂會带来哪些實际問题

抓取被摊薄是最常见的。同一個頁面有好几種寫法,蜘蛛每次抓到的是不同地址,重抓频率被分散,新内容的發現速度也跟着變慢。其次是信号分散:如果每種寫法各自有一套 canonical、内鏈和分享資料,搜尋引擎很难判断哪個才是主副本,收錄數看着在涨,但有效頁面並没有增加。日誌分析同样會被带偏,你以為蜘蛛抓了 100 個頁面,實际可能只有 60 個是真正不同的内容。

先確認有没有真的分裂

  1. 站内走一遍:從首頁、列表頁、站内搜尋、标簽頁分別点到同一個内容,對比地址栏里的 URL 是否一致。
  2. 看日誌:把同一资源(比如同一個商品 ID 或文章 ID)對應的請求 URL 归到一起,數一數有几種寫法。
  3. 看索引:用站点查询或相關工具查看同一内容是否出現了多個地址,结果只当线索,不要当成精确的收錄數量。
  4. 检查出口:sitemap、canonical、RSS、内鏈、分享按钮里寫的是哪一種寫法,彼此是否统一。

收口的顺序

  1. 先定一條規范寫法。中文 slug 尽量用拼音或英文短语,减少直接暴露编碼;确實需要保留中文的,就固定使用一種编碼,通常是 UTF-8。
  2. 在服務器层收口,把其他寫法 301 到規范寫法。這比只寫 canonical 更干脆。對大小寫敏感的服務器要單獨確認,別想当然。
  3. 内鏈、sitemap、canonical、结构化資料里的地址全部對齐規范寫法,不要留下任何一處老寫法。
  4. 參數做取舍:篩選、排序、追踪參數尽量不進可收錄的地址;必须保留的,固定參數顺序,避免同一组條件产生多種排列。
  5. 改完後观察一段時間,看舊寫法的請求是否逐渐减少,索引里的重复地址是否回落。
canonical 是建议,301 是硬跳轉。两者都做會更稳,但不要以為只寫一條 canonical 就算收口完成。

两個容易忽略的细节

一個是外部寫法。別人複製地址时可能带上追踪參數,或者把中文二次编碼,這類寫法你控制不了,但可以确保服務器把它們 301 到規范地址,而不是各自返回 200 的重复内容。另一個是锚点與分頁的誤用:把 #section 当成獨立 URL 提交给搜尋引擎,或者把同一頁面的多個分頁当成獨立内容,都會加重重复。

收口不需要一次做完。先把站点自己能控制的出口统一,再處理外部寫法,最後用日誌驗證。判断标准很简單:同一個内容,不管從哪里点進来,最後落在地址栏里的字符串應该是一样的。