HTTP 404 錯誤


HTTP 404 錯誤意味著鏈結指向的網頁不存在。在網站建設中想要完全避免這種情況是不可能的,比如說,我們常常需要對網站進行調整、改版,便會有網頁被刪除、改名或移動位置,這時候,雖然相應內容的網頁還存在於網站中,但使用原來的位址訪問則無法訪問。——當然,對這類情況首先要考慮的是為原來頁面位址做301重定向,以盡可能地減小對SEO效果的影響。——其次,在別人建立指向網站的鏈結時,也可能會由於出現拼寫錯誤而使其成為一個無效的鏈結:在網站內找不到相應的內容頁面。

簡單說來,這類無效鏈結是由web伺服器自動處理的:當Web 伺服器接到類似的資料請求量,會返回一個404 狀態碼,告訴對方其要請求的資源並不存在。但是,Web伺服器默認的404錯誤頁面,無論Apache還是IIS,均十分簡陋、呆板且對用戶不友好,無法給予用戶尋找相應資訊的更多線索,用戶看到這類頁面往往最直接的反應並是關閉流覽器視窗離開,這在很大程度上給網站造成損失。畢竟,對網站來說,用戶永遠是最重要的資源,以這種方式損失用戶更意味著某種程度的失敗。

這也是許多網站使用自定義404錯誤頁面的原因。通過良好的自定義404頁面,可以包含對網站的相應介紹、用戶可能感興趣的內容鏈結或者網站內容導航鏈結、內容搜索功能等,能夠有效地幫助訪問者找到其欲尋找的內容或相似的內容,提高用戶在網站內流覽更多資訊的機會。 自定義404錯誤頁面返回“200”或“302”狀態碼

從嚴格的技術角度,網站對404錯誤的處理策略,並不是一個SEO方面的工作,而屬於網站可用性(usability)方面的問題。——當然,如果從廣義的SEO範疇來看,提高網站可用性也屬於SEO的基本操作。——但是,如果自定義404錯誤頁面設置不當,則會極大地影響網站的SEO效果。

在許多朋友的印象中,自定義404錯誤頁面只要能正確顯示,只要能輸入網站內某個並不存在的網頁位址,在流覽器中能看到自定義的錯誤資訊,便說明設置沒問題。慚愧地說,本人也是抱有這種想法的一員,IT技術點評運行將近一年了,近日因Google更新後排名下降檢查網站時才發現存在類似的錯誤:一個正確設置的404頁面,不僅應當正確地顯示,同時,應該能夠正確返回“404”錯誤代碼,而不是“200”或“302”。雖然對訪問的用戶而言,HTTP狀態碼究竟是“404”還是“200”來說並沒有什麼區別,但對搜索引擎而言,這則是相當重要的。

為什麼這麼說呢?讓我們先來回顧一下搜索引擎收錄與索引網頁的過程:搜索引擎的Spider向網站伺服器發送請求,要求讀取某個網頁,網站伺服器接到請求後返回HTTP 狀態碼回應請求,這些返回的HTTP狀態碼決定著搜索引擎的下一步行動:將該網頁收錄到索引資料庫或者將其從索引資料庫刪除等。

當然,HTTP狀態碼有很多種,分別對應不同的情況,下面就與本文內容相關的幾種作一簡單介紹,更詳細的資訊可參考W3C規範:

* 404 : 請求的網頁不存在(不排除日後該鏈結有效的可能性);

* 410 : 請求的網頁不存在(永久);

* 200 : 伺服器成功返回網頁

* 302 : 網址臨時重定向(跳轉)

* 301 : 網址永久重定向

需要說明的是,大部分搜索引擎將“404”與“410”狀態同等對待,如Google。(參見Matt Cutts的說明)

當搜索引擎在請求某個Url時得到“404”狀態回應時,便會知道該網頁在網站內不復存在,從而在索引資料庫中將其刪除,——當然,這個刪除過程有可能需要很長時間——而當搜索引擎得到“200”狀態回應時,則會認為該url是有效的,並將其回到到索引資料庫中。 404頁面返回“200”狀態碼的後果

如果網站的自定義404錯誤頁面在url無效時不返回“404”狀態碼而代之以“200”,會發生什麼情況呢?很明顯,搜索引擎會認為這個“根本不存在的”網頁在網站內是存在的,這會導致很多問題,影響網站的最終SEO效果。

舉例來說,比如說對“http://www.highdiy.com/a.html”、“http://www.highdiy.com/b.html”這兩個在IT技術點評網站內並不存在的url而言,如果搜索引擎得到的回應狀態碼是“200”,那麼,便會將其收錄到索引資料庫,這樣的結果便是這兩個不同的url具有完全相同的內容:自定義404錯誤頁面的內容,這類重複文本(Duplicate Content)的現象對許多搜索引擎而言都是大忌。尤其是考慮到網站中不可能只有這兩個無效鏈結,畢竟在網站建設中,無論網站的內部鏈結還是外部鏈結,總會不可避免地出現許多比如說拼寫錯誤的情況,類似的重複內容會更多。這樣,對搜索引擎而言,特別是Google,不但很難獲得理想的網站信任指數,也會大大降低Google對網站品質的評定。 404錯誤頁使用Meta Refresh帶來的302問題

常常看到許多網站的自定義404錯誤頁面採取類似這樣的形式:首先顯示一段錯誤資訊,然後,通過Meta Refresh將頁面跳轉到網站首頁、網頁地圖或其他類似頁。根據具體實現方式不同,這類404頁面可能返回“200”狀態碼,也可能返回“302”,但不論哪種,從SEO的角度看,均不是一種合適的選擇。

對“200”狀態的情況我們上面已經談過,那麼,當404頁面返回“302”時,搜索引擎會怎麼對待呢?從理論上說,對“302”錯誤,搜索引擎認為該網頁是存在的,只不過臨時改變了位址,仍然會索引收錄該頁,這樣,同樣會出現類似於“200”狀態碼時的重複文本問題;其次,以google為代表的主流搜索引擎對302重定向的適用範圍要求越來越嚴格,這類不當使用302重定向的情況存在很大的風險。

因此,儘量不要在404錯誤頁中使用這類Meta Refresh方法。如果實現希望實現類似的功能,即讓顯示錯誤資訊幾(十)秒後跳轉到首頁或其他頁面,可以考慮在404錯誤頁中使用Java Script跳轉。——Java Script對搜索引擎而言是無益同時也無害的。:) 確保自定義404錯誤頁面能夠返回“404”狀態碼

在自定義404錯誤頁面設置完畢後,一定要檢查一下其是不是能夠正確地返回“404”狀態碼。

檢查的方法也相當簡單,使用本站提供的Server Header檢查工具,或其他類似工具如這個,輸入一個網站內不存在網頁的url,查看一下HTTP Header的返回情況,確信其返回的是“404 Not found”。