🐿️
Railsアプリの大規模なサイトマップをCloudflare R2で配信
はじめに
サイトマップを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にカスタムドメインを設定して、作成したサイトマップを配信するようにします。
おわりに
当初のサイトマップは5万件ごとに分割されているしファイルも圧縮されているのでRailsアプリでも十分に対応できると思っていたのですが、実際にはエラーレートが高くなっていたため、Cloudflare R2でサイトマップを配信するようにしました。
最近はRailsアプリの開発でもCDNやクラウドストレージと連携することが増えてきて、ActiveStorageを使う機会も増えてきました。Cloudflareなどのクラウドを効率的に利用できるようにしたいと思っています。
Discussion