ASP.NET的SEO:HTTP報頭狀態碼 內容重定向

我們經常說404錯誤,你知道他指的是什麼意思麼?404其實是Http報頭所包含的一個狀態碼,表明該Http請求失敗。那麼除此之外,還有哪些常用的狀態碼呢?這些狀態碼和SEO又有什麼關系呢?

每次當用戶代理(可以理解為就是IE和Firefox)向Web站點請求一個URL地址,服務器都會給予回復,回復內容包括兩部分:HTTP報頭,和被請求的內容。但僅從瀏覽器上我們通常隻能看到內容而看不到報頭信息。所以,我們需要通過一些瀏覽器插件來觀察他們。就我個人而言,IE我用WebDeveloper;FireFox我用Fiddler。有興趣的朋友可以在網上自行下載,兩個都是相當流行的。

對SEO而言,我們需要瞭解的狀態代碼有:

重定向:301和302

被刪除:404

服務器錯誤:500

我們依次講解,首先將302。302在asp.net中有一個很常見的原型:Response.Redirect(),請看代碼:

protectedvoidButton1_Click(objectsender,EventArgse)
{
Response.Redirect(~/target.aspx);
//Server.Transfer(~/target.aspx);
}

source.aspx頁面上一個Button,Click事件中代碼為Response.Redirect(~/target.aspx),點擊source.aspx頁面Button,查看該頁面對應的狀態碼,結果就是302。(如下圖,我使用的是Web Development,不知道為什麼enable log之後,就無法再轉到target頁面瞭?各位同學知道原因的請指點一二)

但可以查看詳細信息,可以發現302的影響,response指明瞭要轉向的url。

客戶端/服務器之間往返的過程其實是這樣的:

1. 點擊Button,產生回發,回發的目標頁面仍然是source.aspx,所以請求仍由source.aspx頁面進行處理,這樣才能進入source.aspx頁面的Click事件;

2. Click事件中,Response.Redirect(~/target.aspx)所作的事情實際上就是:

2.1 將回復中Http報頭的狀態碼改成302;

2.1 指明302指向的頁面就是target.aspx;

3. 瀏覽器(用戶代理)收到回復的報頭信息後,

3.1 將URL地址欄的地址改成target.aspx;

3.2 向target.aspx發出請求

和Response.Redirect()同樣著名的是Server.Transfer()。但使用Server.Transfer,你會發現,頁面對應的狀態碼是200,且地址欄的url並不會發生改變,仍然是source.aspx!這是因為Server.Transfer是完全在服務器端進行跳轉的。所以一種很流行但我覺得不那麼正確的說法就是:應當使用Server.Transfer()而不是Response.Redirect()來提高性能。因為在得到Server.Transfer()性能提升的同時,你應該權衡:性能的提高,和由此產生的代價。很難直接給出一個答案,這需要依靠具體的情景來做判斷。但我傾向於盡量不使用Server.Transfer(),因為:1. 性能提升不大,節約的其實就是報頭信息的往返;2. 清晰的URL無論對於終端用戶,還是開發調試,都有很重要的作用。

好瞭,理解瞭302,301也就好辦瞭。302意味著重定向是暫時的,而301則是永久的重定向。