吞吐设计,致力于打造企业建站第一品牌!

ASP.NET的SEO Linq to XML---网站地图和RSS Feed

浏览次数:正在读取   更新时间:2010-03-24

买空间、伺服器就上Tun2(Tun2.COM) 智能主机+国外主机=IDC.Tun2.COM。

网站地图的感化是让搜索引擎尽快的,更多的收录网站的各个网页。

这里我们起首要邃晓一个根本的道理,搜索引擎的爬行体式格局。整个互联网就像一张纵横交织的ldquo;网rdquo;:网的各个节点就是各个网页,而各个网页之间经由过程url互相毗邻。蜘蛛可以从一个网页出发,经由过程该网页上的url,爬到另一个网页;再经由过程另一个网页上的url,再爬到更多的网页hellip;hellip;,以此类推。但假如是一个新发布的网站,可能就没有其他url指向它,那么它就永远不会被ldquo;爬到rdquo;(收录)。为认识决这个问题,新站可以本身自动向搜索引擎提交url,申请蜘蛛前来抓取(Google申请网址:),但申请时一般只会提交一个主页的url。

为了让所有的url(尤其是动态生成的)都能被蜘蛛快捷便当的检索到,我们就需要供应一个周全完整、架构清楚和更新实时的网站地图。

和处置惩罚反复内容的robots.txt文件,我们经由过程.ashx文件来生成一个基于sitemaps.org的xml花样的网站地图。网站地图生成之后,我们就可以向Google等搜索引擎提交。年夜量的文档证实,提交网站地图将极年夜的提高网站的收录速度和深度。其他几乎所有的SEO方式,都有可能结果难以证实、掉效甚至带来副感化,但提交网站地图除外!

Linq to XML为我们带来了近乎完美的操作体验。

lt;%@nbsp;WebHandlernbsp;Language=quot;C#quot;nbsp;Class=quot;websitequot;nbsp;%gt;

usingnbsp;System;
usingnbsp;System.Web;
usingnbsp;System.Xml;
usingnbsp;System.Xml.Linq;
usingnbsp;System.Linq;

publicnbsp;classnbsp;websitenbsp;:nbsp;IHttpHandlernbsp;{
nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;voidnbsp;ProcessRequestnbsp;(HttpContextnbsp;context)nbsp;{

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;context.Response.ContentTypenbsp;=nbsp;quot;text/xmlquot;;

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//文件的声明信息,第第三个参数standalone的值yesnbsp;透露表现这个nbsp;XMLnbsp;文档是自包含的(self-contained)而不依靠于外部所界说的一个nbsp;DTD.nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XDeclarationnbsp;declarationnbsp;=nbsp;newnbsp;XDeclaration(quot;1.0quot;,nbsp;quot;UTF-8quot;,nbsp;quot;yesquot;);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;context.Response.Write(declaration);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//XML文件的定名空间
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XNamespacenbsp;nsnbsp;=nbsp;quot;http://www.google.com/schemas/sitemap/0.84quot;;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;siteMapnbsp;=nbsp;newnbsp;XElement(nsnbsp;+nbsp;quot;urlsetquot;);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
stringnbsp;fixedUrlnbsp;=nbsp;quot;http://www.freeflying.com/articlequot;;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
stringnbsp;wholeUrlnbsp;=nbsp;string.Empty;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//轮回掏出数据,转换成XML节点
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;foreachnbsp;(varnbsp;itemnbsp;innbsp;Articles.GetArticles())
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;urlnbsp;=nbsp;newnbsp;XElement(quot;urlquot;);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;wholeUrlnbsp;=nbsp;string.Format(quot;{0}?id={1}amp;catelog={2}quot;,fixedUrl,item.ID,item.Catelog);nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;locnbsp;=nbsp;newnbsp;XElement(quot;locquot;,nbsp;wholeUrl);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;lastmodnbsp;=nbsp;newnbsp;XElement(quot;lastmodquot;,nbsp;item.LastMod.AddDays(-23).ToShortDateString());
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;changefreqnbsp;=nbsp;newnbsp;XElement(quot;changefreqquot;,nbsp;item.Frequency);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;prioritynbsp;=nbsp;newnbsp;XElement(quot;priorityquot;,nbsp;item.Weight);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;url.Add(loc,nbsp;lastmod,nbsp;changefreq,nbsp;priority);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;siteMap.Add(url);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//最后输出整个xml文件
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;context.Response.Write(siteMap);
nbsp;nbsp;nbsp;nbsp;}
nbsp;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;boolnbsp;IsReusablenbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
getnbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
returnnbsp;false;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;}

}

同样还将利用到xml手艺的还有RSS

lt;%@nbsp;WebHandlernbsp;Language=quot;C#quot;nbsp;Class=quot;rssquot;nbsp;%gt;

usingnbsp;System;
usingnbsp;System.Web;
usingnbsp;System.Xml;
usingnbsp;System.Xml.Linq;


publicnbsp;classnbsp;rssnbsp;:nbsp;IHttpHandlernbsp;{
nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;voidnbsp;ProcessRequestnbsp;(HttpContextnbsp;context)nbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;context.Response.ContentTypenbsp;=nbsp;quot;text/xmlquot;;

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;context.Response.Write(quot;lt;?xmlnbsp;version=\quot;1.0\quot;nbsp;encoding=\quot;UTF-8\quot;nbsp;?gt;quot;);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;rssFeednbsp;=nbsp;newnbsp;XElement(quot;rssquot;,nbsp;newnbsp;XAttribute(quot;versionquot;,quot;2.0quot;));

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
stringnbsp;fixedUrlnbsp;=nbsp;quot;http://www.freeflying.com/articlequot;;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
stringnbsp;wholeUrlnbsp;=nbsp;string.Empty;

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;channelnbsp;=nbsp;newnbsp;XElement(quot;channelquot;,
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;XElement(quot;titlequot;,nbsp;quot;freeflyingquot;),
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;XElement(quot;linkquot;,nbsp;fixedUrl),
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;XElement(quot;descriptionquot;,quot;thenbsp;websitenbsp;fornbsp;dreamnbsp;flyingnbsp;freelyquot;),
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;XElement(quot;pubDatequot;,DateTime.Now.ToString())
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
foreachnbsp;(varnbsp;articlenbsp;innbsp;Articles.GetArticles())
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;itemnbsp;=nbsp;newnbsp;XElement(quot;itemquot;);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;titlenbsp;=nbsp;newnbsp;XElement(quot;titlequot;,nbsp;article.Title);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;wholeUrlnbsp;=nbsp;string.Format(quot;{0}?id={1}amp;catelog={2}quot;,nbsp;fixedUrl,nbsp;article.ID,nbsp;article.Catelog);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;linknbsp;=nbsp;newnbsp;XElement(quot;linkquot;,nbsp;wholeUrl);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;descriptionnbsp;=nbsp;newnbsp;XElement(quot;descriptionquot;,nbsp;article.Description);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;XElementnbsp;pubDatenbsp;=nbsp;newnbsp;XElement(quot;pubDatequot;,nbsp;article.LastMod.ToString());

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;item.Add(title,link,description,pubDate);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;channel.Add(item);
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;rssFeed.Add(channel);

nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;context.Response.Write(rssFeed);

nbsp;nbsp;nbsp;nbsp;}
nbsp;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;boolnbsp;IsReusablenbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
getnbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
returnnbsp;false;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;}
nbsp;nbsp;nbsp;nbsp;

}

模拟数据

usingnbsp;System;
usingnbsp;System.Data;
usingnbsp;System.Configuration;
usingnbsp;System.Linq;
usingnbsp;System.Web;
usingnbsp;System.Web.Security;
usingnbsp;System.Web.UI;
usingnbsp;System.Web.UI.HtmlControls;
usingnbsp;System.Web.UI.WebControls;
usingnbsp;System.Web.UI.WebControls.WebParts;
usingnbsp;System.Xml.Linq;
usingnbsp;System.Web.UI.MobileControls;
usingnbsp;System.Collections.Generic;

///nbsp;lt;summarygt;
///nbsp;Summarynbsp;descriptionnbsp;fornbsp;Articles
///nbsp;lt;/summarygt;
publicnbsp;classnbsp;Articles
{
nbsp;nbsp;nbsp;nbsp;
publicnbsp;Articles()
nbsp;nbsp;nbsp;nbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//nbsp;TODO:nbsp;Addnbsp;constructornbsp;logicnbsp;here
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
//
nbsp;nbsp;nbsp;nbsp;}

nbsp;nbsp;nbsp;nbsp;
publicnbsp;staticnbsp;Listlt;Articlegt;nbsp;GetArticles()
nbsp;nbsp;nbsp;nbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
returnnbsp;newnbsp;Listlt;Articlegt;(){
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;Article(234,nbsp;quot;blogquot;,nbsp;DateTime.Now.AddDays(-23),nbsp;Freq.none,nbsp;0.8,nbsp;quot;asp.netnbsp;搜索引擎优化quot;,nbsp;quot;articlesnbsp;aboutnbsp;SEOnbsp;innbsp;asp.netquot;),
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;Article(267,nbsp;quot;blogquot;,nbsp;DateTime.Now.AddDays(-245),nbsp;Freq.daily,nbsp;0.6,nbsp;quot;ado.netnbsp;proquot;,quot;aboutnbsp;thenbsp;datasetnbsp;usagequot;),
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;
newnbsp;Article(653,nbsp;quot;newsquot;,nbsp;DateTime.Now.AddDays(-45),nbsp;Freq.daily,nbsp;1,quot;CLRnbsp;vianbsp;C#quot;,quot;notebooknbsp;aboutnbsp;thisnbsp;bookquot;)
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;};
nbsp;nbsp;nbsp;nbsp;}


}

publicnbsp;classnbsp;Article
{
nbsp;nbsp;nbsp;nbsp;
publicnbsp;intnbsp;ID;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;stringnbsp;Catelog;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;DateTimenbsp;LastMod;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;doublenbsp;Weight;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;Freqnbsp;Frequency;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;stringnbsp;Title;
nbsp;nbsp;nbsp;nbsp;
publicnbsp;stringnbsp;Description;

nbsp;nbsp;nbsp;nbsp;
publicnbsp;Article(intnbsp;id,nbsp;stringnbsp;catelog,nbsp;DateTimenbsp;lastMod,nbsp;Freqnbsp;frequency,nbsp;doublenbsp;weight,nbsp;stringnbsp;title,nbsp;stringnbsp;description)
nbsp;nbsp;nbsp;nbsp;{
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;IDnbsp;=nbsp;id;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Catelognbsp;=nbsp;catelog;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;LastModnbsp;=nbsp;lastMod;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Weightnbsp;=nbsp;weight;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Frequencynbsp;=nbsp;frequency;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Titlenbsp;=nbsp;title;
nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;Descriptionnbsp;=nbsp;description;
nbsp;nbsp;nbsp;nbsp;}
}

publicnbsp;enumnbsp;Freq
{
nbsp;nbsp;nbsp;nbsp;nonenbsp;=nbsp;1,
nbsp;nbsp;nbsp;nbsp;dailynbsp;=nbsp;2,
nbsp;nbsp;nbsp;nbsp;weeklynbsp;=nbsp;3,
}

作者:自由飞 原文链接

参阅自由飞其他的文档

ASP.NET的SEO:HTTP报头状况码内容重定向

asp.net的优化伺服器控件背后友爱的Html和JS

ASP.NET的SEO:利用.ashx文件mdash;mdash;清扫反复内容

关于我们

吞吐设计——企业建站首选品牌

吞吐设计,一个品牌策划与IT技术整合运营的互动机构,一个理念和格调领先的团队,一个组织严密,但又灵活的设计团队。我们综合考虑网站在传播营销中的作用,为您提供各种互动策略,帮助您在复杂的网络环境中战胜对手。 吞吐设计集品牌策划、设计实施、互动媒体、网站建设于一体,致力于服务重视网络形象价值的客户,竭力为客户提供具备真正价值的网络营销和品牌形象体系...了解更多 »

公告:
  • 2009-11-09Tun2官网改版
  • QQ: 88009791
    E-mail: zheng_hui#126.com
    Tel: 150 02 02 02 67