This document describes how to create XML sitemaps for your Wagtail website using the
You firstly need to add
"wagtail.contrib.wagtailsitemaps" to INSTALLED_APPS in your Django settings file:
INSTALLED_APPS = [ ... "wagtail.contrib.wagtailsitemaps", ]
urls.py, you need to add a link to the
wagtail.contrib.wagtailsitemaps.views.sitemap view which generates the sitemap:
from wagtail.contrib.wagtailsitemaps.views import sitemap urlpatterns = [ ... url('^sitemap\.xml$', sitemap), ]
You should now be able to browse to
/sitemap.xml and see the sitemap working. By default, all published pages in your website will be added to the site map.
Setting the hostname¶
By default, the sitemap uses the hostname defined in the Wagtail Admin’s
Sites area. If your
default site is called
localhost, then URLs in the sitemap will look like:
<url> <loc>http://localhost/about/</loc> <lastmod>2015-09-26</lastmod> </url>
For tools like Google Search Tools to properly index your site, you need to set a valid, crawlable hostname. If you change the site’s hostname from
will contain the correct URLs:
<url> <loc>http://mysite.com/about/</loc> <lastmod>2015-09-26</lastmod> </url>
Find out more about working with Sites </reference/pages/model_reference.html?highlight=site#site>.
Page class defines a
get_sitemap_urls method which you can override to customise sitemaps per
Page instance. This method must return a list of dictionaries, one dictionary per URL entry in the sitemap. You can exclude pages from the sitemap by returning an empty list.
Each dictionary can contain the following:
- location (required) - This is the full URL path to add into the sitemap.
- lastmod - A python date or datetime set to when the page was last modified.
You can add more but you will need to override the
wagtailsitemaps/sitemap.xml template in order for them to be displayed in the sitemap.
By default, sitemaps are cached for 100 minutes. You can change this by setting
WAGTAILSITEMAPS_CACHE_TIMEOUT in your Django settings to the number of seconds you would like the cache to last for.