A função do mapa do site é permitir que os mecanismos de pesquisa incluam mais das diversas páginas do site o mais rápido possível.
Aqui devemos primeiro entender um princípio básico, o método de rastreamento dos motores de busca. Toda a Internet é como uma “rede” entrecruzada: cada nó da rede é cada página da web, e cada página da web está conectada entre si por meio de URLs. Um spider pode começar em uma página da web e rastrear para outra página da web por meio do URL da página da web e depois rastrear para mais páginas da web por meio do URL de outra página da web... e assim por diante; Mas se for um site recém-lançado, pode não haver outro URL apontando para ele, portanto nunca será "rastreado" (incluído). Para resolver esse problema, o novo site pode enviar ativamente o URL ao mecanismo de pesquisa e solicitar que spiders o rastreiem (URL do aplicativo Google:), mas geralmente apenas o URL de uma página inicial será enviado durante a inscrição.
Para que todos os URLs (especialmente os gerados dinamicamente) sejam recuperados de forma rápida e fácil pelos spiders, precisamos fornecer uma estrutura abrangente, completa e clara e um mapa do site atualizado em tempo hábil.
E para lidar com o arquivo robots.txt de conteúdo duplicado, usamos o arquivo .ashx para gerar um mapa do site em formato xml baseado em sitemaps.org. Depois que o mapa do site for gerado, podemos enviá-lo para mecanismos de busca como o Google. Um grande número de artigos confirma que o envio de um mapa do site melhorará muito a velocidade e a profundidade da inclusão do site. Quase todos os outros métodos de SEO podem ser difíceis de provar, ineficazes ou até causar efeitos colaterais, com exceção do envio de um mapa do site!
Linq to XML nos traz uma experiência operacional quase perfeita.
<%@WebHandler Language="C#" Class="website" %>
usando o sistema;
usando System.Web;
usando System.Xml;
usando System.Xml.Linq;
usando System.Linq;
site de classe pública: IHttpHandler {
public void ProcessRequest (contexto HttpContext) {
context.Response.ContentType = "texto/xml";
//Informações de declaração do arquivo. O valor yes do terceiro parâmetro autônomo indica que este documento XML é independente e não depende de um DTD definido externamente.
Declaração XDeclaration = new XDeclaration("1.0", "UTF-8", "sim");
context.Response.Write(declaração);
//Namespace do arquivo XML
XNamespace ns = " http://www.google.com/schemas/sitemap/0.84 ";
XElement siteMap = new XElement(ns + "urlset");
string fixaUrl = " http://www.freeflying.com/article ";
string wholeUrl = string.Empty;
//Retira os dados e converte-os em nós XML
foreach (var item em Articles.GetArticles())
{
URL do XElement = 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);
Prioridade XElement = new XElement("prioridade", item.Peso);
url.Add(loc, lastmod, changefreq, prioridade);
siteMap.Add(url);
}
//Finalmente gera todo o arquivo xml
context.Response.Write(siteMap);
}
public bool IsReusable {
pegar {
retornar falso;
}
}
}
A tecnologia XML também será usada em RSS
<%@WebHandler Language="C#" Class="rss" %>
usando o sistema;
usando System.Web;
usando System.Xml;
usando System.Xml.Linq;
classe pública rss: IHttpHandler {
public void ProcessRequest (contexto HttpContext) {
context.Response.ContentType = "texto/xml";
context.Response.Write("<?xml version="1.0" encoding="UTF-8" ?>");
XElement rssFeed = new XElement("rss", new XAttribute("versão","2.0"));
string fixaUrl = " http://www.freeflying.com/article ";
string wholeUrl = string.Empty;
canal XElement = novo XElement("canal",
novo XElement("título", "voo livre"),
novo XElement("link", urlfixa),
new XElement("descrição","o site dos sonhos voando livremente"),
novo XElement("pubDate",DateTime.Now.ToString())
);
foreach (var artigo em Articles.GetArticles())
{
XElement item = new XElement("item");
Título XElement = new XElement("título", artigo.Título);
wholeUrl = string.Format("{0}?id={1}&catelog={2}",fixUrl, artigo.ID, artigo.Catelog);
XElement link = new XElement("link", wholeUrl);
Descrição do XElement = new XElement("descrição", artigo.Descrição);
XElement pubDate = new XElement("pubDate", artigo.LastMod.ToString());
item.Add(título,link,descrição,pubDate);
canal.Adicionar(item);
}
rssFeed.Add(canal);
contexto.Response.Write(rssFeed);
}
public bool IsReusable {
pegar {
retornar falso;
}
}
}
dados simulados
usando o sistema;
usando System.Data;
usando System.Configuration;
usando System.Linq;
usando System.Web;
usando System.Web.Security;
usando System.Web.UI;
usando System.Web.UI.HtmlControls;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Xml.Linq;
usando System.Web.UI.MobileControls;
usando System.Collections.Generic;
/// <resumo>
/// Descrição resumida para artigos
/// </sumário>
classe públicaArtigos
{
artigos públicos()
{
//
// TODO: Adicione a lógica do construtor aqui
//
}
Lista estática pública<Artigo> GetArticles()
{
retornar nova Lista<Artigo>(){
novo artigo(234, "blog", DateTime.Now.AddDays(-23), Freq.none, 0.8, "asp.net seo", "artigos sobre SEO em asp.net"),
novo artigo(267, "blog", DateTime.Now.AddDays(-245), Freq.daily, 0.6, "ado.net pro","sobre o uso do conjunto de dados"),
novo artigo(653, "notícias", DateTime.Now.AddDays(-45), Freq.daily, 1,"CLR via C#","caderno sobre este livro")
};
}
}
artigo de classe pública
{
ID interno público;
string pública Catálogo;
público DateTime LastMod;
peso duplo público;
Frequência Freq pública;
string pública Título;
string pública Descrição;
artigo público (int id, string catelog, DateTime lastMod, frequência de frequência, peso duplo, título da string, descrição da string)
{
ID=id;
Catálogo = catálogo;
ÚltimoMod = últimoMod;
Peso = peso;
Frequência = frequência;
Título = título;
Descrição = descrição;
}
}
enum público Freq
{
nenhum = 1,
diariamente = 2,
semanal = 3,
}
Autor: Link original do Free Fly