Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров5.3K
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>


* This source code was highlighted with Source Code Highlighter.


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

Внутри директории 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
}


* This source code was highlighted with Source Code Highlighter.


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

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

<httpHandlers>
  <add verb="*" path="sitemap.axd"
    type="SitemapHandler" validate="false"/>
</httpHandlers>


* This source code was highlighted with Source Code Highlighter.


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

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

Sitemap: youdomain/sitemap.axd

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

Спасибо за внимание!
Теги:
Хабы:
-1
Комментарии18

Публикации

Изменить настройки темы

Истории

Работа

.NET разработчик
72 вакансии

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн