ASP.NET中利用HTTP報頭狀態(tài)碼實(shí)現(xiàn)SEO
我們將在這里介紹一些ASP.NET開發(fā)過程中,利用HTTP報頭狀態(tài)碼進(jìn)行SEO的實(shí)例。其實(shí)這樣的SEO更多的是為了方便檢查錯誤狀態(tài),實(shí)現(xiàn)更好的頁面體驗,而不是簡單單純的迎合搜索引擎式的SEO。
我們經(jīng)常說“404錯誤”,你知道他指的是什么意思么?
404其實(shí)是Http報頭所包含的一個“狀態(tài)碼”,表明該Http請求失敗。那么除此之外,還有哪些常用的狀態(tài)碼呢?這些狀態(tài)碼和SEO又有什么關(guān)系呢?
每次當(dāng)用戶代理(可以理解為就是IE和Firefox)向Web站點(diǎn)請求一個URL地址,服務(wù)器都會給予回復(fù),回復(fù)內(nèi)容包括兩部分:HTTP報頭,和被請求的內(nèi)容。但僅從瀏覽器上我們通常只能看到內(nèi)容而看不到報頭信息。所以,我們需要通過一些瀏覽器插件來觀察他們。就我個人而言,IE我用WebDeveloper;FireFox我用Fiddler。有興趣的朋友可以在網(wǎng)上自行下載,兩個都是相當(dāng)流行的。 對SEO而言,我們需要了解的狀態(tài)代碼有:重定向:301和302 被刪除:404 服務(wù)器錯誤:500 我們依次講解,首先將302。302在asp.net中有一個很常見的原型:Response.Redirect(),請看代碼:
- protected void Button1_Click(object sender, EventArgs e)
- {
- Response.Redirect("~/target.aspx");
- //Server.Transfer("~/target.aspx");
- }
source.aspx頁面上一個Button,Click事件中代碼為Response.Redirect(~/target.aspx),點(diǎn)擊source.aspx頁面Button,查看該頁面對應(yīng)的狀態(tài)碼,結(jié)果就是302。(如下圖,我使用的是Web Development,不知道為什么enable log之后,就無法再轉(zhuǎn)到target頁面了?各位同學(xué)知道原因的請指點(diǎn)一二)
但可以查看詳細(xì)信息,可以發(fā)現(xiàn)302的影響,response指明了要轉(zhuǎn)向的url。
客戶端/服務(wù)器之間往返的過程其實(shí)是這樣的:
1. 點(diǎn)擊Button,產(chǎn)生回發(fā),回發(fā)的目標(biāo)頁面仍然是source.aspx,所以請求仍由source.aspx頁面進(jìn)行處理,這樣才能進(jìn)入source.aspx頁面的Click事件;
2. Click事件中,Response.Redirect(~/target.aspx)所作的事情實(shí)際上就是:
2.1 將回復(fù)中Http報頭的狀態(tài)碼改成302;
2.1 指明302指向的頁面就是target.aspx;
3. 瀏覽器(用戶代理)收到回復(fù)的報頭信息后,
3.1 將URL地址欄的地址改成target.aspx;
3.2 向target.aspx發(fā)出請求 和Response.Redirect()同樣著名的是Server.Transfer()。但使用Server.Transfer,你會發(fā)現(xiàn),頁面對應(yīng)的狀態(tài)碼是200,且地址欄的url并不會發(fā)生改變,仍然是source.aspx!這是因為Server.Transfer是完全在服務(wù)器端進(jìn)行跳轉(zhuǎn)的。所以一種很流行但我覺得不那么正確的說法就是:應(yīng)當(dāng)使用Server.Transfer()而不是Response.Redirect()來提高性能。因為在得到Server.Transfer()性能提升的同時,你應(yīng)該權(quán)衡:性能的提高,和由此產(chǎn)生的代價。很難直接給出一個答案,這需要依靠具體的情景來做判斷。
但我傾向于盡量不使用Server.Transfer(),因為:1. 性能提升不大,節(jié)約的其實(shí)就是報頭信息的往返;2. 清晰的URL無論對于終端用戶,還是開發(fā)調(diào)試,都有很重要的作用。 好了,理解了302,301也就好辦了。302意味著重定向是暫時的,而301則是***的重定向。
就SEO而言,為了延續(xù)鏈接價值和排除重復(fù)內(nèi)容 ,我們在以下幾種情況下都可能會用到301: 1. 域名更換; 2. 多個域名間映射;如www.freeflying.com和www.freeflying.cn,兩個域名其實(shí)指向的是同一個網(wǎng)站,這就會造成大量的重復(fù)內(nèi)容,對網(wǎng)站的排名不利。 3. 清除默認(rèn)索引頁的重復(fù)問題:比如我們輸入www.freeflying.com/article/時,如果在IIS里進(jìn)行了設(shè)定,將指向www.freeflying.com/article/Default.aspx 4. 其他的“不同域名相同內(nèi)容”的重復(fù)問題,典型的就是URL重寫后,www.freeflying.com/article/321.html和www.freeflying.com/article.aspx?id=321指向的其實(shí)都是同一個網(wǎng)頁內(nèi)容。 對于404,最直觀的理解就是頁面不存在。如果網(wǎng)站是純靜態(tài)的,這很好理解;但當(dāng)網(wǎng)站做成動態(tài)之后,如www.freeflying.com/article/321.html(映射為www.freeflying.com/article.aspx?id=321),雖然id=321的文章已經(jīng)被刪除了,或者根本不存在,但article.aspx這個頁面始終是存在的,所以HTTP報頭的狀態(tài)碼不會是404,而是200,表示請求成功。我們假設(shè)一個網(wǎng)站有id=321/342/6739……的文章都被刪除了,但蜘蛛并不知道,它仍然會進(jìn)行抓取,結(jié)果它發(fā)現(xiàn),這些不同的URL對應(yīng)的居然全是同一個頁面。它就會將其當(dāng)做重復(fù)頁面進(jìn)行處理。 500意味著程序內(nèi)部出現(xiàn)異常,比如3/0,代碼如下:
- protected void Button1_Click(object sender, EventArgs e)
- {
- int i, j;
- i = 8;
- j = 0;
- this.Label1.Text = (i / j).ToString();
- }
好了,認(rèn)識到問題的嚴(yán)重性之后,我們來看解決問題的辦法,太簡單了,呵呵
- protected void Page_Load(object sender, EventArgs e)
- {
- //如果你希望搜索引擎知道這個url將不再使用
- Response.StatusCode = 404;
- //如果你希望告訴搜索引擎這個url只是出現(xiàn)了暫時的故障
- Response.StatusCode = 500;
- //如果你想***重定向該頁面
- Response.StatusCode = 301;
- Response.RedirectLocation = @"\website1\target.aspx";
- }
原文標(biāo)題:ASP.NET的SEO:HTTP報頭狀態(tài)碼---內(nèi)容重定向
鏈接:http://www.cnblogs.com/freeflying/archive/2010/02/24/1672308.html
【編輯推薦】