Feedback

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

Veröffentlicht von am 16.11.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
GFU-Schulungen  [Anzeige]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

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!