Menu

關於 URL 的一些不可不知的知識

URL 設計是 Web 設計中常被忽視的東西,事實上 URL 非常重要,這不僅是一個網頁唯一的路徑,還涉及到你的站點是否乾淨,友好。本文講述 URL 這個司空見慣的 Web 元素中包含的大量不應為忽視的知識,準則與最佳實踐。需要注意的是 W3C 建議使用 URI 取代 URL 一說

關於 URL 的一些準則

首先是與 URL 有關的一些準則。

一個 URL 必須唯一地,永久地代表一個在線對象

 

URL 的最基本的使命是唯一地代表 Internet 上的一個對象,URL 必須和 Internet 上的對象一對一匹配。然而現實中,這很難實現,我們經常可以通過多個 URL 到達同一個頁面,比如, http://mysite.com/product/tv 和 http://mysite.com/product?name=tv,這種情形在現代 CMS 中更是比比皆是,針對這個問題,SEO moz 有一篇很好的文章,講到了如何使用 Canonical URL 機制解決站點中的重複 URL 問題

URL 應該是永久的,這就要求你在站點上線前就非常嚴謹地規劃 URL。如果有一天,你不得不更改 URL,一定使用 HTTP 301 機制,告訴瀏覽器和搜索引擎,你的那個 URL 所代表的對象,已經搬遷到新地址,這個機制可以保證你舊地址所獲得 PR 不會被清零。

 

儘可能用戶友好

這是 URL 設計的根本,你的 URL 應該為最終用戶而設計。保持 URL 友好的一個好辦法是在保證可讀性的同時讓它儘可能短。比如 /about 就好過 /about-acme-corp-page,當然,保持簡短不能犧牲可讀性, /13d2 一類的地址短則短矣,但並不友好。如果要在 Twitter, Facebook 一類的社會媒體網絡分享你的 URL,可以使用 Bit.ly 一類的網址縮短工具,但這種工具產生的縮短 URL 並不友好,在 Wordpress 一類的 CMS 中,可以使用 PrettyLink ProShort URL plugin 一類的可控制的地址縮短插件。

URL 的設計切忌使用一些對用戶來說沒有意義的內容,比如數據庫的 ID 號, /products/23 這樣的 URL 地址對用戶是極不友好的,應當使用 /products/ballpoint-pen 一類的地址。

 

保持一致性

站點內的所有 URL 必須保持一致的格式和結構,這樣可以為用戶帶來信任感,如果你必須更改 URL 格式和結構,需要使用 HTTP 301 機制。

 

可預測的 URL

這也是 URL 一致性的一個表現,如果你的 URL 擁有很好的一致性,用戶可以根據 URL 猜測別的內容的 URL,假如 /events/2010/01 指向 2010 年 1 月份的日程內容,那

  • /events/2009/01 應當指向 2009 年 1 月的日程。
  • /events/2010 應當指向 2010 年全年的日程。
  • /events/2010/01/21 應當指向2010年1月21日的日程。

 

URL中的關鍵詞

URL 中應該包含本頁重點內容的關鍵詞,比如 /posts/2010/07/02/trip-best-buy-memory-cards 一類的 URL 本身就是對頁面內容的反應。在 URL 包含重點內容關鍵詞,也可以提高 SEO 性能。SEO 的一個很重要的原則就是,在 URL 地址中包含內容關鍵詞。

 

關於 URL 的技術細節

下面說的是有關 URL 的一些技術細節。

URL 不應包含 .html, aspx, cfm 一類的後綴

這類信息對最終用戶是沒有意義的,卻佔了額外的空間,一個例外是 .atom, .rss, .json 一類的特殊地址,這類地址是有特別的意義的。譯者註:在某些虛擬主機式 Web 服務器,這種做法未必現實。

URL 不應包含 WWW 部分

WWW 部分並不包含任何意義,是一個額外的負擔,不友好。可以使用 HTTP 301 機制,將 www.domain.com 定向到 domain.com 。

URL 的格式

URL 的格式如下:

domain.com/[key information]/[name]/?[modifiers]

Key information 部分一般代表信息的類型或類別。Modifiers 部分則屬於查詢字符串範疇,它不應當代表數據結構,應當代表數據的修飾。Key information 部分應當儘可能簡短,同時應當表現出一種層級關係,比如 http://domain.com/posts/servers/nginx-ubuntu-10.04,或 http://domain.com/news/tech/2007/11/05/google-announces-android。

Google News 對新聞源有一個有趣的要求,Google 要求新聞源頁面的 URL 中必須包含至少 3 位唯一的數字,因為他們會忽略年份數字,因此,應該使用一個5位或5位以上的數字。另外,也應該提供 Google News 站點地圖 。如果你想向 Google 提供新聞,必須按這樣的結構提供 URL,當然保持一致性,可以預測性也是必需的。

 

使用小寫字符

URL 中所有字符都應使用小寫,這更容易閱讀。

URL 中包含的行為元素

URL 查詢字符串中可能包含一些表示行為的元素,比如 show, delete, edit 等。非破壞性的行為可以體現在 URL 中,破壞性的行為應該使用 POST 。

使用 URL 友好字符

在 URL 中體現網頁標題的時候,往往會用到一些特殊字符,應當把它們轉換為 URL 友好字符:

  • 全部大寫字符換成小寫
  • 諸如 é 一類的字符應轉換成對應的 e
  • 空格使用短劃線代替
  • 諸如 !, @, #, $, %, ^, &, * 一類的字符應該使用短劃線代替
  • 雙短劃線應該使用單短劃線代替

另外,沒有必要的話,避免使用 %20 一類的 URL 逃逸符。

 

更多觀點

Chris Shiflett 建議,可以使用一些類似句子的 URL,如:

chriscoyier.net/authored/digging-into-wordpress/
chriscoyier.net/has-worked-for/chatman-design/
chriscoyier.net/likes/trailer-park-boys
jacobwg.com/thinks/this-post/is/basically-done

 

譯者補充:URL 的長度上限

URL 的最大長度是多少?W3C 的 HTTP 協議 並沒有限定,然而,在實際應用中,經過試驗,不同瀏覽器和 Web 服務器有不同的約定:

  • IE 的 URL 長度上限是 2083 字節,其中純路徑部分不能超過 2048 字節。
  • Firefox 瀏覽器的地址欄中超過 65536 字符後就不再顯示。
  • Safari 瀏覽器一致測試到 80000 字符還工作得好好的。
  • Opera 瀏覽器測試到 190000 字符的時候,還正常工作。

Web 服務器:

  • Apache Web 服務器在接收到大約 4000 字符長的 URL 時候產生 413 Entity Too Large" 錯誤。
  • IIS 默認接收的最大 URL 是 16384 字符。