🐿️

Railsアプリの大規模なサイトマップをCloudflare R2で配信

2023/09/10に公開

はじめに

サイトマップをRailsアプリのpublicディレクトリで配信していたのですが、Googleのクロールに対してエラーとなってしまう場合が多かったので、Cloudflare R2を利用してサイトマップを配信するように設定します。

サイトマップ

今回のデータは500万件以上になります。それらのページを検索エンジンがアクセスできるようにサイトマップを公開します。

SitemapGeneratorのインストール

RailsアプリにSitemapGeneratorをインストールするため、Gemfileにsitemap_generatorを追加してインストールします。

Gemfile
gem 'sitemap_generator'
bundle

サイトマップのURLを設定してサイトマップを作成

以下の例ではhttps://abc.defrag.worksのWebサイトのサイトマップをhttps://sitemaps.defrag.works/abcで配信しています。

この設定例ではサイトマップはsitemapsディレクトリに保存されます。

config/sitemap.rb
SitemapGenerator::Sitemap.default_host = 'https://abc.defrag.works'

SitemapGenerator::Sitemap.sitemaps_host = 'https://sitemaps.defrag.works'
SitemapGenerator::Sitemap.public_path = 'sitemaps/'
SitemapGenerator::Sitemap.sitemaps_path = 'abc/'

以下のコマンドを実行してサイトマップを作成します。

rake sitemap:refresh:no_ping

robots.txt

robots.txtでサイトマップのURLを指定します。

public/robots.txt
User-agent: *
Allow: /

Sitemap: https://sitemaps.defrag.works/abc/sitemap.xml.gz

Cloudflare R2でサイトマップを配信

Cloudflare R2にカスタムドメインを設定して、作成したサイトマップを配信するようにします。

https://dev.classmethod.jp/articles/cloudflare-r2-ga/

おわりに

当初のサイトマップは5万件ごとに分割されているしファイルも圧縮されているのでRailsアプリでも十分に対応できると思っていたのですが、実際にはエラーレートが高くなっていたため、Cloudflare R2でサイトマップを配信するようにしました。

最近はRailsアプリの開発でもCDNやクラウドストレージと連携することが増えてきて、ActiveStorageを使う機会も増えてきました。Cloudflareなどのクラウドを効率的に利用できるようにしたいと思っています。

Discussion