Sidio.Sitemap.Core is a lightweight .NET library for generating sitemaps. It supports sitemap index files and can be used in any .NET application. It is written in C# and is available via NuGet.
Add the package to your project.
Looking for ASP.NET Core integration, see Sidio.Sitemap.AspNetCore. For Blazor integration, see Sidio.Sitemap.Blazor.
var nodes = new List<SitemapNode> { new ("https://example.com/page.html") };
var sitemap = new Sitemap(nodes);
var service = new SitemapService(new XmlSerializer());
var xmlResult = service.Serialize();
var sitemapIndexNodes = new List<SitemapIndexNode> { new("https://example.com/sitemap-1.xml") };
var sitemapIndex = new SitemapIndex(sitemapIndexNodes);
var service = new SitemapIndexService(new XmlSerializer());
var xmlResult = service.Serialize();
// DI setup
services.AddDefaultSitemapServices();
// implementation
public class MyClass()
{
public MyClass(ISitemapService service)
{
var nodes = new List<SitemapNode> { new ("https://example.com/page.html") };
var sitemap = new Sitemap(nodes);
var xmlResult = service.Serialize();
}
}
public class MyBaseUrlProvider : IBaseUrlProvider
{
public Uri BaseUrl => new ("https://example.com", UriKind.Absolute);
}
// DI setup
services.AddBaseUrlProvider<MyBaseUrlProvider>();
services.AddDefaultSitemapServices();
// or in one function:
services.AddDefaultSitemapServices<MyBaseUrlProvider>();
// regular setup
var serializer = new XmlSerializer(new MyBaseUrlProvider());
var service = new SitemapService(serializer);
// nodes, relative urls
var nodes = new List<SitemapNode> { new ("page.html") };
var sitemap = new Sitemap();
sitemap.Add(new SitemapImageNode("https://example.com/page.html", new ImageLocation("https://example.com/image.png")));
Extension documentation on Google Search Central
var sitemap = new Sitemap();
sitemap.Add(new SitemapNewsNode("https://example.com/page.html", "title", "name", "EN", DateTimeOffset.UtcNow));
Extension documentation on Google Search Central
var video = new VideoContent("https://example.com/thumbnail.png", "title", "description", "https://example.com/video.mp4", null);
var sitemap = new Sitemap();
sitemap.Add(new SitemapVideoNode("https://example.com/page.html", video));
Extension documentation on Google Search Central
XSLT stylesheets for sitemaps and sitemap indexes are supported. The stylesheet can be added to the Sitemap or SitemapIndex object:
var sitemap = new Sitemap(nodes, "my-stylesheet.xslt");
For more information, see Sitemap Style.
It is possible to load existing XML and deserialize it into a sitemap object:
var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><urlset> ....";
var serializer = services.GetRequiredService<ISitemapSerializer>();
var sitemap = serializer.Deserialize(xml);
BenchmarkDotNet v0.14.0, Windows 11 (10.0.22631.4460/23H2/2023Update/SunValley3)
AMD Ryzen 7 5800H with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 9.0.100
[Host] : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
.NET 8.0 : .NET 8.0.11 (8.0.1124.51707), X64 RyuJIT AVX2
.NET 9.0 : .NET 9.0.0 (9.0.24.52809), X64 RyuJIT AVX2
Method | Job | Runtime | NumberOfNodes | Mean | Error | StdDev | Ratio | RatioSD |
---|---|---|---|---|---|---|---|---|
Serialize | .NET 8.0 | .NET 8.0 | 10 | 5.153 us | 0.0971 us | 0.0758 us | 1.00 | 0.02 |
Serialize | .NET 9.0 | .NET 9.0 | 10 | 4.585 us | 0.0894 us | 0.0792 us | 0.89 | 0.02 |
SerializeAsync | .NET 8.0 | .NET 8.0 | 10 | 6.312 us | 0.0733 us | 0.0650 us | 1.00 | 0.01 |
SerializeAsync | .NET 9.0 | .NET 9.0 | 10 | 5.482 us | 0.0189 us | 0.0167 us | 0.87 | 0.01 |
Serialize | .NET 8.0 | .NET 8.0 | 100 | 41.446 us | 0.4271 us | 0.3995 us | 1.00 | 0.01 |
Serialize | .NET 9.0 | .NET 9.0 | 100 | 38.711 us | 0.3524 us | 0.3124 us | 0.93 | 0.01 |
SerializeAsync | .NET 8.0 | .NET 8.0 | 100 | 51.229 us | 0.4338 us | 0.4057 us | 1.00 | 0.01 |
SerializeAsync | .NET 9.0 | .NET 9.0 | 100 | 46.347 us | 0.7401 us | 0.6923 us | 0.90 | 0.01 |
Serialize | .NET 8.0 | .NET 8.0 | 40000 | 23,239.956 us | 428.2431 us | 400.5788 us | 1.00 | 0.02 |
Serialize | .NET 9.0 | .NET 9.0 | 40000 | 23,396.317 us | 334.0125 us | 312.4355 us | 1.01 | 0.02 |
SerializeAsync | .NET 8.0 | .NET 8.0 | 40000 | 23,490.278 us | 251.5840 us | 223.0227 us | 1.00 | 0.01 |
SerializeAsync | .NET 9.0 | .NET 9.0 | 40000 | 23,334.005 us | 253.3734 us | 237.0057 us | 0.99 | 0.01 |