Sitemaps for custom content types

In This Guide

This topic provides detailed on generate sitemaps for custom content types.

Implementing sitemaps for custom content types

To generate sitemap entries for custom content types, ensure those types implement Directory.Item, SiteMapItem, and optionally SiteMapConfig.

Step 1: Implement SiteMapItem

For a custom content type to be included in a sitemap, it must:

  • Extend Content.
  • Implement the method SiteMapItem#getSiteMapEntries. This method returns a list of SiteMapEntry objects. A SiteMapEntry object provides a URL and other information about an asset. The resulting sitemap XML for an asset is determined by the SiteMapEntry methods that you set in the implementation.

The following example shows a getSiteMapEntries() implementation.

public class MyContentType extends Content implements
    Directory.Item, /* Generates permalinks used in sitemaps. */
    SiteMapItem {   /* Generates a list of sitemap entries. */

    public List<SiteMapEntry> getSiteMapEntries() {
        List<SiteMapEntry> siteMapEntries = new ArrayList<>();

        * Loop over all sites hosting this object. If the site
        * itself has a permalink, create a sitemap entry for the object.
        Site.Static.findAll().forEach(e -> {

            String sitePermalink = as(Directory.ObjectModification.class).getSitePermalink(e);

            if (!StringUtils.isBlank(sitePermalink)) {
                SiteMapEntry siteMapEntry = new SiteMapEntry();

        /* Return the list of sitemap entries associated with this object. */
        return siteMapEntries;

For content types that you want to include in the news- or video-sitemap, implement the NewsSiteMapItem or VideoSiteMapItem interface.

Step 2 (optional): Implement SiteMapConfig

Sitemap configuration informs the background tasks about the types of sitemaps to generate and when to generate them. Brightspot provides a default sitemap configuration that accommodates any custom content types that you add; however, if you want a custom sitemap configuration, you must implement SiteMapConfig and related interfaces.

The SiteMapConfig is a subinterface of GlobalSiteMapConfig, which includes the getJobSettings() method. Implementing this method requires that you implement the JobSettings interface.

The following snippet shows a partial implementation of SiteMapConfig.

public class MySiteMapConfig implements SiteMapConfig {

   public JobSettings getJobSettings() {
      return new JobSettings() {

         * Check for correct host. As a best practice, implement this method to call
         * TaskUtils.isRunningOnTaskHost(). Doing so verifies that the host on which
         * the sitemap generation task will run is the host configured in
         * Admin > Sites & Settings > Global > Debug > Default Task Host.
         public boolean isAllowedToRun() {
             return TaskUtils.isRunningOnTaskHost();

         /* Time to run task. */
         public DateTime calculateRunTime(DateTime currentTime) {

         /* Job identification in log. */
         public String getLabel() {
             return "Sitemap Settings";

   /* Additionally implemented SiteMapConfig and GlobalSiteMapConfig methods */