Python/Django製のCMS『Wagtail』でサイトマップを作成する

Wagtailでサイトマップを追加する方法とカスタマイズの方法を解説します。

Python/Django製のCMS『Wagtail』でサイトマップを作成する

この記事ではPython/Django製のCMSであるWagtailでサイトマップを作成する方法を解説します。

サイトマップとは、Webサイト全体のページ構成を記載している構成図のファイルのことです。Webサイトのユーザーにとってみやすいような形にしたものもありますが、XMLファイルの形で検索エンジンのクローラーなどに読み取らせるためのものもあります。後者はSEOの観点からも重要で、検索エンジンがWebサイトの構造を正しく理解し、適切に検索に表示するために利用されます

SEOなどでアクセスアップを目指すWebメディアにとってはとても重要なファイルで、必ず設定したうえでGoogle Search Consoleにも必ず読み取らせるようにしましょう。

Wagtailでサイトマップを作成する

WagtailではXML形式のサイトマップを簡単に作成することができます。まずはdjango.contrib.sitemapsINSTALLED_APPSに追加します。

# settings/base.py

INSTALLED_APPS = [
    ...
    "django.contrib.sitemaps", # 追加
]

続いて、サイトマップのURLを設定します。urls.pyにwagtail.contrib.sitemaps.views.sitemapを追加しましょう。ここでの注意点は、サイトマップのパスの追加は通常のWagtailのパスの設定より前に行わなければならないことです。wagtail.core.urls(デフォルトではwagtail_urlsとして設定されている)の前に追加するようにしましょう。

# urls.py

from django.urls import path
from wagtail.core import urls as wagtail_urls
from wagtail.contrib.sitemaps.views import sitemap

urlpatterns = [
    ...
    path('sitemap.xml', sitemap), # 追加
    ...
    path("", include(wagtail_urls)), # この行より前にsitemapを追加する
]

これでサイトマップを作成することができました。/sitemap.xmlにアクセスすると、公開済みのページのリストが表示されます。

しかしデフォルトの設定のままだと以下のようにホスト名がlocalhostになっていると思います。

<!-- sitemap.xml -->

<url>
  <loc>http://localhost/article/</loc>
  <lastmod>2021-07-01</lastmod>
</url>

自身が運営するWebサイトのホスト名に変更することができます。Wagtailの管理画面の『Settings』から『Sites』にアクセスしてください。このメニューではWebサイトに関する情報を設定することができます。

Wagtail Settingsメニュー

デフォルトではホスト名がlocalhost、ポートが80になっていると思います。自社のサイトを運営している場合には、ホスト名は自社サイトのドメインを入力しましょう。また、httpsに対応している場合にはポートを443に変更しましょう。

ホスト名とポートを変更

この設定に更新すると、サイトマップの内容が以下のように変更されます。

<!-- sitemap.xml -->

<url>
  <loc>https://wagtailbase.com/article/</loc>
  <lastmod>2021-07-01</lastmod>
</url>

サイトマップのカスタマイズ

サイトマップに表示する内容はWagtailのPageインスタンスごとにカスタマイズすることもできます。get_sitemap_urlsメソッドをオーバーライドしましょう。サイトマップに含めたいURLとそれに関連したパラメータを辞書型で定義して、リストを返します。

# models.py

class ArticlePage(Page):
    ...
    # それぞれのPageインスタンスのサイトマップの内容を更新
    def get_sitemap_urls(self, request):
        info = [
            {
                'location': self.get_full_url(request),
                'lastmod': (self.last_published_at or self.latest_revision_created_at),
                'changefreq': 'daily',
                'priority': 0.5,
            }
        ]
        return info

サイトマップにアクセスすると、以下のようにパラメータが追加されているのがわかります。

<!-- sitemap.xml -->

<url>
  <loc>https://wagtailbase.com/article/</loc>
  <lastmod>2021-07-01</lastmod>
  <changefreq>daily</changefreq>
  <priority>0.5</priority>
</url>

get_sitemap_urlsで指定できるパラメータは以下の通りです。

  • location: サイトマップに追加するURL(必須)
  • lastmod: ページの更新日時、Pythonのdateかdatetimeオブジェクトを指定
  • changefreq: ページの更新頻度の目安、以下の候補から選択
    • 'always'
    • 'hourly'
    • 'daily'
    • 'weekly'
    • 'monthly'
    • 'yearly'
    • 'never'
  • priority: 他のURLとの相対的な重要度、0.0から1.0の数字を取る、デフォルトは0.5

もしサイトマップに含めたくないページがあれば、get_sitemap_urlsメソッドで空のリストを返すようにしてください。

以上がWagtailでのサイトマップの追加方法です。SEOにも影響してくるため、必ず設定するようにしましょう。