Django: サイトマップの生成方法

2011年4月10日

サイトマップを作成すると、Google, Bingなどの検索エンジンに効率的にクローリングしてもらえるようになるだけでなく、ホスティングしているページ全体に対して、何割がインデックスされているのか?検索エンジンの進捗を確認することが可能となり、SEO効果が期待できます。 しかし、サイトマップ一つとっても、そのフォーマットを覚えたり、XMLを整形したりするために多分の労力を払う必要があり、容易ではありません。 しかし、Djangoにはサイトマップを簡単に作成する機能が組み込まれています。 この機能を提供するのが、 django.contrib.sitemap クラスです。 開発者は、モデルに対するサイトマップクラスを定義するだけで、サイトマップ用のビューを生成することが可能です。 簡単なアプリを例にとり、サイトマップの作成方法を見ていきましょう。

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

(2)Sitemap対象としたいモデルにSitemapの派生モデルを定義する。

    - 「items」にサイトマップ対象となるモデルの全モデルインスタンスを定義。

    - 「location」に、モデルインスタンス(obj)が引数として渡されるので、そのobjに対応したURLをリターンするように定義する。

    - 「lastmod」に、モデルインスタンス(obj)のページの最終更新日情報をリターンするように定義する。

1
2
3
4
5
6
7
8
9
from django.contrib.sitemaps import Sitemap 
class MoviesSitemap(Sitemap): 
   priority = 0.8 
   def items(self): 
        return Movies.objects.all() 
   def location(self, obj): 
        return reverse("movie_item", args=[obj.id]) 
   def lastmod(self, obj): 
        return obj.last_updated

(3)トップレベルのurls.pyに以下を追加 

from jim.movies.models import MoviesSitemap 
sitemaps = { 'movies': MoviesSitemap, 'photo': ImageSitemap, 'group': TribeSitemap, } 

(4)上記urls.urlpatternsにエントリを追加 

... ('^sitemap.xml', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}), ('^sitemap-(?P.+).xml', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), ... 

(5)あとは、/sitemaps.xmlにブラウザからアクセスすれば、生成されたサイトマップが閲覧できる。

1
2
from jim.movies.models import MoviesSitemap 
sitemaps = { 'movies': MoviesSitemap, 'photo': ImageSitemap, 'group': TribeSitemap, }

(4)上記urls.urlpatternsにエントリを追加 

1
2
3
4
5
6
... 
('^sitemap.xml', 'django.contrib.sitemaps.views.index', 
  {'sitemaps': sitemaps}), 
('^sitemap-(?P.+).xml', 'django.contrib.sitemaps.views.sitemap', 
  {'sitemaps': sitemaps}), 
...

(5)あとは、/sitemaps.xmlにブラウザからアクセスすれば、生成されたサイトマップが閲覧できる。