Генерация Sitemaps "на лету" с помощью ASP.NET HttpHandler

пятница, 30 октября 2009, Александр Краковецкий

Sitemaps — это XML-файл с информацией для поисковых систем (таких как Google, Yahoo, Ask.com, MSN, Яндекс) о страницах веб-сайта, которые подлежат индексации. Sitemaps может помочь поисковикам определить местонахождение страниц сайта, время их последнего обновления, частоту обновления и важность относительно других страниц сайта для того, чтобы поисковая машина смогла более разумно индексировать сайт.

Использование протокола Sitemaps не является гарантией того, что веб-страницы будут проиндексированы поисковыми системами, это всего лишь дополнительная подсказка для сканеров, которые смогут выполнить более тщательное сканирование Вашего сайта. В статье рассказывается как «на лету» получать Sitemaps, используя ASP.NET HttpHandler.

Пример карты сайта, которая содержит единственную страницу:



 
   habrahabr.ru/
   2009-10-25
   monthly
   0.8
 

Детальнее о протоколе можно почитать здесь.

Внутри директории App_Code создаем SiteMapHandler.cs:
image

image

Ниже код Asp.Net Sitemap Handler, который реализует интерфейс IHttpHandler:

public class SitemapHandler : IHttpHandler
{
  protected enum ChangeFrequency
  {
    always,
    hourly,
    daily,
    weekly,
    monthly,
    yearly,
    never
  }

  #region IHttpHandler Members

  public bool IsReusable
  {
    get { return false; }
  }

  public void ProcessRequest(HttpContext context)
  {
    using (TextWriter textWriter = new StreamWriter(context.Response.OutputStream, System.Text.Encoding.UTF8))
    {
      XmlTextWriter writer = new XmlTextWriter(textWriter);
      writer.Formatting = Formatting.Indented;
      writer.WriteStartDocument();
      writer.WriteStartElement("urlset");
      writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

      //Add home page
      writer.WriteStartElement("url");
      writer.WriteElementString("loc", "http://habrahabr.ru/");
      writer.WriteElementString("lastmod", DateTime.Now.ToString("yyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture));
      writer.WriteElementString("changefreq", ChangeFrequency.always.ToString());
      writer.WriteElementString("priority", "0.8");
      writer.WriteEndElement(); // url

      // Your code here for page nodes

      writer.WriteEndElement(); // urlset
    }
    context.Response.ContentType = "text/xml";
  }

  #endregion
}


В месте комментария «Your code here for page nodes» нужно вставить свою логику добавления страниц — либо с базы, либо с web.sitemap, либо с другого источника.

В web.config нужно добавить строки:


      type="SitemapHandler" validate="false"/>

Для тестирования Sitemap откройте в строке браузера Sitemap.axd.

Далее необходимо создать файл robots.txt и внести туда строку:

Sitemap: youdomain/sitemap.axd

В статье использовались материалы сайта bloggingdeveloper.


Ищите нас в интернетах!

Комментарии

Свежие вакансии