301重定向實現方法和對網站優化的作用
作者:晉城網站建設 日期:2012-02-16
301重定向(也叫301轉向,301跳轉)對網站優化所起的作用是不可忽視的,尤其是針對SE(搜索引擎)處理網站頁面權重的時候,更加顯得重要。網站換了新域名,默認首頁需要跳轉等,從SEO角度來說,我們都建議使用301重定向,而不是JS跳轉或METAREFRESH或302轉向,這些很容易引來SE的懲罰。
什么是301重定向呢?
301重定向是當用戶或搜索引擎向網站服務器發出瀏覽請求時,服務器返回的HTTP數據流中頭信息(header)中的狀態碼的一種,表示本網頁永久性轉移到另一個地址。其它常見的狀態碼還包括,200表示一切正常,404網頁找不到,302暫時轉向,等等。
為什么要用301轉向?
網址轉向方法主要包括:301轉向,302轉向,JavaScript轉向,PHP/ASP/CGI轉向,METAREFRESH網頁META刷新等。302轉向可能會有URL規范化問題。其它方法都是常用的作弊手法,當然不是說不可以正當地用,方法本身沒有錯,但被作弊者用多了,搜索引擎對這些可疑的轉向都很敏感。何必冒險呢。
關于301轉向和網址規范化問題,大家可以去閱讀下ZAC寫的文章。本文,僅僅討論在ASP環境下,如何設置301重定向問題;其他語言亦可參考。
我們知道,網站的首頁一般有以下幾種:
http://piaoyi.org
http://www.piaoyi.org
http://piaoyi.org/index.asp
http://www.piaoyi.org/index.asp
…… 很自然的,以上的這些網址形式都指向到了一個網站,如果在搜索引擎中都啟用這些形式,那么,網頁權重,PR都會分散到這幾個網址上,雖然,它們都是一個網站,而這不是我們想要的結果。那么,如何將以上的首頁形式都定向到自己想要的網址上呢,比如http://www.piaoyi.org,從而使得這些分散的網頁權重,PR都集中到www.piaoyi.org上。這里就需要使用301永久重定向了。 ASP語言下,我們需要在默認首頁,如index.asp頂部最上方加入以下代碼: <%
Dimdm,sn
dm=Request.ServerVariables("Server_name")'獲取域名
'這里的3是指www的長度
ifleft(dm,3)<>"www"then
Response.Status="301MovedPermanently"
Response.AddHeader"Location","http://www.piaoyi.org"
Response.End
endif
%>
這里的代碼是經過flymorn加工后的,您也可以根據實際需要對本代碼進行適當的修改以適合你需求的樣式。本代碼自動校驗沒有輸入www的,301跳轉到www.piaoyi.org這個網址上,從而使得網頁權重得到累加,達到SEO優化的目的。 但這里出現一個問題,如果有鏈接指向到http://www.piaoyi.org/index.asp(比如站內鏈接),那么搜索引擎也同樣會給這個網址形式加分,雖然index.asp是默認首頁,但我們希望的是把所有權重都給與http://www.piaoyi.org這個形式。有人說,這兩個形式不是都一樣嗎?不一樣。比如:http://www.023ff.com的PR為0,而http://www.023ff.com/index.asp的PR為2。從這點可以看出,SE是給與是否有index.asp的網址形式以不同的權重的。而使用Request.ServerVariables("SCRIPT_NAME")或Request("url")獲取到的后綴無論輸入時是否帶有index.asp都一律返回index.asp,從而導致無法判斷,也無法使用301重定向,當然這是指僅asp語言環境。 目前解決方法就是,利用js獲取當前網址window.location.href,然后把這個當前網址寫入cookies;asp讀取這個cookies,從而判斷網址中是否包含index.asp,如果包含,就使用301重定向。建議:在任何鏈接中避免有直接指向index.asp的形式,包括外鏈及內鏈,尤其是內鏈。這只是一個折中的方法。針對該問題,希望與各位高手一起討論。如果您有其他解決的方法,請留下您的評論。 利用js通過cookies給asp傳遞網址的代碼如下: <scriptlanguage="javascript">
varurl=window.location.href.toLowerCase();//小寫
document.cookie="urlck"+"="+escape(url);
</script> <%
Dimsn
sn=request.cookies("urlck")'獲取后綴
response.cookies("urlck")=""'清空cookies ifright(sn,11)="default.asp"then
Response.Status="301MovedPermanently"
Response.AddHeader"Location","http://www.piaoyi.org"
Response.End
endif
%> 但是很遺憾,如果這些網址形式不是實際上的人為輸入,而是搜索引擎訪問的結果,搜索引擎又是忽略JS的,也就是說,js里賦值的cookie并不能被SE識別,從而導致也無法使用301跳轉。這個問題有待解決。 其他語言下的301重定向: 1、Unix/Linux+Apache主機,在.htaccess文件中增加301轉向指令,采用mod_rewrite技術,如:PHP代碼 Options+FollowSymLinks
RewriteEngineon
RewriteCond%{HTTP_HOST}^www.piaoyi.org[NC]
RewriteRule^(.*)$http://piaoyi.org/$1[L,R=301] 2、Window+IIS主機,在服務器軟件的系統管理員配置中設置,方法: 打開Internet信息服務管理器,在欲重定向的網頁或目錄上按右鍵,選中“重定向到URL”,在對話框中輸入目標頁面的地址,記得選中“資源的永久重定向”->“應用”。 3、用PHP/ASP.NET實現301轉向(HTML無法做301轉向),方法如下: 1)用PHP實現 PHP代碼
<?Header("HTTP/1.1301MovedPermanently");
Header("Location:http://piaoyi.org");?> 2)用ASP.NET實現 ASP/VisualBasic代碼
<scriptrunat="server">
privatevoidPage_Load(objectsender,System.EventArgse)
{
Response.Status="301MovedPermanently";
Response.AddHeader("Location","http://piaoyi.org");
}
</script> 經過這些設置后,301轉向應該可以配置OK啦,如果想檢查一下是否正確,則可以使用網上提供ServerHeader檢查工具,如CheckServerHeadersTool-HTTPStatusCodesChecker。 用以上檢測http狀態碼工具,可以做個簡單的檢查,如檢查http://023ff.com,返回的結果如下: #1ServerResponse:http://023ff.com
HTTPStatusCode:HTTP/1.1301MovedPermanently
Connection:close
Date:Mon,25Feb200801:54:09GMT
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
Location:http://www.023ff.com
Content-Length:0
Content-Type:text/html
Set-Cookie:ASPSESSIONIDACBCSBDR=FCJELLLALFNPOCMBNMOLMJHN;path=/
Cache-control:private
RedirectTarget:http://www.023ff.com #2ServerResponse:http://www.023ff.com
HTTPStatusCode:HTTP/1.1200OK
Connection:close
Date:Mon,25Feb200801:54:13GMT
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
Content-Length:29330
Content-Type:text/html
Set-Cookie:ASPSESSIONIDACBCSBDR=GCJELLLAECPBADKMADAJOBLC;path=/
Cache-control:private
注意以上返回的結果中第二行“HTTPStatusCode:HTTP/1.1301MovedPermanently”,說明這個網址采用了301永久重定向功能了,設置成功。如果您對本文有任何看法,歡迎留下您的評論,以便我們一起探討。
http://www.piaoyi.org
http://piaoyi.org/index.asp
http://www.piaoyi.org/index.asp
…… 很自然的,以上的這些網址形式都指向到了一個網站,如果在搜索引擎中都啟用這些形式,那么,網頁權重,PR都會分散到這幾個網址上,雖然,它們都是一個網站,而這不是我們想要的結果。那么,如何將以上的首頁形式都定向到自己想要的網址上呢,比如http://www.piaoyi.org,從而使得這些分散的網頁權重,PR都集中到www.piaoyi.org上。這里就需要使用301永久重定向了。 ASP語言下,我們需要在默認首頁,如index.asp頂部最上方加入以下代碼: <%
Dimdm,sn
dm=Request.ServerVariables("Server_name")'獲取域名
'這里的3是指www的長度
ifleft(dm,3)<>"www"then
Response.Status="301MovedPermanently"
Response.AddHeader"Location","http://www.piaoyi.org"
Response.End
endif
%>
這里的代碼是經過flymorn加工后的,您也可以根據實際需要對本代碼進行適當的修改以適合你需求的樣式。本代碼自動校驗沒有輸入www的,301跳轉到www.piaoyi.org這個網址上,從而使得網頁權重得到累加,達到SEO優化的目的。 但這里出現一個問題,如果有鏈接指向到http://www.piaoyi.org/index.asp(比如站內鏈接),那么搜索引擎也同樣會給這個網址形式加分,雖然index.asp是默認首頁,但我們希望的是把所有權重都給與http://www.piaoyi.org這個形式。有人說,這兩個形式不是都一樣嗎?不一樣。比如:http://www.023ff.com的PR為0,而http://www.023ff.com/index.asp的PR為2。從這點可以看出,SE是給與是否有index.asp的網址形式以不同的權重的。而使用Request.ServerVariables("SCRIPT_NAME")或Request("url")獲取到的后綴無論輸入時是否帶有index.asp都一律返回index.asp,從而導致無法判斷,也無法使用301重定向,當然這是指僅asp語言環境。 目前解決方法就是,利用js獲取當前網址window.location.href,然后把這個當前網址寫入cookies;asp讀取這個cookies,從而判斷網址中是否包含index.asp,如果包含,就使用301重定向。建議:在任何鏈接中避免有直接指向index.asp的形式,包括外鏈及內鏈,尤其是內鏈。這只是一個折中的方法。針對該問題,希望與各位高手一起討論。如果您有其他解決的方法,請留下您的評論。 利用js通過cookies給asp傳遞網址的代碼如下: <scriptlanguage="javascript">
varurl=window.location.href.toLowerCase();//小寫
document.cookie="urlck"+"="+escape(url);
</script> <%
Dimsn
sn=request.cookies("urlck")'獲取后綴
response.cookies("urlck")=""'清空cookies ifright(sn,11)="default.asp"then
Response.Status="301MovedPermanently"
Response.AddHeader"Location","http://www.piaoyi.org"
Response.End
endif
%> 但是很遺憾,如果這些網址形式不是實際上的人為輸入,而是搜索引擎訪問的結果,搜索引擎又是忽略JS的,也就是說,js里賦值的cookie并不能被SE識別,從而導致也無法使用301跳轉。這個問題有待解決。 其他語言下的301重定向: 1、Unix/Linux+Apache主機,在.htaccess文件中增加301轉向指令,采用mod_rewrite技術,如:PHP代碼 Options+FollowSymLinks
RewriteEngineon
RewriteCond%{HTTP_HOST}^www.piaoyi.org[NC]
RewriteRule^(.*)$http://piaoyi.org/$1[L,R=301] 2、Window+IIS主機,在服務器軟件的系統管理員配置中設置,方法: 打開Internet信息服務管理器,在欲重定向的網頁或目錄上按右鍵,選中“重定向到URL”,在對話框中輸入目標頁面的地址,記得選中“資源的永久重定向”->“應用”。 3、用PHP/ASP.NET實現301轉向(HTML無法做301轉向),方法如下: 1)用PHP實現 PHP代碼
<?Header("HTTP/1.1301MovedPermanently");
Header("Location:http://piaoyi.org");?> 2)用ASP.NET實現 ASP/VisualBasic代碼
<scriptrunat="server">
privatevoidPage_Load(objectsender,System.EventArgse)
{
Response.Status="301MovedPermanently";
Response.AddHeader("Location","http://piaoyi.org");
}
</script> 經過這些設置后,301轉向應該可以配置OK啦,如果想檢查一下是否正確,則可以使用網上提供ServerHeader檢查工具,如CheckServerHeadersTool-HTTPStatusCodesChecker。 用以上檢測http狀態碼工具,可以做個簡單的檢查,如檢查http://023ff.com,返回的結果如下: #1ServerResponse:http://023ff.com
HTTPStatusCode:HTTP/1.1301MovedPermanently
Connection:close
Date:Mon,25Feb200801:54:09GMT
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
Location:http://www.023ff.com
Content-Length:0
Content-Type:text/html
Set-Cookie:ASPSESSIONIDACBCSBDR=FCJELLLALFNPOCMBNMOLMJHN;path=/
Cache-control:private
RedirectTarget:http://www.023ff.com #2ServerResponse:http://www.023ff.com
HTTPStatusCode:HTTP/1.1200OK
Connection:close
Date:Mon,25Feb200801:54:13GMT
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
Content-Length:29330
Content-Type:text/html
Set-Cookie:ASPSESSIONIDACBCSBDR=GCJELLLAECPBADKMADAJOBLC;path=/
Cache-control:private
注意以上返回的結果中第二行“HTTPStatusCode:HTTP/1.1301MovedPermanently”,說明這個網址采用了301永久重定向功能了,設置成功。如果您對本文有任何看法,歡迎留下您的評論,以便我們一起探討。