Стартовая страницаНовостиГенерация Sitemaps «на лету» с помощью ASP.NET HttpHandler
Читайте также:

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

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

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

Как это сделал я.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url
    <loc>habrahabr.ru</loc
    <lastmod>2009-10-25</lastmod
    <changefreq>monthly</changefreq
    <priority>0.8</priority
  </url> 
</urlset> 

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

И пишем его код

public class sitemap : IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      try
      {
         GetMap(context);
      }
      catch (Exception e)
      {
         OnError(context, e);
      }
   }
protected void GetMap(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");
      List<Nodes> data = GetDS();
      foreach (Nodes node in data)
      {
         writer.WriteStartElement("url");
         writer.WriteElementString("loc", node.Url);
         writer.WriteElementString("lastmod", node.mod.ToString("yyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture));
         writer.WriteElementString("changefreq", ChangeFrequency.always.ToString());
         writer.WriteElementString("priority", "0.5");
         writer.WriteEndElement(); // url
      }
      writer.WriteEndElement(); // urlset
   }
   context.Response.ContentType = "text/xml";
}

protected List<Nodes> GetDS()
{
 /*Тут создаем и заполняем список узлов, которые будем выводить в sitemap*/
 return nodes;
}

protected void OnError(HttpContext ctx, Exception e){
 /*Здесь я обрабатываю и логирую ошибки*/
}

public bool IsReusable
{
 get
 {
    return true;
 }
}

internal enum ChangeFrequency
{
   always,
   hourly,
   daily,
   weekly,
   monthly,
   yearly,
   never
}
public class Nodes
{
   public string Url { get; set; }
   public DateTime mod { get; set; }
} 


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

<system.webServer>
    <handlers>
       <add name="sitemap" path="*sitemap.xml" verb="*" type="sitemap" resourceType="Unspecified" preCondition="integratedMode" />
    </handlers>
</system.webServer>

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

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

Sitemap: youdomain/sitemap.xml

 

 

Пока еще нет ни одного комментария. 

Дима Кононов © - разработка сайтов и порталов.


Функционирует с 2013 года. Версия 3.0
Разработка и дизайн: Кононов Дмитрий
Комментарий: У меня есть, что сказать по этому поводу, но я лучше промолчу.
Сейчас зарегистрированных посетителей на сайте: 0 Посмотреть подробнее...
Новостная лента RSS 2.0

Вверх