wagtail sitemap を出力する


wagtail の sitemap 出力設定をしてみたので、手順を記載します。


参考


wagtail.contrib.wagtailsitemaps の設定

wagtail では、sitemap 出力のためのアプリケーションが用意されています。
このアプリケーションを追加し、urls.py に URL を定義します。

INSTALLED_APPS に追加

INSTALLED_APPSwagtail.contrib.wagtailsitemaps を追加します。
django.contrib.sitemaps の sitemap.xml テンプレートを使用しているので、django.contrib.sitemaps もなければ追加します。

INSTALLED_APPS = [
    'wagtail.contrib.wagtailsitemaps',
    'django.contrib.sitemaps',
    ]

django.contrib.sitemaps を追加していない状態だと、TemplateDoesNotExist が発生します。

urls.py に sitemap.xml を追加

urls.py に sitemap.xml の定義を追加します。

from wagtail.contrib.wagtailsitemaps.views import sitemap
urlpatterns = [
    ...
    url(r'^sitemap\.xml$', sitemap),
    ]

http://127.0.0.1:8000/sitemap.xml にアクセスする

ローカルサーバーを立ち上げて、sitemap.xml にアクセスすると以下の内容のxml が出力されます。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>http://localhost/</loc><lastmod>2018-03-10</lastmod></url>
<url><loc>http://localhost/posts/</loc><lastmod>2018-03-10</lastmod></url>
<url><loc>http://localhost/posts/3a211ddd211948452de1613f82543eed/</loc></url>
<url><loc>http://localhost/posts/a516f27b3fd13e5a24ff36327142a613/</loc></url>
<url><loc>http://localhost/posts/6c287eab5aa45415bf5c50df1e61a47f/</loc></url>
<url><loc>http://localhost/about/</loc><lastmod>2018-03-10</lastmod></url>
</urlset>
host 名が localhost になっていますが、これは site のhost名が設定されますので、siteの host 名を wagtail の管理画面から適用対象の host 名に変更すれば修正できます。


ページごとにsitemap.xml の出力内容を変更する

Page クラスに、get_sitemap_urls ファンクションを定義して、出力フィールドを設定すると出力内容をカスタマイズできるようです。

def get_sitemap_urls(self):
    return [
        {
            'location': self.full_url,
            'lastmod': self.latest_revision_created_at,
            'changefreq': 'monthly',
            'priority': .5
        }
    ]

以上です。

コメント