Djangoでサイトマップを作成したので手順をメモ書きしておきます。
編集、作成するもの
- settings.py
- urls.py (settings.pyのある方)
- sitemaps.py (新規作成)
- Django 管理サイト
settings.py
settings.pyのINSTALLED_APPSに以下2つの設定を追加。
INSTALLED_APPS = [
・・・・・・・・
'django.contrib.sites',
'django.contrib.sitemaps',
]
設定したらアプリケーションの更新を実施。
python manage.py migrate
さっき追加した「INSTALLED_APPS」の上に「SITE_ID = 1」を追加する。
SITE_ID = 1 # これを追加
INSTALLED_APPS = [
・・・・・・・・
'django.contrib.sites',
'django.contrib.sitemaps',
]
urls.py (settings.pyのある方)
- サイトマップフレームワークを適用する (urlpatterns 箇所)
- sitemaps 辞書を作成
from django.contrib.sitemaps.views import sitemap
from .sitemaps import (
BlogPostSitemap,StaticViewSitemap
)
sitemaps = {
'blog': BlogPostSitemap,
'static': StaticViewSitemap,
}
urlpatterns = [
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='sitemap'),
]
sitemaps.py
「sitemaps.py」 を「settings.py」のあるディレクトリに作成する。
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from blog.models import Post
# 動的クラスサイトマップを定義
class BlogPostSitemap(Sitemap):
# 省略可。オブジェクトの更新頻度を検索エンジンに教える設定。hourly, weekly, monthlyなどが設定できる。
changefreq = "daily"
# 省略可。オブジェクトの重要度 (priority) を検索エンジンに教える設定。デフォルトは0.5。数値が高い程優先度が高い。
priority = 0.8
# 必須。 [モデル名].objects.all()とすると、全てのテーブルを動的に読み込む。
def items(self):
return Post.objects.all()
# 省略可。オブジェクトに対するURLのパスを返す。
def location(self, obj):
return reverse('blog:detail', args=[obj.url])
# 省略可。オブジェクトの最終更新日時を Python の datetime.datetime オブジェクトで返す。
def lastmod(self, obj):
return obj.update_time
# 静的クラスサイトマップを定義。パラメータは動的クラスのものと同じ。
class StaticViewSitemap(Sitemap):
changefreq = 'weekly'
priority = 0.5
def items(self):
# [ ]の左側は urls.py (setting.py側) のnamespace、右側は urls.py(アプリ側)のnameを設定する。
return ['blog:privacy']
def location(self, item):
return reverse(item)
Django管理サイト
ログインすると「サイト」という項目ができているのでクリックする。
その先に「example.com」という表示があるので自分のサイトのURLに修正する。
出来栄え確認
http://127.0.0.1:8000/sitemap.xml
にアクセスする。
以下のような一覧が出力されれば作成成功。
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://hogeblog.com/post/hogehoge/</loc>
<lastmod>2021-01-31</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://hogeblog.com/post/warawara/</loc>
<lastmod>2021-01-31</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://hogeblog.com/post/mimizku/</loc>
<lastmod>2021-02-01</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
あとはGoogle Search Consoleでサイトマップを登録すれば検索エンジンでサイトの内容がヒットしやすくなる。
参考:
https://medium.com/@kjmczk/django-sitemaps-75e1ed78398a
https://qiita.com/chatrate/items/1a8d5e8c3b2b391a0b58
https://djangoproject.jp/doc/ja/1.0/ref/contrib/sitemaps.html