網站收錄

URL 里带中文和特殊字符:编碼不一致带来的重复收錄與抓取異常

中文路径、空格和特殊符号在不同环节常被编碼成不同寫法,導致同一篇内容出現多個可抓取地址,抓取與索引被分散。本文從日誌、内鏈和索引三條线索出發,說明如何確認编碼不一致的影响范围,並按先定規范地址、再统一入口的顺序處理,同时给出新建 URL 时的規避建议。

網站收錄

URL 里带中文和特殊字符:编碼不一致带来的重复收錄與抓取異常

排查收錄問题时,日誌和索引里有时會出現這样一種情况:同一個詳情頁出現好几條看起来不一样的地址,点開却是同一篇内容。仔细比對,差別只在中文關鍵詞的编碼形式上——有的保留中文原样,有的是 %E4%B8%AD 這種百分号编碼,還有的把百分号後面的大寫字母寫成了小寫。這類問题在中文站、含空格或括号的栏目路径里很常见,處理起来不难,但需要按顺序来。

一、一個頁面為什么會有多個编碼地址

URL 里能直接出現的字符是有限的,中文、空格、引号、竖线這些都要轉成百分号编碼才能被正确传輸。問题往往出在轉換环节:

  • 不同工具、不同語言的编碼函數對同一段文字可能给出不同结果,最常见的是百分号後字母大小寫不一致。
  • 路径里的空格编成 %20,查询參數里的空格有时被寫成 +,這两種寫法在部分场景下並不等價。
  • 從 Excel、文档或後台編輯器里複製出来的連結,常常夹带不可见的空格或全角字符。
  • 服務器對路径大小寫敏感时,只有大小寫不同的两條地址會被当成两個頁面,各自獨立被抓取。

结果就是:内鏈指向一種寫法,sitemap 用另一種,外部引用又是第三種。爬虫见到几套地址,就會分別抓取、分別建索引,頁面本身的信号也被拆散。反過来说,只要入口统一,這類問题大多數可以避免。

二、先核對范围,再動手改

確認影响面之前,不要急着加規則。可以從三條线索入手:

  • 服務器日誌:按路径前缀篩選,看同一頁面對應几種不同的請求形式,各自占多少請求量、返回狀態是否一致。
  • 站点地图與内鏈:随机抽若干詳情頁,對比 sitemap、導航、面包屑和正文内鏈里用到的寫法是否统一。
  • 索引表現:用站内查询或索引报告看是否存在指向同一内容的多個地址,留意带參數的變体是否也被收進去了。

核對时把“地址寫法”和“頁面内容”分開记錄。有些參數頁本来就不该參與收錄統計,混在一起會让判断失准。另外要顺带確認服務器對大小寫的處理方式,這决定了後續要不要額外做映射。

三、處理顺序:先定規范,再统一入口

  1. 确定唯一規范地址。選一種寫法作為标准,通常優先選可讀性好、不含多余參數的那條。
  2. 非規范地址做一跳 301。直接指向規范地址,不要串成多跳鏈條,避免爬虫在跳轉中消耗预算。
  3. 頁面内寫好 canonical。让 canonical 與 301 的目标保持一致,两處互相矛盾會让處理结果更难预测。
  4. 统一内鏈與 sitemap。把導航、面包屑、正文連結、站点地图都改成規范寫法,這是减少新變体最有效的一步。
  5. 清理夹带字符。去掉連結里的全角符号、首尾空格和重复參數。
  6. 持續观察。日誌里非規范寫法的請求量下降、索引中的重复地址逐步收敛,才算這一步走完。

整個過程建议分批推進,先處理量最大的那類變体,观察一段時間再動下一批。一次性改完,出了問题不容易定位是哪一步引起的。

四、新建 URL 时就避開這個坑

與其事後归並,不如在建站和改版阶段就把規則定下来:

  • 路径尽量用拼音或英文短语,把中文留给标题和正文。
  • 栏目名和文件名统一小寫,避免同目錄下出現僅大小寫不同的地址。
  • 约定空格與特殊字符的编碼方式,並把這條寫進開發規范。
  • 後台自動生成連結时统一走同一個函數,不要各處各寫一套。

如果歷史頁面已经有大量中文路径,也不必全部推倒重来。把入口收口、把新頁面規范起来,通常比大規模改 URL 更划算,風險也小得多。

需要提醒的是,统一编碼、收敛入口只能减少重复、让抓取更顺畅,並不等于頁面一定會被收錄,也不代表展示位置會變好。内容是否有獨立價值、站点整体质量如何,仍然是更根本的前提。