Sitemaps help search engine crawlers navigate your site and improve search engine optimization (SEO).
The Sitecore Experience Accelerator(SXA) offers an Out-of-the-box Sitemap XML module, which generates the Sitemap XML for each of your defined sites. An XML sitemap is created specifically for search engines to show details of the available pages in a website, their relative importance, and the frequency of content updates.
You can configure the Sitemap XML for the SXA Site in the Settings item under the Site item.
The configurations available can be found in the Search Engines Sitemap section of the Settings item.
You get three options under Sitemap Mode.
Inactive
Choosing this option will disable the Sitemap for the site.
Stored in cache
This option will save the Sitemap file generated in the cache. This option may be used if you are using Azure environments to host your Sitecore instance.
Stored in file
This option is recommended if your site is not going to change very often.
You can choose to include externals sitemaps as Key-Value pairs as well.
Also, you can have the Sitemap Index instead of the Sitemap.
The Robots.txt file will have a link to the Sitemap XML file by default.
Go to the page item and scroll to the Sitemap settings section.
The below options can be used to exclude a page from the Sitemap XML.
We can modify the behavior by overriding the SitemapGenerator service in the Sitecore.XA.Feature.SiteMetadata assembly.
Create a class named CustomSitemapGenerator.cs.
namespace Feature.SitemapExtension.Services
{
public class CustomSitemapGenerator : Sitecore.XA.Feature.SiteMetadata.Sitemap.SitemapGenerator
{
public CustomSitemapGenerator() : base()
{
}
public CustomSitemapGenerator(XmlWriterSettings xmlWriterSettings) : base(xmlWriterSettings)
{
}
public override string GenerateSitemap(Item homeItem, SitemapLinkOptions sitemapLinkOptions)
{
return GenerateSitemap(homeItem, null, sitemapLinkOptions);
}
public override string GenerateSitemap(Item homeItem, NameValueCollection externalSitemaps, SitemapLinkOptions sitemapLinkOptions)
{
// Custom logic goes here
}
}
}
To build the custom logic, I would recommend you to use tools such as dotPeek/ILSpy to go through the SitemapGenerator class in the Sitecore.XA.Feature.SiteMetadata assembly**.**
Create a config file named Feature.SitemapExtension.Sitemap.config.
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<services>
<register
serviceType="Sitecore.XA.Feature.SiteMetadata.Sitemap.ISitemapGenerator, Sitecore.XA.Feature.SiteMetadata"
implementationType="Feature.SitemapExtension.Services.CustomSitemapGenerator, Feature.SitemapExtension" lifetime="Transient"
patch:instead="register[@implementationType='Sitecore.XA.Feature.SiteMetadata.Sitemap.SitemapGenerator, Sitecore.XA.Feature.SiteMetadata']"/>
</services>
</sitecore>
</configuration>
After publishing your changes to your Sitecore instance, you should see the changes reflecting in your Sitemap XML.
I would recommend using the OOTB code as much as possible and keep your changes to be minimal.
Please feel free to drop in your feedback/questions in the comments.
Happy Sitecoring!