.net 网站生成 页面后,会有 <input type="hidden" name="__VIEWSTATE" >

这个是Asp.net应用ViewState技术的特征表现,专用来保存页面状态的,为了页面能在PostBack后依然能读取服务器控件原有的状态数据,Asp.net中使用了ViewState技术,而ViewState技术本质上是用一个默认名称为"__VIEWSTATE的Hidden类型表单域来保存和传递数据,然后当在大量使用viewstate时产生的value是相当夸张的(对于SEO来说)。因为我们知道很多搜索引擎的搜索结果中会看到网页大小,在内容和功能确定的前提下,网页字节数越小,打开速度越快,对搜索蜘蛛的爬行越有利。而当我们的ASP.NET页面中的<input type="hidden" name="__VIEWSTATE" >www.ynyes.com天度网络 联系sojay.cnblogs.com
在网络上找到了一些。转帖过来。

第一种,直接不再页面上输出input type=hidden name="__VIEWSTATE"。这种方法在页面没有使用viewstate的时候可以使用。


 

编译后生成的dll文件名为Blackant.Controls.dll
然后在web项目中引用这个dll
修改web.config,加入以下内容于System.Web配置节

Asp.net SEO优化,针对    <httpModules>
Asp.net SEO优化,针对      
<add name="HiddenInputFilter" type="Blackant.Controls.HiddenInputHttpModule,Blackant.Controls"/>
Asp.net SEO优化,针对    
</httpModules>


其实核心内容很简单
HiddenInputHttpModule中如下指示使用页面过滤器
 HiddenInputFilter filter = new HiddenInputFilter(response.Filter);
response.Filter = filter;
 HiddenInputFilter 中则
string finalHtml = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
            //找到<input type="hidden" name="__VIEWSTATE"
            string pattern=@"\<input type=""hidden"" name=""__VIEWSTATE""[^\>]*\>";
            finalHtml=Regex.Replace(finalHtml, pattern, string.Empty, RegexOptions.IgnoreCase | RegexOptions.Multiline);
替换掉<input type="hidden" name="__VIEWSTATE" ..../>标签

www.ynyes.com天度网络 联系sojay.cnblogs.com

第二种:将ViewState持久化保持在服务器端,此方法不推荐使用。原文地址:
http://topic.csdn.net/u/20080530/22/ef0d36a4-6bd4-4eba-9743-b56f080b2161.html

asp.net2.0里测试的代码,放到页面中,引用using System.IO; using System.Threading;

www.ynyes.com天度网络 联系sojay.cnblogs.com

第三种:将ViewState的位置调整到页面底部

www.ynyes.com天度网络 联系sojay.cnblogs.com

 

www.ynyes.com天度网络 联系sojay.cnblogs.com

不知道还有没有好的方法,解决多SEO友好的优化方式。

相关文章: