301跳轉(zhuǎn)與URL轉(zhuǎn)發(fā)
在購買域名時,域名本身是不帶有www的,但由于域名要通過DNS服務(wù)器解析后才可以使用,在這個過程中每一個域名是會指向一個web服務(wù)器ip地址,由于在很早之前網(wǎng)站方都會增加一個"www"的子域名來幫助客戶以更多的路徑訪問網(wǎng)站,客戶通常都會按照:"www.++.com"的形式來訪問站點(diǎn);如果你沒有做這個www的解析那么"www.++.com"就不能訪問,對于不懂技術(shù)或者不明白解析的客戶來講,這個問題可能會造成他不能訪問你的站,因?yàn)樗皇侵烙脦в?www"的形式訪問你的站點(diǎn),可能不知道"++.com"也是同樣可以訪問的!所以,后來也就有了更多人在延續(xù)這個做法;我們在購買空間域名時,服務(wù)商也會隨手就幫你做了這個"www"的解析,當(dāng)然,這個解析的服務(wù)器地址是和沒有"www"相同的,造成:你用帶"www"的和不帶兩個域名同時可以訪問一個同樣的內(nèi)容。說白了這個問題的答案就是:能夠讓初次使用互聯(lián)網(wǎng)的人更快的訪問進(jìn)你的網(wǎng)站。
但是這樣的話,會分散某個域名的流量與PR值,最好是將所有訪問定向到某個域名下。
可以通過使用服務(wù)器技術(shù)實(shí)現(xiàn)的url轉(zhuǎn)發(fā)功能(url-forwarding 或 url redirect),轉(zhuǎn)發(fā)到帶www的域名來訪問。但是我們說到用這種url轉(zhuǎn)發(fā)方式是對seo不利的,對搜索引擎最友好的跳轉(zhuǎn)方式是使用301轉(zhuǎn)向(也叫301跳轉(zhuǎn),301重定向)。
所以這里就有一些疑問了,為什么godaddy等域名注冊商提供的url轉(zhuǎn)發(fā)功能是不利于seo的?url轉(zhuǎn)發(fā)的原理是什么?如果要用301轉(zhuǎn)向,那么Linux apache, Windows IIS, php, ASP, ASP.NET, JSP 分別該如何設(shè)置來實(shí)現(xiàn)301重定向?
301重定向的作用
為什么要使用301轉(zhuǎn)向?首先第一條就是剛才我們提到的為了
seo優(yōu)化,在如何url網(wǎng)址規(guī)范化中也提到,設(shè)置301轉(zhuǎn)向后,原來的頁面將返回301 HTTP 狀態(tài)碼給瀏覽器或者搜索引擎,告知搜索引擎次頁面已經(jīng)永久重定向到了新的網(wǎng)頁上,spider就不會索引原網(wǎng)頁,同時也會將原網(wǎng)頁的PR權(quán)重傳遞給跳轉(zhuǎn)到的新網(wǎng)頁。如果返回的是302狀態(tài)碼,則告訴spider頁面跳轉(zhuǎn)只是臨時的,spider仍然會索引原網(wǎng)頁,這就造成了重復(fù)頁面問題(即Google 補(bǔ)充材料)。如cxtj168.cn 302跳轉(zhuǎn)到y(tǒng)anet.cn,它們就會被當(dāng)做兩個重復(fù)頁面。
其次,由于各種原因要更換域名時,可以使用301重定向?qū)⒗嫌蛎?01轉(zhuǎn)向到新的域名,這樣老域名的流量不會流失,PR權(quán)重也會轉(zhuǎn)移。另外當(dāng)有注冊了多個不同域名,指向到同一網(wǎng)站時,也可以只設(shè)置一個主域名,將其他域名設(shè)置301轉(zhuǎn)向到主域名,這樣各個域名就不會分散權(quán)重。因此使用301轉(zhuǎn)向很有必要。
URL轉(zhuǎn)發(fā)的原理
url轉(zhuǎn)發(fā)有兩種方式,隱藏轉(zhuǎn)發(fā)和(url轉(zhuǎn)發(fā)后瀏覽器地址欄輸入的網(wǎng)址不變)不隱藏轉(zhuǎn)發(fā)(也叫顯性轉(zhuǎn)發(fā):url轉(zhuǎn)發(fā)后地址欄顯示的地址為轉(zhuǎn)發(fā)后的網(wǎng)址)。有人測試過,不管是隱藏轉(zhuǎn)發(fā)還是不隱藏轉(zhuǎn)發(fā),根據(jù)不同的域名注冊服務(wù)商,可能會返回不同的http header。有的域名服務(wù)商管理后臺設(shè)置的url轉(zhuǎn)發(fā)功能(URL Forwarding)會使服務(wù)器返回302狀態(tài)碼給搜索引擎,而不是301 http 狀態(tài)碼。
據(jù)說這類url轉(zhuǎn)發(fā)有的是通過給瀏覽器窗口套用一個框架iframe的方式來實(shí)現(xiàn)隱藏轉(zhuǎn)發(fā),有的則是使用Javascript或Meta Refresh來實(shí)現(xiàn)不隱藏方式的url轉(zhuǎn)發(fā),很少是真正用了301 重定向方法的。所以大家還是盡量少用url轉(zhuǎn)發(fā)功能,而是自己去手工設(shè)置實(shí)現(xiàn)301轉(zhuǎn)向。
如何實(shí)現(xiàn)301重定向
前面我們已經(jīng)提到了很多關(guān)于WordPress等404頁面的設(shè)置方法。設(shè)置301重定向(301轉(zhuǎn)向,跳轉(zhuǎn))的實(shí)現(xiàn)方法也有很多,下面根據(jù)不同的空間服務(wù)器類型和程序語言列出各種301重定向?qū)崿F(xiàn)代碼,要參考的童靴請對號入座:
Linux 主機(jī) Apache服務(wù)器 Mod-Rewrite 模式:通過.htaccess文件
當(dāng)瀏覽器或搜索引擎spider發(fā)送一個頁面請求時,Web服務(wù)器就會檢查一個名為'.htaccess'的文件,這個文件指明了如何處理頁面請求,通過修改設(shè)置'.htaccess'文件就可以告知搜索引擎某個頁面是302轉(zhuǎn)向(臨時跳轉(zhuǎn))還是301重定向(永久性跳轉(zhuǎn))。有的Linux主機(jī)服務(wù)器還支持你在管理后臺直接設(shè)置301轉(zhuǎn)向。如果不能在后臺設(shè)置,實(shí)現(xiàn)301重定向步驟也很簡單:新建一個文件名為.htaccess.txt的文檔(注意前面的點(diǎn)號不能遺漏),在txt文檔中寫入以下301轉(zhuǎn)向代碼:
view source
print?
1
Options +FollowSymLinks
2
RewriteEngine on
3
rewritecond %{http_host} ^yanet.cn [nc]
4
rewriterule ^(.*)$ http://cxtj168.cn/$1 [r=301,nc]
或者
view source
print?
1
RewriteEngine On
2
RewriteCond %{HTTP_HOST} !^
yanet.cn$ [NC]
3
RewriteRule ^(.*)$ http://cxtj168.cn/$1 [L,R=301]
保存文件,將文件名稱末尾的.txt去掉,上傳到網(wǎng)站根目錄即可。上面的代碼表示整站所有的以帶www的域名cxtj168.cn為地址的網(wǎng)頁都會301轉(zhuǎn)向到不帶www的域名yanet.cn(不僅是首頁,子目錄/網(wǎng)頁也可以)。如果是其他域名要重定向到 yanet.cn 這個新域名,則在.htaccess文件中加入如下重定向代碼:
view source
print?
1
Options +FollowSymLinks
2
RewriteEngine on
3
RewriteRule ^(.*)$ http://cxtj168.cn/$1 [L,R=301]
Windows主機(jī)IIS下的301轉(zhuǎn)向設(shè)置
在IIS 管理后臺 -> 選擇你要重定向的文件或文件夾 -> 右鍵"重定向到URL" -> 輸入需要轉(zhuǎn)向的目標(biāo)URL ->選擇"資源的永久重定向"。
另外,如果你的Windows虛擬主機(jī)空間支持ISAPI_Rewrite,那么在IIS下利用ISAPI_Rewrite不僅可以實(shí)現(xiàn)url 重寫,還可以用來設(shè)置301轉(zhuǎn)向,下面分別是三個版本的ISAPI_Rewrite對應(yīng)的帶www的域名301轉(zhuǎn)向到不帶www域名的代碼:
view source
print?
01
# ISAPI_Rewrite 1.3 版本 域名的301重定向
02
RewriteCond Host: ^www\.farlee\.info$
03
RewriteRule (.*) http\://farlee\.info$1 [I,R]
04
05
# ISAPI_Rewrite 2.x 版本
06
RewriteCond Host: ^www\.farlee\.info$
07
RewriteRule (.*) http\://farlee\.info$1 [I,RP]
08
09
# ISAPI_Rewrite 3.x 版本
10
RewriteCond %{HTTP:Host} ^www\.farlee\.info$
11
RewriteRule (.*) http\://farlee\.info$1 [NC,R=301]
在其他情況下,如不同域名之間在IIS下的301重定向代碼請看詳細(xì)介紹:ISAPI Rewrite實(shí)現(xiàn)IIS 301轉(zhuǎn)向。
PHP 301 重定向代碼
301重定向也可以在php文件中通過加入php header來實(shí)現(xiàn),代碼如下:
view source
print?
1
2
header("HTTP/1.1 301 Moved Permanently");
3
header("Location:http://cxtj168.cn/");
4
exit();
5
?>
ASP 301 重定向代碼
view source
print?
1
<%@ Language=VBScript %>
2
<%
3
Response.Status="301 Moved Permanently"
4
Response.AddHeader"Location", http://yanet.cn
5
%>
ASP.NET 301 重定向代碼
view source
print?
1
CGI Perl下的301轉(zhuǎn)向代碼
view source
print?
1
$q=newCGI;
2
print$q->redirect("http://cxtj168.cn/");
JSP下的301轉(zhuǎn)向代碼
view source
print?
1
<%
2
response.setStatus(301);
3
response.setHeader("Location", "http://cxtj168.cn/");
4
response.setHeader("Connection","close");