Djangoで大きなsitemapを分割表示する

Django

sitemapを作るのはDjangoに組み込まれているモジュールを使えば簡単

sitemapの生成は、django.contrib.sitemaps.views.sitemapを使うことにとても簡単に出来ます。

生成自体は、既にやっていたのですが、sitemapが肥大化しており、開くと何秒も掛かるようになってしまっていたので、Googleのサイトマップドキュメントを見て、分割することにしました。

https://developers.google.com/search/docs/advanced/sitemaps/large-sitemaps?hl=ja

sitemapのindexファイルを作るのもDjangoなら簡単に出来る

実は、このsitemapを分割する為のindexファイルと呼ばれるものもDjangoのモジュールに組み込まれていて、簡単に出来ました。

class HomeSitemap(Sitemap):
    priority = 1.0
    changefreq = 'hourly'
    location = '/'

    def items(self):
        return ['home']

class AboutSitemap(Sitemap):
    priority = 1.0
    changefreq = 'yearly'
    location = '/about/'

    def items(self):
        return ['about']
from django.contrib.sitemaps.views import index, sitemap
from django.urls import path

sitemaps = {
    'home': HomeSitemap, AboutSitemap
}

urlpatterns = [
    path('sitemap.xml', index, {'sitemaps': sitemaps}),
    path('sitemap_<section>.xml', sitemap, {'sitemaps': sitemaps})
]

こうすることで、sitemap.xmlにsitemap_home.xmlとsitemap_about.xmlのURLが入ったものが自動生成されます。メチャクチャ便利でした!

<?xml version="1.0" encoding="UTF-8"?>
  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <sitemap>
      <loc>http://www.example.com/sitemap_home.xml</loc>
    </sitemap>
    <sitemap>
      <loc>http://www.example.com/sitemap_about.xml</loc>
    </sitemap>
  </sitemapindex>

最後に

こんな便利なものが用意されていることに驚かされました。まだまだ、知らない便利なものって用意されてるんだろうなぁ。

最近知った、itertoolsも便利だったので、機会があればまとめたいと思います。

コメントを残す