在“通過HTTP狀態代碼查看搜尋引擎蜘蛛如何爬行你的網站”一文中,我介紹了一些經常涉及到的HTTP狀態代碼及含義,譬如大家經常探討並且與本文相關的Http狀態代碼:404:伺服器找不到指定的資源,請求的網頁不存在(譬如瀏覽器請求的網頁被刪除或者移位,但不排除日後該連結有效可能性);
410:請求的網頁不存在(注意:410表示永久性,而404表示臨時性);
200:伺服器成功返回請求的網頁;
301:網址永久性重新導向
302:網址臨時性重新導向
注意:大部分搜尋引擎將“404”與“410”狀態同等對待,如Google。(參見Matt Cutts的說明)
對HTTP404狀態代碼的理解
HTTP 404 錯誤意味著連結指向的網頁不存在,即原始網頁的URL失效,這種情況經常會發生,很難避免,比如說:網頁URL建置規則改變、網頁檔案更名或移動位置、匯入連結拼字錯誤等,導致原來的URL地址無法訪問;當Web 服務器接到類似請求時,會返回一個404 狀態代碼,告訴瀏覽器要請求的資源並不存在。但是,Web伺服器預設的404錯誤頁面,無論Apache還是IIS,均十分簡陋、呆板且對使用者不友好,無法給使用者提供必要的資訊以擷取更多線索,無疑這會造成使用者的流失。
因此,很多網站均使用自訂404錯誤的方式以提供使用者體驗避免使用者流失。一般而言,自訂404頁面通用的做法是在頁面中放置網站快速導航連結、搜尋方塊以及網站提供的特色服務,這樣可以有效協助使用者訪問網站並擷取需要的資訊。
HTTP404對SEO的影響
自訂404錯誤頁面是提供使用者體驗的很好的做法,但在應用過程中往往並未注意到對搜尋引擎的影響,譬如:錯誤的伺服器端配置導致返回“200”狀態代碼或自訂404錯誤頁面使用Meta Refresh導致返回“302”狀態代碼。正確設定的自訂404錯誤頁面,不僅應當能夠正確地顯示,同時,應該返回“404”錯誤碼,而不是“200”或“302”。雖然對訪問的使用者而言,HTTP狀態代碼究竟是“404”還是“200”來說並沒有什麼區別,但對搜尋引擎而言,這則是相當重要的。
(一)自訂404錯誤頁返回“200”狀態代碼
當搜尋引擎蜘蛛在請求某個URL時得到“404”狀態回應時,即知道該URL已經失效,便不再索引該網頁,並向資料中心反饋將該URL表示的網頁從索引資料庫中刪除,當然,刪除過程有可能需要很長時間;而當搜尋引擎得到“200”狀態回應時,則會認為該url是有效,便會去索引,並會將其收錄到索引資料庫,這樣的結果便是這兩個不同的url具有完全相同的內容:自訂404錯誤頁面的內容,這會導致出現複製網頁問題。對搜尋引擎而言,特別是Google,不但很難獲得信任指數TrustRank,也會大大降低Google對網站品質的評定。(為什麼會出現返回“200”狀態代碼的情況??請參看下面內容“自訂404錯誤頁面的基本原則”)
我一直在使用Google Sitemap,當我們提交XML格式網站地圖檔案時,Google會驗證我們的身份以確保是網站合法的管理者。驗證方式有兩種:上傳指定名稱的html頁到網站根目錄或者在網頁meta地區添加一個標識身份的meta標籤。我通常是使用上傳html網頁的方式,但Google卻提示我網站根目錄下找不到這個網頁(實際上我已上傳,並且通過瀏覽器可以訪問),這是一個很可怕的問題,見圖:
(二)自訂404錯誤頁使用Meta Refresh返回“302”狀態代碼
常常看到許多網站的自訂404錯誤頁面採取類似這樣的形式:首先顯示一段錯誤資訊,然後,通過Meta Refresh將頁面跳轉到網站首頁、網頁地圖或其他類似頁。根據具體實現方式不同,這類404頁面可能返回“200”狀態代碼,也可能返回“302”,但不論哪種,從SEO技術角度看,均不是一種合適的選擇。
對“200”狀態的情況我們上面已經談過,那麼,當404頁面返回“302”時,搜尋引擎會怎麼對待呢?從理論上說,對“302”錯誤,搜尋引擎認為該網頁是存在的,只不過臨時改變了地址,仍然會索引收錄該頁,這樣,同樣會出現類似於“200”狀態代碼時的重複文本問題;其次,以google為代表的主流搜尋引擎對302重新導向的適用範圍要求越來越嚴格,這類不當使用302重新導向的情況存在很大的風險。
確保自訂404錯誤頁面能夠返回“404”狀態代碼
在自訂404錯誤版面設定完畢後,一定要檢查一下其是不是能夠正確地返回“404”狀態代碼。可以使用Server Header檢查工具,輸入一個不存在網頁的url,查看一下HTTP Header的返回情況,確信其返回的是“404 Not found”。
404錯誤的處理方式
(一)定製404錯誤頁面的基本原則
首先應明確的是,404錯誤應工作在伺服器級而不是網頁級。對定製使用動態網頁面如PHP指令碼類型的404頁時,必須確保在PHP執行前伺服器已經順利地送出“404”狀態代碼,不然,一旦執行到了ISAPI層級,返回的狀態代碼便只能是“200”或其他如“302”之類的重新導向狀態代碼了。
其次,在自訂網站的404錯誤頁面時,對設定的錯誤頁面URL連結應使用相對路徑而不是絕對路徑,而且自訂404頁面應該放在網站根目錄下。儘管無效連結可能是多種形式的URL,但當發生404訪問錯誤時,WEB伺服器會自動將其轉到自訂的當404錯誤頁中,這跟URL的形似沒有關係。
(二)Apache下設定404錯誤頁面
為Apache Server設定 404錯誤頁面的方法很簡單,只需在.htaccess 檔案中加入如下內容即可:ErrorDocument 404 /notfound.php
注意:
1.切記不要將404錯誤轉向到網站首頁,否則可能會導致首頁在搜尋引擎中消失
2.切記不要使用絕對URL(例如:http://www.bloghuman.com/nofound.php形式),如果使用絕對URL返回的狀態代碼是“302”+“200”(已測試)
(三)IIS/ASP.net下設定404錯誤頁面
首先,修改應用程式根目錄的設定,開啟 “web.config” 檔案編輯,在其中加入如下內容:<configuration>
<system.web>
<customErrors mode=”On” defaultRedirect=”error.asp”>
<error statusCode=”404″ redirect=”notfound.asp” />
</customErrors>
</system.web>
</configuration>
註:上文例中“error.asp”為系統預設的404頁面,“notfound.asp”為自訂的404頁面,使用時請修改相應檔案名稱。
然後,在自訂的404頁面“notfound.asp”中加入:
<%
Response.Status = “404 Not Found”
%>
這樣,便可以保證IIS能夠正確地返回“404”狀態代碼
(四)在IIS/ASP.net下設定404靜態頁面
設定靜態404錯誤頁面的方法則比較簡單,在IIS管理器中按右鍵要管理的網站,開啟“屬性”中的“自訂錯誤資訊”頁,為“404”設定相應的錯誤資訊頁即可。不過,此處在“訊息類型”中一定要選擇“檔案”或“預設值”,而不要選擇“URL”,不然,將導致返回“200”狀態代碼。