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.13.12, Windows 11 (10.0.22631.3007/23H2/2023Update/SunValley3)
AMD Ryzen 7 5800H with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK 8.0.101
[Host] : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.1 (8.0.123.58001), X64 RyuJIT AVX2
Method | NumberOfNodes | Mean | Error | StdDev |
---|---|---|---|---|
Serialize | 10 | 4.316 μs | 0.0825 μs | 0.0772 μs |
SerializeAsync | 10 | 5.367 μs | 0.0769 μs | 0.0681 μs |
Serialize | 100 | 33.616 μs | 0.1583 μs | 0.1480 μs |
SerializeAsync | 100 | 41.328 μs | 0.3361 μs | 0.3144 μs |
Serialize | 40000 | 19,396.188 μs | 380.0968 μs | 568.9109 μs |
SerializeAsync | 40000 | 20,183.385 μs | 399.3607 μs | 644.8931 μs |