Генерация Sitemaps "на лету" с помощью ASP.NET HttpHandler
Sitemaps — это XML-файл с информацией для поисковых систем (таких как
Google, Yahoo, Ask.com, MSN, Яндекс) о страницах веб-сайта, которые
подлежат индексации. Sitemaps может помочь поисковикам определить
местонахождение страниц сайта, время их последнего обновления, частоту
обновления и важность относительно других страниц сайта для того, чтобы
поисковая машина смогла более разумно индексировать сайт.
Использование протокола Sitemaps не является гарантией того, что
веб-страницы будут проиндексированы поисковыми системами, это всего
лишь дополнительная подсказка для сканеров, которые смогут выполнить
более тщательное сканирование Вашего сайта. В статье рассказывается как
«на лету» получать Sitemaps, используя ASP.NET HttpHandler.
Пример карты сайта, которая содержит единственную страницу:
Детальнее о протоколе можно почитать здесь.
Внутри директории App_Code создаем SiteMapHandler.cs:
Ниже код 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 нужно добавить строки:
Для тестирования Sitemap откройте в строке браузера Sitemap.axd.
Далее необходимо создать файл robots.txt и внести туда строку:
Sitemap: youdomain/sitemap.axd
В статье использовались материалы сайта bloggingdeveloper.