FrontEnd

React Router v7 + Cloudflare PagesでのOGPタグ設定とOGP画像生成

投稿日:

はじめに

React Router v7とCloudflare PagesでOGPタグの設定とOGP画像生成をやってみたいと思います。

OGPタグの設定

全体で共通の設定

アプリケーション全体で共通の設定をするには、root.tsxのレイアウトコンポーネントに定義します。

meta()関数による動的な設定

React Router v7で、ルートモジュールごとに meta() 関数を定義することで、タイトルタグやメタタグを指定できます。ここで指定した内容は先ほどのレイアウトコンポーネントにある <Meta /> に入ります。

基本的には、Remix v2の時と似たような考え方ですが、React Router v7で導入された「型安全なルーティング」を活用しています。 meta() 関数のPropsの型として使っているのは、このルートモジュールを元に自動生成された Route.MetaArgs です。
今回は、この中に含まれている data を使っています。これは、 loader() の返り値の型になっています。

meta() 関数の戻り値は配列ですが、その1つひとつのオブジェクトは、以下のようなキーを指定することができます。

  • title
    タイトルタグを指定するためのもの
  • name
    メタタグの name を指定するためのもの。(descriptionやkeywordなどを指定する)
  • property
    メタタグの property を指定するためのもの。主に、OGPのプロパティを指定するために使用する。
  • content
    メタタグの content を指定するためのもの。

これで、以下のようなメタタグが出力されるようになりました。

 

OGP画像の生成

ここからは、React Router v7でOGP画像を生成し、メタタグに挿入するところまでをやってみます。
Remix時代のこちらの記事を参考にしながら、実装しました。

@vercel/ogの導入

OGPの生成には @vercel/og を使いますが、Cloudflare Pagesで動かすためにラッパーを使います。

middlwareの実装

OGPを生成するには、Cloudflare PagesのFunctions機能を使います。
今回は、各ページごとに異なるOGPを生成するため、Cloudflare PagesのMiddleware機能を使います。 functions/profiles/_middleware.tsx を作成します。
このパスに作成することで、 profiles/ 配下にアクセスされた場合のみに実行することができます。

OGP画像のレイアウトは以前作ったものをそのまま使ってみました。
実際に動作させるには、ローカル環境で pnpm run build && wrangler pages dev を実行するか、実際にデプロイする必要があります。

これで、以下の画像が生成されました。

メタタグにも以下のように挿入されています。

OGPチェッカーで確認

最後に、実際にデプロイしてOGPチェッカーで内容を確認してみます。

問題なく認識されていますね!

さいごに

React Router v7関連の情報はまだ少ないので、これからも調査して情報発信していきたいと思います!

おすすめ書籍

Reactハンズオンラーニング 第2版 ―Webアプリケーション開発のベストプラクティス プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発

page_footer_responsive




-FrontEnd
-, ,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

正式版Vue.js 3.0のTeleportを触ってみる

1 はじめに1.1 Vue.js 3.0のプロジェクト作成方法1.2 Teleportとは2 基本形2.1 コード2.2 画面3 別のコンポーネントの入れ子にする場合3.1 コード3.2 画面4 同じ ...

laravel logo

Inertia使ってみた①

1 はじめに2 Inertiaとは3 ルーティング4 LaravelからReactに値渡し5 レスポンス5.1 初回5.2 page object5.3 2回目以降5.4 リロード時6 さいごに7 お ...

SWRを使ってみた①

1 はじめに2 概要3 使い方4 主な特徴4.1 自動再検証4.2 重複排除4.3 ステート管理5 さいごに6 おすすめ書籍 はじめに 最近、React用ライブラリのSWRを触る機会があったので備忘録 ...

react-icon

React Big Calendarの複数タイムゾーン対応

1 はじめに2 端末のタイムゾーンのみに対応する場合3 複数のタイムゾーンに対応する。3.1 日時を指定のタイムゾーンに変換する3.2 イベントの開始日時・終了日時を動的に設定する3.3 ラップクラス ...

svelte

SvelteのStore入門

1 はじめに2 SvelteにおけるStoreの概要2.1 Storeの条件2.2 Storeの種類3 Storeの実装と使い方3.1 Writable Store3.1.1 実装例3.1.2 使用例 ...

フォロー

blog-page_side_responsive

2025年1月
 1234
567891011
12131415161718
19202122232425
262728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。