有些站点用的是中文目錄名,或者把标题里的空格直接搬進了 URL。這類地址在浏览器里看着正常,但在不同位置被寫成不同形式:有的是原样中文,有的是百分号编碼;空格有时是 %20,有时是加号。搜尋引擎看到的是几條不同的 URL,索引里就可能留下多個入口。
先確認:是同一個頁面,還是真的两個頁面
別急着處理,先把状况分清楚。
- 两條 URL 返回的狀態碼是否都是 200,正文内容是否一致。
- 两個地址是否都被抓取過,日誌里出現的時間和频次如何。
- 在索引里查一下,两條是否都在,占的是不是同一段内容。
- 頁面上的 canonical 指向哪個地址,這個地址和實际使用的内鏈是否一致。
如果其中一條返回 301 或 404,那属于另一類問题;這里讨论的是两條都能正常打開、内容基本相同的情况。
编碼寫法不一致通常從哪来
- 編輯器或 CMS 自動轉义,把中文寫成百分号编碼,而導航里仍是原样中文。
- 複製分享連結时,空格被替換成加号。
- 舊系統按一種编碼生成地址,新系統按另一種编碼生成,两套並存。
- 第三方統計、推廣或分享參數在跳轉时對地址重新编碼。
- 内鏈一部分人工填寫,一部分程序生成,两種寫法没有對齐。
统一顺序
- 先定一個規范寫法。比較稳妥的做法是:统一小寫、使用 UTF-8 百分号编碼、避免空格、不带多余參數。如果中文路径在分享和統計里经常出問题,長期看更推荐換成英文或拼音 slug。
- 確認服務器對非規范寫法的响應。有的服務器把未编碼的中文直接 200 返回,有的直接 404。两種情况下處理方式不同,先测清楚再動手。
- 统一站内所有入口。導航、面包屑、列表頁、相關推荐、站点地图、结构化資料里的 URL 都指向規范寫法。這一步往往比提交移除更管用,因為内鏈决定了爬虫反复走哪條路。
- 對非規范寫法做收敛。能做 301 的就 301 到規范地址;做不了的,用 canonical 指向規范地址,同时停止在站内連結非規范版本。
- 确定後一段時間内不要再改。索引替換需要爬虫重新抓取並處理,频繁更換寫法反而會让两個地址長期並存。
容易踩的坑
- 只調了 canonical,内鏈却還在用舊寫法,收敛會很慢。
- 中文路径被重复编碼,變成以 %25 開头的地址,頁面實际打不開,但爬虫仍會当作一個獨立 URL 记錄。
- 規范地址和分享參數混在一起,參數版本又變成新的收錄入口。
- 站点地图里同时列出两種寫法,等于主動告诉爬虫两個地址都值得走。
编碼問题本身不复杂,麻烦的是生成連結的地方分散在多處。先把所有产出 URL 的位置列出来,再统一,比反复提交要省事。
统一之後看什么
观察日誌里規范地址的抓取频次是否上升、非規范地址是否逐渐减少,再隔一段時間看索引里保留的是哪一條。這個過程依赖爬虫自己的抓取安排,不會立刻见效,也不保證一定按预期收敛。如果長期两個地址都還在,可以回头查一查是否有外部連結仍指向非規范版本,或者頁面上還残留着舊寫法。