谷歌的約翰·穆勒表示,原始的括號和百分比編碼的括號是不同的 URL,建議在連結、規範標籤和網站地圖中使用同一種形式。

谷歌搜尋倡導者約翰·穆勒週一在Bluesky網站上表示, URL中的原始方括號及其百分比編碼版本(%5B和%5D)是不同的URL 。他寫道,他之前一直認為它們是等價的,並且「過去可能在這方面給出了錯誤的答案」。
他說,Google會抓取這兩個版本;如果發現它們包含相同的訊息,就會刪除重複內容並選擇其中一個版本;他建議選擇一種格式用於所有連結、規範標籤、網站地圖和結構化資料。他也說,重複格式的處理規則同樣適用於空格、加號和「%20」。
為什麼編碼後的括號會使用不同的 URL?
穆勒將差異追溯到RFC 3986,即互聯網 URI 語法標準,該標準將方括號和加號列入了保留字元集。根據第 2.2 節,將保留字元替換為其百分比編碼版本的 URI “並不等價”。
他是在回覆 Vanessa Fox 的問題。 Vanessa Fox 曾是Google員工,並開發了Google的網站管理員中心 (Webmaster Central)。她在 Bluesky 的回覆中(此前她在第一期《非規範內閣》(Non-Canonical Cabinet) 節目的評論區提出了這個問題)詢問谷歌是否會將 URL 的編碼形式視為不同的 URL。她舉例說明了兩種 URL 的用法?filter[]=123(?filter%5B%5D=123一種用於鏈接,另一種用於識別規範版本)。他編寫的 JavaScript 檢查比較了這兩個 URL,並傳回了正確的 URL false。
他指出,根據 RFC 3986,在查詢字串中使用原始括號在技術上也是無效的;這是因為 RFC 3986 將括號的使用限制在主機名稱中,用於包裹原始 IPv6 位址。
他指出,編碼中的字母大小寫沒有區別,因此「%5B」和「%5b」是等效的;它們符合 RFC 3986 中關於十六進位字元的規定。
谷歌如何處理這兩個版本
穆勒描述了當伺服器對原始表單和編碼表單返回同一頁面時,Google會採取的措施:
也就是說,*也許*你的伺服器透過提供相同的內容使它們在技術上「等效」。我們會抓取這兩個版本,如果發現內容相同(甚至校驗和等級都相同),我們會去重並選擇其中一個。
他還指出,瀏覽器可能會在發送使用者輸入到網址列的內容的編碼版本之前,對括號進行編碼。但是,如果請求的 URL 包含括號,則括號可能會按原樣發送。他建議在 URL 中使用括號時對其進行編碼:“始終編碼,切勿顯示方括號 []。”
谷歌官方文件已說明的內容
谷歌的URL 結構文件已經要求對括號等字元進行編碼。文件指出,Google搜尋支援 IETF STD 66(包含 RFC 3986 的標準)定義的 URL,並且「標準中定義為保留字元的字元必須進行百分比編碼」。
我上週介紹了第一期「非規範內閣」節目。那期節目討論了URL中的表情符號和非英文字符,瀏覽器會對這些字符進行百分比編碼。方括號的情況則不同,因為標準將其保留為分隔符號。
已在使用原始括號的網站
Vanessa Fox 回應說,她想到的是一個通篇使用無效括號表示法的網站,該網站似乎索引正常,但她決定不去管它,因為將其轉換為有效的括號太麻煩了。
穆勒表示,他預計使用這種結構不會出現問題,但「不會以這種方式建立新網站」。穆勒也表示,他會格外注意所有內部連結(包括與rel=canonical相關的元資料和結構化資料),以確保它們的統一性。
此外,穆勒表示,根據他們在 10 多年前在 Google 遇到的關於這些字元如何運作的問題,其他抓取/索引/取得程式在處理它們時可能「邏輯上不夠精確」。
為什麼這很重要
穆勒表示,如果存在多個內容相同的URL版本,Google會選擇其中一個。如果你的所有URL都使用相同的格式(例如,原始格式或編碼格式),那麼Google更有可能選擇對你有利的版本。最佳解決方案是按照谷歌官方文件的要求,對URL中的括號進行編碼。穆勒預計,使用原始括號的現有網站仍能繼續正常運作。因此,你的任務似乎是確保內部連結和元資料指向同一版本的URL。
展望未來
穆勒建議檢查你常用的爬蟲和抓取工具如何處理括號的URL。穆勒沒有具體指出哪些爬蟲或抓取工具可能有問題,但他表示,某些爬蟲/抓取工具在處理帶括號的URL時可能不完全符合Google的標準。

