トピック

OG画像のキャッシュ方法

OG画像のキャッシュとは、毎回のシェア時に再レンダリングする代わりに、CDNから以前生成したソーシャルプレビューを配信することを意味します。FastOGはエッジで同一の画像を1年間キャッシュします。同じURLはキャッシュされたPNGを返し、クォータにカウントされず、ほぼゼロのレイテンシで配信されるため、サイトのOGトラフィックの大半はレンダラーに到達しません。

キャッシュが重要な理由

ソーシャルシェアが発生すると、プラットフォームのクローラーによるフェッチが行われます。毎回のシェアで再レンダリングが発生すると、同一コンテンツに対してクォータとレイテンシを消費してしまいます。画像のコンテンツをキーとする積極的なキャッシュにより、「シェアごとに1回のレンダリングが発生する」状態から、「最初のシェアで1回のレンダリングが発生し、それ以降のシェアは無料」という状態に変わります。

コンテンツキー型モデルが機能する仕組み

FastOGはコンテンツ署名付きURL(content-signed URL)を使用します。URLはパラメータの純粋な関数です。同じタイトル+テンプレート→同じURLになります。つまり、次のことを意味します:

  • FastOGのエッジは、そのURLの下に画像を保持します。
  • 同じコンテンツが10,000回共有されても、レンダリングは1回、クォータ消費は1回、残り9,999回はキャッシュヒットです。
  • コンテンツを変更すると→異なるURL→新しいレンダリングが1回発生します。
GET /api/v1/og?title=Hello&template=default&key=...&s=...   → render (1 quota count), then
GET /api/v1/og?title=Hello&template=default&key=...&s=...   → cached (0 counts, instant)
GET /api/v1/og?title=Changed&template=default&key=...&s=... → render (1 quota count)

FastOGのキャッシュヘッダー

FastOGは、レンダリングされた画像に対してCache-Control: public, max-age=31536000, immutable(1年間)を返します。カバーはFastOGのエッジで2層に分かれて配信されます。fastog.comの前段にあるレンダーキャッシュと、その後ろにある永続オブジェクトストアです。繰り返しのフェッチは再レンダリングなしで応答され、レスポンスのX-FastOG-Worker-Cacheがどの層が応答したかを示します(HIT、R2、MISS)。

永続コピーはレンダラーに依存しないため、少なくとも1回フェッチされたカバーは、FastOGのレンダーサービスが一時的に利用できない間も配信され続けます。障害が発生しても、すでに生成済みのプレビューが空白になることはありません。これまで一度もレンダリングされたことのないカバーだけがレンダラーを必要とするケースであり、その場合FastOGはエラーではなく画像で応答します。

状況 クローラーが受け取るもの
カバーがすでにレンダリング済み エッジまたは永続ストアからのカバー
未レンダリング、レンダーサービス稼働中 オンデマンドでレンダリングされたカバー
未レンダリング、レンダーサービスが一時的に停止中 URLに含まれるページ自身の画像(商品写真)、またはニュートラルなカード。エラーページは返されません

リクエスト自体が無効な場合(改ざんされた署名、titleの欠落など)は、対応する4xxが返されます。

公開済み画像の変更

変更内容 対応方法
コンテンツ(タイトル、価格、写真) 何もしない:コンテンツはURLに含まれるため、新しいコンテンツは新しいURLとなり、新しくレンダリングされます
テンプレートまたはレンダリングのデフォルト設定 キャッシュバスティングバージョン(FASTOG_CACHE_BUST)を更新し、すべてのURLに新しいvパラメータを付与します
同じURLを再レンダリングする必要がある場合 サポートにそのURLのパージを依頼してください。URL単位の完全一致パージは公開エンドポイントとして公開されていません

すでに共有されたリンクは引き続き機能し、約束した画像を表示し続けます。ただし、その完全一致URLをパージしない限りはその限りではありません。

独自のog:imageのキャッシュ(セルフホスト)

FastOGのキャッシュを使用せずに画像を自分で保存する場合は、同じルールを適用してください:

手順 詳細
キャッシュキー=コンテンツハッシュ 変更可能なファイル名ではなく、データのハッシュで保存する
長いTTL 安定したコンテンツにはmax-age=31536000, immutableを使用
バージョン付きURL コンテンツが変更されたらハッシュ/バージョンを追加する
前面にCDN CDNに繰り返しの取得を吸収させる

FAQ

同じURLの共有を繰り返すと、本当にレンダリング回数は0になるのですか?

はい。同一のURLはエッジキャッシュにヒットし、レンダラーには到達しないため、クォータは消費されません。

FastOGは画像をどのくらいキャッシュしますか?

1年間です(immutable)。初回レンダリングから長期間経過した後も、共有カードはキャッシュから配信されます。

画像を更新したい場合(例:リアルタイムの価格)はどうすればよいですか?

パラメータ(価格)を変更すると、新しいURLになり、新しいレンダリングが行われます。安定したコンテンツはキャッシュされたまま、動的なコンテンツは必要なときに更新されます。

無料で試す — サインアップ不要

動的OG画像を数秒でプレビューおよびテスト。

無料のOG画像テスターを開く

A BeCaSimulations site