サイトマップとは? - Djangoでサイトマップを自動で作成する方法

更新日:
投稿日:

はじめに

今回は、Djangoで「サイトマップ(sitemap.xml)」を自動生成する方法についてまとめました。
サイトマップは検索エンジンに自分のサイト構造を正しく伝えるためのもので、SEO対策としてもとても重要です。
 


1. サイトマップとは

サイトマップ(sitemap.xml)は、検索エンジンに「サイトにどんなページがあるか」を伝えるためのファイルです。
特に、ブログや掲示板のようにページが増えていくサイトでは、自動生成しておくと非常に便利です。
Googleなどのクローラーはこのファイルを見て、新しいページを効率的にインデックス登録してくれます。

2. robots.txtとは

robots.txtは、クローラー(bot)が「どのページを巡回して良いか」を制御するためのファイルです。
また、サイトマップの場所を知らせる役割もあります。

例として以下のように書き、テンプレートディレクトリに設置します。

# templates/robots.txt
User-agent: *
Disallow: /admin/
Sitemap: https://example.com/sitemap.xml

 

次に設定フォルダのurls.pyのurlpatternsに以下のように書きます。

# config/urls.py
from django.views.generic import TemplateView

urlpatterns = [
    …
    path("robots.txt", TemplateView.as_view(template_name="robots.txt", content_type="text/plain")), # ← これを追加!
]

これでクローラーが自動でrobots.txtを読み取ってくれます。

3. Djangoでサイトマップを作成する流れ

(1) django.contrib.sitemapsをINSTALLED_APPSに追加

Djangoでは、django.contrib.sitemapsを有効にすることで自動生成機能が使えるようになります。

設定ファイル(settings.py)を開いて以下を追加します。

# config/settings.py
 INSTALLED_APPS = [ 
'django.contrib.admin',
'django.contrib.auth',
 …
'django.contrib.sitemaps', # ← これを追加!
] 

 

(2) sitemaps.pyを作成

次に、sitemaps.pyファイルをプロジェクトのルートディレクトリ直下に作成します。

ここでは静的ページとブログ記事を例にsitemaps.pyの書き方紹介します。

# myproject/sitemaps.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from blog.models import BlogPost

# 静的ページのサイトマップ
class StaticViewSitemap(Sitemap):
    priority = 0.8
    changefreq = 'weekly'
    def items(self):
        return ['home', 'about', 'contact']

    def location(self, item):
        return reverse(item)

# 動的ページ(ブログ記事など)
class BlogPostSitemap(Sitemap):
    priority = 0.6
    changefreq = 'daily'
    def items(self):
        return BlogPost.objects.all()

    def lastmod(self, obj):
        return obj.updated_at or obj.created_at 

priorityはページの重要度、changefreqは更新頻度を示します。
この設定で、ブログを更新するたびに新しいURLが自動的にサイトマップに追加されます。

ここまでのディレクトリ構成は以下のようになります。

 myproject/
├─ blog/ # アプリケーションフォルダ
│ ├─ models.py
│ ├─ views.py
│ └─ ...
├─ config/ # 設定フォルダ
├─ templates/ # テンプレートフォルダ
│ ├─ blog/
│ └─ robots.txt
├─ manage.py
├─ requirements.txt
└─ sitemaps.py # サイトマップ

 

djangoおすすめのディレクトリ構成はこちら

【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成
更新日:
投稿日:

 

(3)設定フォルダの urls.pyでルーティングを設定

sitemap.xmlへのルートをconfig/urls.pyに追加します。
ここではsitemaps.pyで定義したクラスを読み込みます。

# config/urls.py
from django.contrib.sitemaps.views import sitemap
from sitemaps import (
    StaticViewSitemap,
    BlogPostSitemap,
)

sitemaps = {
    "static": StaticViewSitemap,
    "blog": BlogPostSitemap,
}

urlpatterns = [
    …
    path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='sitemap'),
    path("robots.txt", TemplateView.as_view(template_name="robots.txt", content_type="text/plain")),
] 

これでhttps://example.com/sitemap.xmlにアクセスすると、自動でサイトマップが生成されているのが分かります。

 

(4) Google Search Consoleで登録

サイトマップを生成したら、Google Search Console に登録します(手順は後述します)。

4. Google Search Consoleでの登録方法

  1. 自分のサイトをSearch Consoleに登録

  2. 左メニューから「サイトマップ」をクリック

  3. 「新しいサイトマップを追加」にhttps://example.com/sitemap.xmlと入力

  4. 「送信」ボタンをクリック

ステータスが「成功しました」と表示されれば完了です。
その後は自動的に定期クロールされます。

5. 新しいページを追加したときの対応

・robots.txtへの追加
管理画面など非公開ページを除外したいときのみ追加します。通常の新しい公開ページは追加不要です。

・sitemaps.pyへの追加
新しいモデルやページができた場合、そのモデル用のSitemapクラスを追加します。

・URL構造を変えたとき
ルーティングの名前や引数を変更した場合、reverse()の部分も必ず修正します。

おわりに

サイトマップを自動生成するようにすると、ブログや掲示板のような動的ページの更新がすぐにGoogleに認識されるようになります。
最初は仕組みが難しそうに見えますが、一度構築してしまえば、更新はほぼ自動です。
今後も新しいページを追加するときにsitemaps.pyも更新するのを忘れないようにしましょう。


記事一覧に戻る

関連記事

【Django】設定フォルダの名前を変える2つの方法(プロジェクト作成時・既存プロジェクト) プログラミング
【Django】設定フォルダの名前を変える2つの方法(プロジェクト作成時・既存プロジェクト)
【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法 プログラミング
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法
Bootstrapでトーストを使う方法 ― ポップアップ通知の実装 プログラミング
Bootstrapでトーストを使う方法 ― ポップアップ通知の実装
テンプレートで「〜前」の形式で表示する方法 — Django の timesince を日本語化する プログラミング
テンプレートで「〜前」の形式で表示する方法 — Django の timesince を日本語化する

人気記事

はじめまして その他
はじめまして
閲覧数: 962
プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編) プログラミング
プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編)
閲覧数: 944
VScodeでPython、HTML/CSSコードを自動で整形する方法 プログラミング
VScodeでPython、HTML/CSSコードを自動で整形する方法
閲覧数: 351
【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成
閲覧数: 226
X(旧Twitter)カードを正しく表示するためのHTMLの書き方 プログラミング
X(旧Twitter)カードを正しく表示するためのHTMLの書き方
閲覧数: 182

おすすめ記事

プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編) プログラミング
プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編)
VScodeでPython、HTML/CSSコードを自動で整形する方法 プログラミング
VScodeでPython、HTML/CSSコードを自動で整形する方法
複数ページの重複モデルを整理して保守性・拡張性を上げる プログラミング
複数ページの重複モデルを整理して保守性・拡張性を上げる
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法 プログラミング
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法
【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成

記事へコメントする

コメント一覧(0件)

関連記事

【Django】設定フォルダの名前を変える2つの方法(プロジェクト作成時・既存プロジェクト) プログラミング
【Django】設定フォルダの名前を変える2つの方法(プロジェクト作成時・既存プロジェクト)
【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法 プログラミング
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法
Bootstrapでトーストを使う方法 ― ポップアップ通知の実装 プログラミング
Bootstrapでトーストを使う方法 ― ポップアップ通知の実装
テンプレートで「〜前」の形式で表示する方法 — Django の timesince を日本語化する プログラミング
テンプレートで「〜前」の形式で表示する方法 — Django の timesince を日本語化する

人気記事

はじめまして その他
はじめまして
閲覧数: 962
プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編) プログラミング
プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編)
閲覧数: 944
VScodeでPython、HTML/CSSコードを自動で整形する方法 プログラミング
VScodeでPython、HTML/CSSコードを自動で整形する方法
閲覧数: 351
【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成
閲覧数: 226
X(旧Twitter)カードを正しく表示するためのHTMLの書き方 プログラミング
X(旧Twitter)カードを正しく表示するためのHTMLの書き方
閲覧数: 182

おすすめ記事

プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編) プログラミング
プログラミング初心者が独学で1からPythonを学習し、資格取得・webアプリ作成まで。(資格取得編)
VScodeでPython、HTML/CSSコードを自動で整形する方法 プログラミング
VScodeでPython、HTML/CSSコードを自動で整形する方法
複数ページの重複モデルを整理して保守性・拡張性を上げる プログラミング
複数ページの重複モデルを整理して保守性・拡張性を上げる
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法 プログラミング
【Django】context_processorsとは?全テンプレートに共通変数を渡す方法
【Django】おすすめのディレクトリ構成 プログラミング
【Django】おすすめのディレクトリ構成

記事へコメントする

コメント一覧(0件)

シェアする