公司新來的一位SEO向我質疑說404頁面不能跳轉到首頁,說這樣會導致首頁會被K掉,還言之鑿鑿的說,夫唯也這么說過。落葉給他的建議是,遇到問題要多思考,SEO這個本來誤傳比較多,弄清楚404的原理,及一些狀態碼的含義,什么情況下會導致被誤判或弊端,思考清楚這些,誰怎么說已經不重要了。
本文中分析一下各種常見的HTTP返回狀態含義及對應的網站的出錯情況,同時也介紹一下,IIS服務器、apache服務器及一般虛擬主機上設置404錯誤頁的正確方法。
站長常需要關注的HTTP狀態及含義:
200 :頁面正常訪問時的返回HTTP狀態。當一個頁面返回200狀態碼時,則表示告訴瀏覽器或者搜索引擎,該頁面是可以正常到達的。
404 :頁面找不到時,返回的HTTP狀態。SEO處理中如果想自定義404頁面,需要做到的是確保訪問錯誤頁時返回狀態為404,這樣搜索引擎才知道,這個頁面是找不到了。而通常很多站長朋友們之所以對文章開頭提到的認為“404頁面自動跳轉到首頁會有問題”,原因通常是因為404頁面跳轉時設置不當,返回了200狀態碼又沒有發現,結果搜索引擎抓取錯誤頁時看到的是200狀態,就認定網站上出現了大量的與首頁相同頁面,這種情況,被降權是顯然的了。有些站長圖省事,直接在IDC提供的虛擬主機后臺設置404頁面,并在頁面上放置了類似或者js方式的windwo.location跳轉,結果是返回200狀態。
301 :頁面永久重定向時返回的HTTP狀態。目前公認的最正確的跳轉方法,并且可以起到權重傳遞作用。一般在程序作跳轉時先發送301狀態即可。如PHP中發送:header(“HTTP/1.1 301 Moved Permanently”); ASP中發送Response.Status=“301 Moved Permanently”
302 :頁面臨時跳轉時返回的狀態?,F在普遍認為使用302跳轉容易被搜索引擎視為作弊,據傳是早期302跳轉被濫用而留下的后遺癥。落葉不能算很老的站長,沒見過被濫用啥樣子,不過呢,302跳轉更多的是作為功能性跳轉,基本目前的每一個網站程序中都會用到,如添加一篇文章,自動跳轉回列表頁;操作成功/失敗提示自動跳轉等。ASP中的response.redirect跳轉,PHP中的普通header跳轉返回的都是302狀態。這些跳轉,一般是在網站后臺操作時的功能性跳轉,不會對SEO產生影響。但如果作為前臺頁面跳轉,那就值得斟酌了。
500 :頁面代碼出錯時返回的狀態。通常站長朋友們經常遇到標題中提示“內部服務器錯誤”,其實這種情況大多數是因為訪問的網站或者頁面ASP或者PHP等出現代碼錯誤,如語法錯誤、數據庫連接錯誤等,而恰好服務器環境關閉了出錯信息的輸出提示,所以在出錯時,站長看到的就是500狀態的“內部服務器錯誤”。很多朋友在遇到這個問題時,搜索一翻,發現好多很專業的很專業的不知所云的文章,說了一大堆啥問題啥問題,而實際結果發現,就是PHP文件某行代碼少了個分號。
常見的跳轉代碼返回的狀態碼:
1、靜態頁HTTP跳轉:
跳轉代碼:
返回狀態碼:200
2、JS跳轉
跳轉代碼:
返回狀態:200
3、JS延時跳轉
跳轉代碼:
function countDown(secs,surl){
//alert(surl);
tiao.innerText=secs;
if(--secs>0){
setTimeout("countDown)"+secs+",'"+surl+"')",1000);
}
else{
location.href=surl;
}
}
4、3秒后自動跳轉到PHPINFO頁面
返回狀態碼:200
5、ASP的跳轉
跳轉代碼:
<% response.redirect http://www.baidu.com %>
返回狀態:302
6、PHP跳轉
跳轉代碼:
返回狀態:302
了解到這幾個常見的HTTP狀態碼的所代表的含義,那在不同的環境下,應該怎樣處理,以保證404頁設置正確呢?
IIS服務器上設置404頁面
把制作好的404頁面放在網站根目錄下,在IIS管理器中右鍵點擊需要設置404的站點的屬性,點擊“自定義錯誤”選項卡,在HTTP錯誤類型列表中找到404錯誤,進行編輯,消息類型選擇“文件”,然后點擊“瀏覽”選擇網站根目錄下的404頁面。
原則上,該404頁面并非一定要放在網站根目錄下,放在網站的任何目錄下均可,亦可直接放到C:\WINDOWS\help\iisHelp\common\ 目錄下,并且文件名不一定需要叫404.htm
落葉做過測試,通過服務器上IIS這里設置的404頁面,只要設置方式是按如上操作的,即使404.htm是使用的原本會發送200狀態的靜態跳轉代碼或JS跳轉代碼,仍然能正常返回404狀態。
1、APACHE服務器上設置404頁面
訪問Apache目錄下的conf目錄下的extra目錄,記事本打開httpd-vhosts.conf,在子站點的配置文件中加上ErrorDocument 404 /404.html,然后做一個404.html放置在網站根目錄下,重啟APACHE服務即可生效。
具體示例如下:
ServerAdmin [email protected]
DocumentRoot "E:\AppServ\www\empirecms"
ServerName pmume.com
ServerAlias www.pmume.com
ErrorDocument 404 /404.html
ErrorLog "logs/dummy-host.x-error.log"
CustomLog "logs/dummy-host.x-access.log" common
2、IIS虛擬主機上設置404
目前國內流傳的IIS下的偽靜態規則組件ISAPI_Rewrite都是試用版或者破解版,貌似都不能很好的支持301、404的重寫。所以沒辦法通過httpd.ini里面的偽靜態規則來實現404重寫。目前IIS虛擬主機設置404的較方便的方法,還是在IDC提供的虛擬主機管理后臺進行404設置。但很多虛擬主機管理后臺的404設置功能并不是太理想,建議這類型的用戶404頁面中不要設置跳轉,否則很可能導致的是404跳轉返回200狀態,起到反作用。
有很多人想通過選擇404.asp或404.php,然后在404里面作些跳轉,結果發現返回的是200狀態。其實這里還是老老實實選擇第4個吧。
3、Apache虛擬主機上設置404
根目錄下新建.htaccess文件,(一般APACHE虛擬主機根目錄下或者CMS都會提供這么一個文件,如果自己在WIN下創建是沒法成功的,會提示文件名不能為空。)
在里面規則后面加上ErrorDocument 404 /err404.html即可。