Asp.Net程序員與SEO – Viewstate優化

什麼是Viewstate?

例如:
input type=hidden name=__VIEWSTATE id=__VIEWSTATE value=DwxNTgzOTU2ODA7dDw7bDxpPDE+Oz47bDx0PDtsPGk8MT47PjtsPHQ8QDA8cDxwPGw8UGFnZUNvdW50O18hSXRlbUNvdW50O18hRGF0YVNvdXJjZUl0ZW1Db3VudDtEYXRhS2V5czs+O2w8aTwxPjtpPDg+O2k8OD47bDw+Oz4+Oz47Ozs7Ozs7OztAMDxAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9pZDtwdWJfaWQ7cHViX2lkO288Zj47Pj47Ozs7PjtAMDxwPGw8SGVhZGVyVGV4dDtEYXRhRmllbGQ7U29ydEV4cHJlc3Npb247UmVhZE9ubHk7PjtsPHB1Yl9uYW1lO3B1Yl9uYW1lO3B1Yl9uYW1 lO288Zj47Pj47Ozs7PjtAMDxw />

當我看到這一大片內容的時候就覺得這是一個asp.net SEO過程中的難題,一直沒有找到方法,這些天查瞭下英文站找到瞭這個方法。下面是我看瞭Search Engine Optimization – Moving View State to the bottom of the page(/blog/PermaLink,guid,7924eaf8-b406-43af-9444-b816f6dfa246.aspx)這篇文章後,覺得該方法可行,就翻譯瞭一下,我英文水平有限,隻把我看懂的大概意思和自己的理解寫下來,希望對大傢有幫助。

當我們去對一個ASP.Net頁面做SEO的時候,會發現一個很大的問題那就是隱藏的視圖狀態。很多搜索引擎都明確頁面抓取的界限,那就是隻會抓取到網頁前幾千個字節的文本內容,所以當你頁面的前2KB是ViewState垃圾的時候,你的頁面很可能會遭到處罰。那麼我這篇文章的目的就是把視圖狀態數據移動到盡可能少。

我已經發現一些途徑來解決這個問題,在響應輸出的時候重寫最終的HTML編碼。當這個方法執行後我發先它占有很大的CPU使用。所以,我需要一種方式既能實現功能又不浪費的CPU的方法。我發現反射的方式做到這一點。我的方法使用的ASP.NET控制適配器架構。

控制適配器是一個可以用來控制所產生的HTML控制它適應的類。由於頁面類,是一種負責任的渲染視圖狀態隱藏字段( Page.BeginFormRender調用Page.RenderViewStateFields ),適配器的網頁是必要的。然而,視圖狀態隱藏字段在ASP.NET基礎架構中起著關鍵作用和難以修改相關的HTML 。

一個PageAdapter有一個方法叫做GetStatePersister()返回的對象繼承於PageStatePersister 。當加載和保存視圖狀態的時候調用PageStatePersister。這裡有2個類是從PageStatePersister : HiddenFieldPageStatePersister和SessionPageStatePersister繼承來的。第一種是默認情況下,存儲視圖狀態中的隱藏字段名為__VIEWSTATE 。第二個存儲視圖狀態在session中。因此,我們可以很容易地創建一個自定義PageStatePersister來控制視圖狀態加載和保存過程。最大的問題是如何在form標記關閉之前建立隱藏的視圖狀態,同時以完全透明的解決辦法。經過一些嘗試我想出瞭一個解決方案,我很高興的。

我意識到,這是不可能完全從頁面頂部刪除視圖狀態隱藏字段,因為他在ASP.NET的架構這方面發揮著關鍵作用。但是,同任何自定義頁面狀態持續的ASP.NET基礎架構提供至少一個空視圖狀態的隱藏字段隻有70字節:

<input type=hiddenname=__VIEWSTATEid=__VIEWSTATEvalue=/>

相關閱讀:

Asp.Net程序員與SEO – .Net的URL靜態化

Asp.Net程序員與SEO – .Net基於SEO友好數據分頁

Asp.Net程序員與SEO – 關註Sitemap