ASP.NET做SEO:製作架構清晰和更新及時的網站地圖

來源:互聯網
上載者:User

網站地圖的作用是讓搜尋引擎儘快的,更多的收錄網站的各個網頁。

這裡我們首先要明白一個基本的原理,搜尋引擎的爬行方式。整個互連網就像一張縱橫交錯的“網”:網的各個節點就是各個網頁,而各個網頁之間通過url相互串連。蜘蛛可以從一個網頁出發,通過該網頁上的url,爬到另一個網頁;再通過另一個網頁上的url,再爬到更多的網頁……,以此類推。但如果是一個新發布的網站,可能就沒有其他url指向它,那麼它就永遠不會被“爬到”(收錄)。為瞭解決這個問題,新站可以自己主動向搜尋引擎提交url,申請蜘蛛前來抓取(Google申請網址:),但申請時一般只會提交一個首頁的url。

為了讓所有的url(尤其是動態產生的)都能被蜘蛛快捷便利的檢索到,我們就需要提供一個全面完整、架構清晰和更新及時的網站地圖。

和處理重複內容的robots.txt檔案,我們通過.ashx檔案來產生一個基於sitemaps.org的xml格式的網站地圖。網站地圖產生之後,我們就可以向Google等搜尋引擎提交。大量的文章證實,提交網站地圖將極大的提高網站的收錄速度和深度。其他幾乎所有的SEO方法,都有可能效果難以證實、失效甚至帶來副作用,但提交網站地圖除外!

Linq to XML為我們帶來了近乎完美的操作體驗。

<%@ 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.0", "UTF-8", "yes");
        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

<%@ 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("rss", new XAttribute("version","2.0"));

        string fixedUrl = "http://www.freeflying.com/article";
        string wholeUrl = string.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",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(234, "blog", DateTime.Now.AddDays(-23), Freq.none, 0.8, "asp.net seo", "articles about SEO in asp.net"),
            new Article(267, "blog", DateTime.Now.AddDays(-245), Freq.daily, 0.6, "ado.net pro","about the dataset usage"),
            new Article(653, "news", 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,
}

作者:自由飛 原文連結



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。