网站首页 > 站长资讯 > 经验心得 > ASP.NET的SEO Linq to XML---网站地图和RSS Feed

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

  • 作者:互联网
  • 时间:2010-03-04 16:00:02

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

这里我们首先要明白一个基本的原理,搜索引擎的爬行方式。整个互联网就像一张纵横交错的“网”:网的各个节点就是各个网页,而各个网页之间通过url相互连接。蜘蛛可以从一个网页出发,通过该网页上的url,爬到另一个网页;再通过另一个网页上的url,再爬到更多的网页……,以此类推。但如果是一个新发布的网站,可能就没有其他url指向它,那么它就永远不会被“爬到”(收录)。为了解决这个问题,新站可以自己主动向搜索引擎提交url,申请蜘蛛前来抓取(Google申请网址:),但申请时一般只会提交一个主页的url。

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

和处理重复内容的ro***s.txt文件,我们通过.ashx文件来生成一个基于si***aps.org的xml格式的网站地图。网站地图生成之后,我们就可以向Google等搜索引擎提交。大量的文章证实,提交网站地图将极大的提高网站的收录速度和深度。其他几乎所有的SEO方法,都有可能效果难以证实、失效甚至带来副作用,但提交网站地图除外!

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

<%@ WebHandler Language="C#" Class="website" %>

using System;
using Sy***m.Web;
using Sy***m.Xml;
using Sy***m.Xml.Linq;
using Sy***m.Linq;

public class website : IHttpHandler {
   
    public void ProcessRequest (HttpContext context) {

        co***xt.Response.ContentType = "text/xml";

        //文件的声明信息,第第三个参数standalone的值yes 表示这个 XML 文档是自包含的(self-contained)而不依赖于外部所定义的一个 DTD.
        XDeclaration declaration = new XDeclaration("1.0", "UTF-8", "yes");
        co***xt.Response.Write(declaration);
       
        //XML文件的命名空间
        XNamespace ns = "http://www.google.com/schemas/sitemap/0.84";
        XElement siteMap = new XElement(ns + "urlset");

        string fixedUrl = "http://www.freeflying.com/article";
        string wholeUrl = st***g.Empty;
       
        //循环取出数据,转换成XML节点
        foreach (var item in Ar***les.GetArticles())
        {
            XElement url = new XElement("url");

            wholeUrl = st***g.Format("{0}?id={1}&catelog={2}",fixedUrl,item.ID,it***Catelog);
            XElement loc = new XElement("loc", wholeUrl);
            XElement lastmod = new XElement("lastmod", it***LastMod.AddDays(-23).ToShortDateString());
            XElement changefreq = new XElement("changefreq", it***Frequency);
            XElement priority = new XElement("priority", it***Weight);

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

            si***ap.Add(url);
        }

       
       
        //最后输出整个xml文件
        co***xt.Response.Write(siteMap);
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

 

同样还将使用到xml技术的还有RSS

<%@ WebHandler Language="C#" Class="rss" %>

using System;
using Sy***m.Web;
using Sy***m.Xml;
using Sy***m.Xml.Linq;


public class rss : IHttpHandler {
   
    public void ProcessRequest (HttpContext context) {
        co***xt.Response.ContentType = "text/xml";

        co***xt.Response.Write("");

        XElement rssFeed = new XElement("rss", new XAttribute("version","2.0"));

        string fixedUrl = "http://www.freeflying.com/article";
        string wholeUrl = st***g.Empty;

        XElement channel = new XElement("channel",
            new XElement("title", "freeflying"),
            new XElement("link", fixedUrl),
            new XElement("description","the website for dream flying freely"),
            new XElement("pubDate",Da***ime.Now.ToString())
            );
       
       
        foreach (var article in Ar***les.GetArticles())
        {
            XElement item = new XElement("item");

            XElement title = new XElement("title", ar***le.Title);

            wholeUrl = st***g.Format("{0}?id={1}&catelog={2}", fixedUrl, ar***le.ID, ar***le.Catelog);
            XElement link = new XElement("link", wholeUrl);

            XElement description = new XElement("description", ar***le.Description);

            XElement pubDate = new XElement("pubDate", ar***le.LastMod.ToString());

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

            ch***el.Add(item);
        }

        rs***ed.Add(channel);

        co***xt.Response.Write(rssFeed);

    }

    public bool IsReusable {
        get {
            return false;
        }
    }
   

}

 

模拟数据

using System;
using Sy***m.Data;
using Sy***m.Configuration;
using Sy***m.Linq;
using Sy***m.Web;
using Sy***m.Web.Security;
using Sy***m.Web.UI;
using Sy***m.Web.UI.HtmlControls;
using Sy***m.Web.UI.WebControls;
using Sy***m.Web.UI.WebControls.WebParts;
using Sy***m.Xml.Linq;
using Sy***m.Web.UI.MobileControls;
using Sy***m.Collections.Generic;

///


/// Summary description for Articles
///

public class Articles
{
    public Articles()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public static List

GetArticles()
    {
        return new List
(){
            new Article(234, "blog", Da***ime.Now.AddDays(-23), Fr***none, 0.8, "asp.net seo", "articles about SEO in asp.net"),
            new Article(267, "blog", Da***ime.Now.AddDays(-245), Fr***daily, 0.6, "ado.net pro","about the dataset usage"),
            new Article(653, "news", Da***ime.Now.AddDays(-45), Fr***daily, 1,"CLR via C#","notebook about this book")
        };
    }


}

public class Article
{
    public int ID;
    public string Catelog;
    public DateTime LastMod;
    public double Weight;
    public Freq Frequency;
    public string Title;
    public string Description;

    public Article(int id, string catelog, DateTime lastMod, Freq frequency, double weight, string title, string description)
    {
        ID = id;
        Catelog = catelog;
        LastMod = lastMod;
        Weight = weight;
        Frequency = frequency;
        Title = title;
        Description = description;
    }
}

public enum Freq
{
    none = 1,
    daily = 2,
    weekly = 3,
}

 

作者:自由飞 原文链接