この記事では、 Django で開発したシステムに、サイトマップ管理のための sitemap.xml を自動的に作成する仕組みを導入する手順を解説します。
Django でウェブサイトを構築する際であっても、通常の WEB サイト同様、検索エンジン最適化(SEO)は重要です。
その中でも、サイトマップは検索エンジンがウェブサイトの構造を理解し、効率的にクロールするために欠かせません。
1. Djangoのsitemapフレームワークを有効にする
Django には、標準的に sitemap を生成する仕組みが備わっています。便利!
最初に、組み込み sitemap フレームワークを有効にする必要があります。
settings.py
ファイルを開き、 INSTALLED_APPS
に django.contrib.sitemaps
を追加します。
# settings.py
INSTALLED_APPS = [
...
'django.contrib.sitemaps',
...
]
2. サイトマップクラスを作成する
次に、サイトマップに含めたいモデルごとにサイトマップクラスを作成します。
例として、ブログ記事のサイトマップを作成してみましょう。
sitemaps.py
というファイルをアプリケーションのディレクトリに作成し、以下のようなコードを追加します。
# myapp/sitemaps.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from .models import BlogPost, StaticPage
class BlogPostSitemap(Sitemap):
changefreq = "weekly"
priority = 0.8
def items(self):
return BlogPost.objects.filter(is_published=True)
def lastmod(self, obj):
return obj.updated_at
class StaticPageSitemap(Sitemap):
changefreq = "yearly"
priority = 0.3
def items(self):
return ['home', 'about', 'contact'] #リストの中は一例
def location(self, item):
return reverse(item)
changefreq
: 各ページの更新頻度を示します。priority
: ページの重要度を0.0から1.0の間で示します。items()
: サイトマップに含める記事を返します。lastmod()
: 各記事の最終更新日を返します。
固定ページであれば配列としてそのまま定義すればよく、ブログ記事のように動的に変わるものはロジックを書けば自動化できます。
3. URLの設定
urls.py
ファイルを開き、サイトマップのURLを設定します:
# urls.py
from django.contrib.sitemaps.views import sitemap
from django.urls import path
from .sitemaps import BlogPostSitemap, StaticPageSitemap
sitemaps = {
'blogposts': BlogPostSitemap,
'staticpages': StaticPageSitemap,
}
urlpatterns = [
...
path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
...
]
最終的に、 urls.py には sitemap.xml の URL だけを定義することになるので、sitemaps 自体は自分の管理しやすい粒度で中を変えてもらって問題ないです。
4. サイトマップの確認
設定はこれだけです。
開発サーバーを起動し、ブラウザでhttp://localhost:8000/sitemap.xml
にアクセスすると、自動生成されたサイトマップを確認できます。
おわりに
Django の組み込み sitemap フレームワークを使用することで、簡単にサイトマップを自動生成できます。
これにより、検索エンジンがウェブサイトの構造を効率的に理解し、クロールすることができるようになります。
本当に Django を使うと開発生産性が段違いなので、個人的には大好きなフレームワークです。
サイトマップの設定をカスタマイズすることで、さまざまなタイプのコンテンツや優先度を反映させることができます。
SEO対策の一環として、このサイトマップを Google Search Console に登録することも忘れずに行いましょうね。
コメント