網站收錄

中文 URL 的编碼問题:同一條連結為什么會被当成几個頁面

中文 URL 里的中文、空格和特殊符号會被浏览器编碼成百分号形式。如果站内連結、sitemap 和 canonical 用了不同编碼,搜尋引擎可能把同一條連結当成多個 URL,造成重复抓取、權重分散,甚至抓取失敗。本文說明常见编碼不一致场景,並给出统一 URL 形式的自查方法。

網站收錄

中文 URL 的编碼問题:同一條連結為什么會被当成几個頁面

用中文标题生成 URL,或者直接在連結里保留空格、括号、& 等符号,看起来可讀,實际請求时浏览器會先把它們轉成百分号编碼。如果站内不同位置用了不一样的编碼形式,搜尋引擎就可能把同一條連結当成多個 URL,抓取和收錄都會受影响。

浏览器顯示的和服務器收到的不是一回事

中文、空格、部分特殊符号在 URL 里不能直接传輸,需要经過编碼。比如“網站收錄”按 UTF-8 编碼後會變成一長串 %E7%BD%91%E7%AB%99%E6%94%B6%E5%BD%95。浏览器地址栏可能给你顯示中文,但網絡請求和服務器日誌里记錄的是编碼後的形式。

空格通常编碼為 %20,在查询參數里也可能被寫成 +。两種寫法在部分服務器和程序里會被解析成不同结果,如果站内同时存在,就容易出現同内容多條 URL。

编碼不一致會制造重复 URL

常见的不一致有几類:

  • 同一段中文分別按 UTF-8 和 GBK 编碼,得到两串完全不同的百分号,服務器都返回 200;
  • 百分号後面的十六進制字母大小寫不统一,例如 %e7%bd%91%E7%BD%91
  • 空格一會儿寫成 %20,一會儿寫成 +,或者干脆不编碼;
  • 站内連結用未编碼的中文,sitemap 和 canonical 却用编碼後的版本。

對搜尋引擎来说,這些字符串不同就是不同 URL。爬虫會分別抓取、分別尝试索引,抓取预算被分散,頁面權重也被拆開。更麻烦的是,canonical 如果只寫了其中一種形式,另外几種被收錄後可能長期留在索引里。

抓取失敗和收錄失敗是两件事

编碼错誤首先影响的是抓取。如果站内連結里的中文没有正确编碼,或者參數里的 & 没有轉义,服務器可能返回 404 或 400。頁面根本抓不到,就谈不上進入索引。

如果服務器對几種编碼形式都返回 200,並且頁面内容完全相同,搜尋引擎會做去重,通常只保留一個版本。但選擇哪一個版本,並不完全由你控制。你希望保留的規范 URL 可能被替代,導致後續流量和統計對不上。

抓取日誌里出現 200,只說明請求成功,不代表頁面一定會進索引。编碼混乱带来的往往是“抓到了,但被当成重复頁”或“換了一個 URL 收錄”。

把 URL 形式统一起来

能改的话,優先用英文或拼音 slug,避免中文、空格和特殊符号。需要保留中文 URL 时,至少做到以下几点:

  1. 全站统一使用 UTF-8 百分号编碼,不要混用 GBK;
  2. 站内連結、sitemap、canonical、分頁和 hreflang 里的 URL 寫法保持一致;
  3. 服務器對非規范形式做 301 跳轉,例如把未编碼或大小寫不一致的版本跳到規范编碼版本;
  4. 查询參數里的空格统一用 %20,不要同时出現 +
  5. 不要用中文 URL 承载關键目錄结构,避免以後改版时大面积失效。

自查时看什么

  • 從站内複製几條中文 URL,粘贴到文本編輯器里,看编碼是否统一;
  • 在服務器日誌或抓取日誌里搜尋同一路径的不同编碼形式;
  • 检查 sitemap 和 canonical 輸出的是不是编碼後的規范 URL;
  • 用站点搜尋或索引查询,看看同一内容是否對應多個 URL。

URL 编碼本身不复杂,难的是全站一致。只要不同入口輸出不同形式,搜尋引擎就會按不同 URL 處理。把编碼、大小寫和參數寫法统一,减少不必要的重复,抓取和收錄才會更稳定。