Django サイトマップ:'sitemaps.Sitemap.location' 属性でサイトマップ作成をレベルアップ!


django.contrib.sitemaps モジュール内の sitemaps.Sitemap.location 属性は、サイトマップ XML ファイルにおける各エントリの URL を定義します。これは、検索エンジンがサイトの構造を理解し、効率的にインデックスできるようにするために重要です。

属性の構成

location 属性は、文字列値として URL を格納します。この URL は、サイトのルートドメインから始まる完全修飾 URL でなければなりません。

具体的な使用方法

sitemaps.Sitemap サブクラスを定義する際に、 location 属性を設定します。これは、サブクラスの get_urls() メソッド内で url キーワード引数を使用して行います。

from django.contrib.sitemaps import Sitemap

class MySitemap(Sitemap):
    def get_urls(self, *args, **kwargs):
        return [
            {
                'location': '/my-page/',
                'lastmod': datetime.datetime.now(),
            },
        ]

上記の例では、/my-page/ ページのエントリがサイトマップに追加されます。

  • 複数のサイトマップを作成する場合は、それぞれ異なる location 属性を設定する必要があります。
  • 静的ファイルや外部サイトへのリンクも location 属性で指定できます。
  • 独自の URL を生成して、サイトマップに含めることができます。
  • location 属性は、必ずしも Django の URL パターンと一致する必要はありません
  • サイトマップの生成と設定に関する詳細は、Django サイトマップ公式ドキュメントを参照してください。
  • sitemaps.Sitemap.location 属性は、URL だけ を設定するものです。


from django.contrib.sitemaps import Sitemap
from .models import BlogPost

class BlogPostSitemap(Sitemap):
    changefreq = 'weekly'
    priority = 0.5

    def items(self):
        return BlogPost.objects.all()

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

上記のコードは、以下の内容を実行します。

  1. BlogPostSitemap サブクラスを定義します。
  2. changefreq 属性を設定して、サイトマップが毎週更新されることを示します。
  3. priority 属性を設定して、このサイトマップが他のサイトマップよりも重要であることを示します。
  4. items() メソッドを定義して、サイトマップに含めるブログ記事のクエリセットを返します。
  5. lastmod() メソッドを定義して、各記事のエントリの最終更新日時を返します。

例2: 静的ファイルへのリンクを含むサイトマップ

この例では、サイトの静的ファイルへのリンクを含むサイトマップを作成します。

from django.contrib.sitemaps import Sitemap

class StaticFilesSitemap(Sitemap):
    priority = 0.3

    def items(self):
        from django.contrib.staticfiles.storage import staticfiles_storage
        return [
            {'location': staticfiles_storage.url(path)}
            for path in staticfiles_storage.listdir('/')
            if not staticfiles_storage.isdir(path)
        ]
  1. StaticFilesSitemap サブクラスを定義します。
  2. priority 属性を設定して、このサイトマップが他のサイトマップよりも重要であることを示します。
  3. items() メソッドを定義して、サイトマップに含める静的ファイルのリストを返します。
  4. staticfiles_storage.url() 関数を使用して、各ファイルの URL を生成します。
  5. staticfiles_storage.isdir() 関数を使用して、ディレクトリではなくファイルをスキップします。

例3: 外部サイトへのリンクを含むサイトマップ

この例では、外部サイトへのリンクを含むサイトマップを作成します。

from django.contrib.sitemaps import Sitemap

class ExternalLinksSitemap(Sitemap):
    priority = 0.1

    def items(self):
        return [
            {'location': 'https://www.example.com/'},
            {'location': 'https://www.example.org/'},
        ]
  1. ExternalLinksSitemap サブクラスを定義します。
  2. priority 属性を設定して、このサイトマップが他のサイトマップよりも重要であることを示します。
  3. items() メソッドを定義して、サイトマップに含める外部リンクのリストを返します。
  4. 各リンクの location 属性に、完全修飾 URL を設定します。

これらの例は、sitemaps.Sitemap.location 属性をどのように使用して、さまざまなタイプのサイトマップを作成できるかを示しています。

  • ユーザーページのサイトマップ
  • イベントページのサイトマップ
  • カテゴリページのサイトマップ
  • 商品ページのサイトマップ

これらの例は、サイトの構造とコンテンツに合わせて調整する必要があります。

  • サイトマップを定期的に更新して、最新の情報が反映されるようにしてください。
  • サイトマップファイルは、検索エンジンがアクセスできる場所に配置する必要があります。
  • サイトマップに含める URL は、すべて有効であることを確認してください。


カスタムビュー関数を使用する

  • これは、より柔軟な URL 生成が必要な場合や、データベースから URL を取得する場合に役立ちます。
  • sitemaps.Sitemap.location 属性を使用する代わりに、カスタムビュー関数を作成して URL を生成することができます。
from django.contrib.sitemaps import Sitemap
from django.urls import reverse

class MySitemap(Sitemap):
    def get_urls(self, *args, **kwargs):
        return [
            {
                'location': reverse('my-view', kwargs={'pk': 10}),
                'lastmod': datetime.datetime.now(),
            },
        ]

third-party ライブラリを使用する

  • 例えば、これらのライブラリは、自動生成された URL や、カスタムな変更頻度と優先順位の設定などを提供することができます。
  • django-sitemaps-ext のようなサードパーティ製ライブラリを使用すると、sitemaps.Sitemap.location 属性よりも多くの機能と柔軟性を提供することができます。

プラグインを使用する

  • これらのプラグインは、セットアップと使用が簡単な場合が多く、手動でコードを書く必要が少なくなります。
  • Django CMS や Wagtail などの CMS を使用している場合は、サイトマップを生成するためのプラグインが用意されている場合があります。
  • また、カスタムビュー関数を使用したり、サードパーティ製ライブラリを使用したりする場合は、潜在的なパフォーマンス上の影響を考慮する必要があります。
  • 上記の代替方法を使用する場合は、Django サイトマップの公式ドキュメントで定義されている要件をすべて満たしていることを確認する必要があります。