0
1

Heroku + Rails + S3 Google Search Console で「サイトマップを読み込めませんでした」を解消する

Last updated at Posted at 2024-06-22

背景

herokuで動かしている web ページのサイトマップをGoogle Search Console で登録したい。

※ Herokuのダイナモはエフェメラル(一時的)ファイルシステムを採用しているため、デプロイごとにリセットされます。そのため、サイトマップのような定期的に更新されるファイルは、Heroku上で直接生成しても、次のデプロイ時に消えてしまいます。そのため、永続的なストレージへの保存(例えばAmazon S3など)が必要になります。

Storing static files elsewhere is crucial for Heroku apps since dynos have an ephemeral filesystem. Whenever you replace a dyno or when it restarts, which happens daily, all files that aren’t part of your application’s slug are lost. Use a storage solution like S3 to offload the storage of static files from your app.

下記のような色んな参考記事が出てきますが、

Googl Search Consoleのサイトマップ登録では、/sitemap で S3 の sitemap.xml.gz ヘリダイレクトがうまくいかずに失敗しているようでした。

原因

Amazon S3 のパス形式の URL を使っていることが原因でした。

現在、Amazon S3 はすべての AWS リージョンで仮想ホスト スタイルとパス スタイルの両方の URL アクセスをサポートしています。ただし、パス スタイルの URL は将来廃止される予定です。詳細については、次の重要な注意事項を参照してください。

Virtual Hosted-Style URLを使用することで、解決しました。

route.rb
- get '/sitemap', to: redirect("https://s3-ap-northeast-1.amazonaws.com/#{バケット名}/sitemaps/sitemap.xml.gz")
+ get '/sitemap', to: redirect("https://#{バケット名}.s3.ap-northeast-1.amazonaws.com/sitemaps/sitemap.xml.gz")

もとの状態でも正常にサイトマップのダウンロードがうまくいくので、気付くまでとても時間がかかりました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1