網站收錄

URL 里混進中文、空格和特殊符号:编碼問题如何影响抓取與收錄

URL 编碼不是只影响美观。中文、空格、&、# 等字符如果處理不当,會让爬虫拿到不同地址、日誌對不上、内鏈指向失效,最终表現為已發現未抓取或重复頁面。本文從常见编碼错誤、排查方法和修复顺序入手,說明如何让 URL 可讀、可抓、可索引。

網站收錄

URL 里混進中文、空格和特殊符号:编碼問题如何影响抓取與收錄

很多站点上线时為了可讀性,直接把中文标题放進 URL,或從後台複製带空格的連結。浏览器能打開,不代表爬虫能稳定抓到。URL 编碼處理不当,會带来一系列收錄問题。

浏览器會自動编碼,但爬虫看到的是另一层

在地址栏輸入含中文或空格的 URL,浏览器通常會在發送請求前自動做百分号编碼。你複製出来的可能仍是中文,實际請求已经變成 %E4%B8%AD 之類。服務器日誌里记錄的也是编碼後的形式。如果站内連結、sitemap 和 canonical 里混用了未编碼與已编碼两種寫法,爬虫就會把它們当成不同 URL。

  • 未编碼:https://example.com/标簽/網站收錄
  • 编碼後:https://example.com/%E6%A0%87%E7%AD%BE/%E7%BD%91%E7%AB%99%E6%94%B6%E5%BD%95

两者在多數系統里不自動等價。若都返回 200,容易形成重复内容;若其中一種 404,則部分入口會失效。

最容易出問题的几類字符

空格與加号

空格在 URL 中應编碼為 %20,而不是直接留空或用 + 代替。+ 在查询字符串里常被解释為空格,在路径中却可能被当作普通字符。内鏈里出現空格,複製到某些編輯器或模板後會被截断。

& 與參數分隔

& 是查询參數的分隔符。如果參數值本身包含 &,必须编碼為 %26,否則爬虫會把後半段当成新參數。比如 ?q=a&b 會被解析成 q=a 和 b 两個參數,頁面内容可能完全不同。

# 片段标识

# 之後的内容不會發送给服務器,只用于頁内定位。如果誤把篩選條件寫在 # 後面,爬虫和服務器都看不到這個條件。單頁應用用 hash 路由时,要確認是否有對應的可抓取 URL。

百分号大小寫與双重编碼

%E4 與 %e4 在部分系統里被视為不同字符串。更麻烦的是双重编碼:%25E4 表示的是字面量 %E4,而不是“中”。一旦連結被多次编碼,服務器解碼後得到的可能是错誤路径。

编碼問题會怎样伤到收錄

  1. 同一内容對應多條 URL,權重分散,canonical 难以统一。
  2. sitemap 里提交的是编碼地址,站内連結指向未编碼地址,爬虫在两者之間反复切換,抓取预算被浪費。
  3. 日誌里同一頁面出現多種编碼形態,統計抓取频次和狀態碼时容易誤判。
  4. 部分编碼寫法返回 404 或 500,導致本可收錄的頁面被排除。
  5. 分享、外鏈和統計工具记錄不一致,後續排查来源时對不上号。

自查:從日誌和模板两头看

先不要急着批量替換。可以按下面顺序確認。

  1. 導出服務器日誌,篩選包含百分号、中文或空格的請求,看狀態碼分布。
  2. 在 Search Console 的頁面报告或索引覆盖里,找“已發現但未编入索引”“重复網頁,用戶未選定規范網頁”等狀態,观察是否集中在带编碼的 URL。
  3. 抽查站内連結、導航、分頁、面包屑、sitemap 和 canonical,確認同一頁面是否出現两種以上寫法。
  4. 用抓取工具或 curl 直接請求未编碼與已编碼地址,對比返回狀態和最终 URL。
  5. 检查後端路由和 CDN 規則,確認解碼顺序與重寫規則是否一致。

修复顺序:先统一,再重定向

如果已经产生两種以上可訪問寫法,比較稳妥的處理是選一個規范版本,其余 301 到規范版本。規范版本建议使用小寫、已编碼、不带多余參數的绝對地址。不要只改 sitemap,而放任站内連結繼續混用。

  • 模板里的連結统一走编碼函數,避免手工拼接。
  • sitemap 與 canonical 使用同一套生成逻辑。
  • 服務器對错誤编碼返回 404 還是 301,要想清楚,避免把有效頁面誤伤。
  • 更新後观察日誌中两種寫法的請求量是否逐步收敛。
URL 编碼不是洁癖,它决定了爬虫、服務器和統計系統看到的是不是同一個地址。先把地址统一,再谈收錄和索引,會少很多来回。

URL 里出現中文、空格和特殊符号並不必然導致不收錄,但會给抓取、去重和索引带来額外噪声。把编碼規范固定下来,让站内入口、sitemap、canonical 和日誌里的地址一致,是比反复提交更有效的做法。