Feedback

C# - sitemap.xml auf ASP.NET Webseite dynamisch erstellen und senden

Veröffentlicht von am 11/16/2013
(1 Bewertungen)
Sitemap-Dateien sind gewöhnliche Textdateien, die sich der Extensible Markup Language bedienen. Suchmaschinen benutzen sie für das Durchsuchen von Webseiten. Normalerweise wird diese Datei in der Webseite gespeichert und veröffentlicht.
Ich habe viel dynamischen Inhalt auf der Webseite und möchte diese Information den Suchmaschinen zur Verfügung stellen.
Die Lösung besteht aus 3 Teilen. Teil 1 ist die Sitemap Klasse siehe unten.

Teil 2 ist der Aufruf in einen Dateihandler:


public void ProcessRequest(HttpContext context)
{
DateTime lastChange = (DateTime)context.Application["ApplicationStart"];
string url = "http://www.xxl-pizza.de/";

SiteMapXml smx = new SiteMapXml();


smx.AddUrl(url + "anmeldung.aspx", lastChange, "weekly", "1.0");
smx.AddUrl(url + "linkpartneranmeldung.aspx", lastChange, "weekly", "1.0");
smx.AddUrl(url + "sitemap.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "suche.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "kontakt.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "abg.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "index.aspx", lastChange, "weekly", "0.5");

foreach (Pizzeria user in Pizzeria.GetList())
{
string tempUrl = "shop2info" + user.Id.ToString() + ".aspx";

smx.AddUrl(url+tempUrl, lastChange, "weekly", "0.5");
}

smx.AddUrl(url + "linkpartner1.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "linkpartner2.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "linkpartner3.aspx", lastChange, "weekly", "0.5");
smx.AddUrl(url + "linkpartner4.aspx", lastChange, "weekly", "0.5");

context.Response.ContentType = "text/xml";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.Write(smx.GetSiteMapString());
}


Und der 3. und letzte Teil ist der Eintrag für den Dateihandler in der web.config Datei.


<system.web>
...
<urlMappings enabled="true">
<add url="~/sitemap.xml" mappedUrl="~/common/handler/sitemapHandler.ashx"/>
</urlMappings>
</system.web>


Die sitemap Datei wird von allen Suchmaschinen akzeptiert. Wenn Ihr eine sitemap-Datei einbaut, dann vergesst nicht die robots.txt auf der Seite.
Und hier ist das Ergebnis diesen Snippets: http://www.xxl-pizza.de/sitemap.xml
public class SiteMapXml
{
   private XmlDocument sitemapDoc = new XmlDocument();
   string namespaceuri = "http://www.sitemaps.org/schemas/sitemap/0.9";

   public SiteMapXml()
   {
      XmlNode urlsetNode = sitemapDoc.SelectSingleNode("urlset");
      XmlNode root = sitemapDoc.CreateNode(XmlNodeType.Element, "urlset", namespaceuri);
      sitemapDoc.AppendChild(root);

      XmlDeclaration xmldecl;
      xmldecl = sitemapDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
      sitemapDoc.InsertBefore(xmldecl, sitemapDoc.DocumentElement);
   }

   public void AddUrl(string location, DateTime lastModified, string changeFreq, string priority)
   {
      XmlNode newNodeUrl = sitemapDoc.CreateNode(XmlNodeType.Element, "url", namespaceuri);

      // location
      XmlNode locationNode = sitemapDoc.CreateElement("loc", namespaceuri);
      locationNode.InnerText = location;
      newNodeUrl.AppendChild(locationNode);

      // optional - lastmodified node  - JJJJ-MM-TT
      if (lastModified != null)
      {
         XmlNode lastmodifiedNode = sitemapDoc.CreateElement("lastmod", namespaceuri);
         lastmodifiedNode.InnerText = lastModified.ToString("yyyy-MM-dd");
         newNodeUrl.AppendChild(lastmodifiedNode);
      }

      //optional changefreq node
      if (!String.IsNullOrEmpty(changeFreq))
      {
         XmlNode changefreqNode = sitemapDoc.CreateElement("changefreq", namespaceuri);
         changefreqNode.InnerText = changeFreq;
            newNodeUrl.AppendChild(changefreqNode);
      }

      // optional priority
      if (!String.IsNullOrEmpty(priority))
      {
         XmlNode priorityNode = sitemapDoc.CreateElement("priority", namespaceuri);
         priorityNode.InnerText = priority;
         newNodeUrl.AppendChild(priorityNode);
      }

      sitemapDoc.DocumentElement.AppendChild(newNodeUrl);
   }

   public string GetSiteMapString()
   {
      StringWriter stringWriter = new StringWriter();
      XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);

      sitemapDoc.WriteTo(xmlTextWriter);

      return stringWriter.ToString();
   }
}
Abgelegt unter ASP.NET, sitemap, xml, ashx.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!