Copyright Johan Kronberg 2009-2024 Latest posts RSS feed X: johankronberg LinkedIn Profile GitHub: krompaco
Site generated by: Record Collector

XML Sitemap from Episerver Scheduled Job

A quick post on how to write a valid sitemap.xml file to disk. I used this approach in a scheduled job for Episerver.

There are some dynamic options available to serve a XML sitemap on-the-fly but I preferred having a static file.

I only needed prio 1.0 and "daily" frequency. Enums containing the possible options would be a suitable addition. Here's a snippet with the important parts:

public string Run()
{
    var items = new List<SiteMapUrl>();

    // Iterate and add the items you want
    foreach ...
    {
        items.Add(new SiteMapUrl
        {
            Loc = "https://krompaco.nu/some-url/",
            Priority = "1.0", // 0.0-1.0 internal prio
            ChangeFreq = "daily", // always, hourly, weekly, monthly, yearly, never
            DateUpdatedUtc = DateTime.Now.ToUniversalTime()
        });
    }

    // Convert items to XML elements
    XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
    var xmlItems = from i in items
                    select new XElement(
                        ns + "url",
                        new XElement(ns + "loc", i.Loc),
                        new XElement(
                        ns + "lastmod", string.Format("{0:yyyy-MM-dd}", i.DateUpdatedUtc)),
                        new XElement(ns + "changefreq", i.ChangeFreq),
                        new XElement(ns + "priority", i.Priority));

    var sitemap = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XElement(
            ns + "urlset",
            xmlItems));

    sitemap.Save("C:\\some-site\\sitemap.xml");

    return string.Format("Replaced sitemap.xml, now containing {0} locations.", items.Count);
}

private class SiteMapUrl
{
    public string Loc { get; set; }

    public DateTime DateUpdatedUtc { get; set; }

    public string ChangeFreq { get; set; }

    public string Priority { get; set; }
}

Published and tagged with these categories: Episerver, ASP.NET, Development