CQ-CSER

计算机爱好者

ASP.NET的sitemap和RSS

Posted on | 二月 27, 2010 | No Comments

作者: 自由飞 发表于 2010-02-26 21:15 原文链接本系列目录

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

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

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

 

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

WebSite

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

using System;
using System.Web;
using System.Xml;
using System.Xml.Linq;
using System.Linq;

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

        context.Response.ContentType = text/xml;

        //文件的声明信息,第第三个参数standalone的值yes 表示这个 XML 文档是自包含的(self-contained)而不依赖于外部所定义的一个 DTD. 
        XDeclaration declaration = new XDeclaration(1.0UTF-8yes);
        context.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 = string.Empty;
        
        
//循环取出数据,转换成XML节点
        foreach (var item in Articles.GetArticles())
        {
            XElement url = new XElement(url);

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

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

            siteMap.Add(url);
        }

        
        
        //最后输出整个xml文件
        context.Response.Write(siteMap);
    }
 
    
public bool IsReusable {
        
get {
            
return false;
        }
    }

}

 

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

RSS

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

using System;
using System.Web;
using System.Xml;
using System.Xml.Linq;

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

        context.Response.Write(<?xml version=\1.0\ encoding=\UTF-8\ ?>);

        XElement rssFeed = new XElement(rssnew XAttribute(version,2.0));

        string fixedUrl = http://www.freeflying.com/article;
        
string wholeUrl = string.Empty;

        XElement channel = new XElement(channel,
            
new XElement(titlefreeflying),
            
new XElement(link, fixedUrl),
            
new XElement(description,the website for dream flying freely),
            
new XElement(pubDate,DateTime.Now.ToString())
            );
        
        
        
foreach (var article in Articles.GetArticles())
        {
            XElement item = new XElement(item);

            XElement title = new XElement(title, article.Title);

            wholeUrl = string.Format({0}?id={1}&catelog={2}, fixedUrl, article.ID, article.Catelog);
            XElement link = new XElement(link, wholeUrl);

            XElement description = new XElement(description, article.Description);

            XElement pubDate = new XElement(pubDate, article.LastMod.ToString());

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

            channel.Add(item);
        }

        rssFeed.Add(channel);

        context.Response.Write(rssFeed);

    }
 
    
public bool IsReusable {
        
get {
            
return false;
        }
    }
    

}

   

模拟数据

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

/// <summary>
/// Summary description for Articles
/// </summary>
public class Articles
{
    
public Articles()
    {
        
//
        
// TODO: Add constructor logic here
        
//
    }

    public static List<Article> GetArticles()
    {
        
return new List<Article>(){
            
new Article(234blog, DateTime.Now.AddDays(-23), Freq.none, 0.8asp.net seoarticles about SEO in asp.net),
            
new Article(267blog, DateTime.Now.AddDays(-245), Freq.daily, 0.6ado.net pro,about the dataset usage),
            
new Article(653news, DateTime.Now.AddDays(-45), Freq.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,
}

相关文章:

  1. 建立HttpHandler并在web应用程序中注册
  2. ASP.NET的SEO使用.ashx文件——排除重复内容[zz]
  3. 大文件上传 进度条显示
  4. C#创建Excel文件
  5. 微软企业库DAAB4.1试用

评论|Comments

留言|Leave a Reply





  • Archives

  • SUNSHINE

  • About

    本博客采用创作共用版权协议,要求署名、非商业用途和保持一致. 转载本博客内容也遵循“署名-非商业用途-保持一致”的创作共用协议.

    订阅

    Search

    Admin