OGP テキストの最適化|SNS シェア時の表示を改善する方法
OGP (Open Graph Protocol) は、Web ページが SNS でシェアされた際の表示内容を制御するための仕組みです。2010 年に Facebook が提唱し、RDFa の語彙として設計されたこのプロトコルは、現在ではほぼすべての SNS とメッセージングアプリが対応しています。適切に設定されていないと、タイトルが途中で切れたり、意図しない説明文が表示されたりして、クリック率が大幅に低下します。この記事では、OGP テキストの最適化方法とプラットフォーム別の表示仕様を解説します。SNS マーケティングの関連書籍でも OGP 設定の重要性は繰り返し強調されています。
Open Graph Protocol の仕様と歴史
OGP は Facebook が 2010 年の F8 カンファレンスで発表したメタデータ規格です。HTML の <head> 内に <meta property="og:..."> タグを記述することで、ページの構造化情報をクローラーに伝えます。仕様は ogp.me で公開されており、基本プロパティとして og:title、og:type、og:image、og:url の 4 つが必須と定義されています。
OGP が登場する以前、SNS はページの <title> タグや <meta name="description"> を読み取ってプレビューを生成していました。しかし、これらは検索エンジン向けに最適化されたテキストであり、SNS のフィード上で表示するには冗長だったり文脈が合わなかったりする問題がありました。OGP はこの課題を解決するために、SNS 表示専用のメタデータ層を提供しています。
プラットフォーム別の OGP 表示仕様
SNS ごとに OGP テキストの表示領域は異なります。各プラットフォームの仕様を把握し、重要な情報が確実に表示されるよう文字数を調整することが重要です。以下の表は、各プラットフォームのモバイルアプリにおける実測値です。デスクトップ版ではやや多くの文字が表示される傾向があります。
| プラットフォーム | og:title 表示文字数 | og:description 表示文字数 | 画像推奨サイズ |
|---|---|---|---|
| X (Twitter) | 約 70 文字 (モバイル約 55 文字) | 約 120 文字 (カード形式で非表示の場合あり) | 1200×628px |
| 約 60 文字 (モバイル約 45 文字) | 約 80 文字 (モバイル約 65 文字) | 1200×630px | |
| LINE | 約 50 文字 | 約 70 文字 | 1200×628px |
| はてなブックマーク | 約 80 文字 | 約 120 文字 | 1200×630px |
| Slack | 約 70 文字 | 約 150 文字 | 1200×630px |
最も制限が厳しいのは Facebook のモバイル表示で、og:title は約 45 文字、og:description は約 65 文字で切れます。全プラットフォームで確実に表示するには、og:title を 40〜45 文字以内に収めるのが安全です。
og:title の文字数と CTR の関係
og:title の文字数はクリック率 (CTR) に直接影響します。一般的な傾向として、30〜50 文字の og:title が最も高い CTR を記録します。短すぎると情報量が不足し、長すぎると途中で切れて意味が伝わらなくなるためです。
特に効果が高いのは、数字を含む具体的なタイトルです。「5 つの方法」「2025 年版」のような表現は、抽象的なタイトルと比較して CTR が 20〜30% 向上するとされています。疑問形のタイトル (「〇〇していませんか?」) も好奇心を刺激し、クリックを促す効果があります。
og:title の最適化
og:title はシェア時に最も目立つ要素であり、クリック率を左右する最重要項目です。ページの title タグとは別に設定できるため、SNS 向けに最適化した表現を使うことが可能です。
効果的な og:title を書くためのポイントは以下の通りです。
- 40〜45 文字に収める: Facebook モバイルの厳しい制限でも途切れずに表示される
- サイト名を省略する: SNS では文脈が異なるため、記事の内容に文字数を割く
- 数字や具体性を含める: 「5 つの方法」「2025 年版」のような表現はクリック率を高める
- 疑問形や呼びかけを活用する: 「〇〇していませんか?」のような表現は目を引く
og:title と HTML title の不一致時の挙動
og:title と HTML の <title> タグは独立した要素であり、異なる値を設定できます。各プラットフォームのクローラーは og:title を優先的に読み取りますが、og:title が未設定の場合は <title> タグの値にフォールバックします。
ただし、両者の内容が大きく異なる場合は注意が必要です。Google は検索結果のタイトルに og:title を採用することがあり、SEO 用に最適化した title タグの内容が検索結果に反映されないケースが報告されています。og:title と title タグの使い分けは、SEO 用の title タグにはキーワードを含め、og:title は SNS でのクリック率を意識して感情に訴える表現にするのが効果的ですが、両者の主題は一致させておくのが安全です。
og:description の書き方
og:description はタイトルの下に表示される補足テキストです。タイトルだけでは伝えきれない情報を補い、クリックの後押しをする役割を担います。
og:description は 70〜100 文字が適切です。冒頭の 40 文字に最も重要な情報を配置し、途中で切れても意味が通じるようにします。meta description と同じ内容でも構いませんが、SNS のユーザー層を意識してカジュアルな表現にすることも有効です。
og:description 未設定時のフォールバック
og:description を設定しなかった場合、各プラットフォームは独自のロジックでフォールバックテキストを生成します。Facebook は <meta name="description"> の値を使用し、それも未設定の場合はページ本文の冒頭テキストを自動抽出します。X (Twitter) は twitter:description → og:description → meta description の順に参照し、いずれも未設定の場合はページ本文から抽出します。
自動抽出されたテキストは、ナビゲーションメニューやサイドバーの文字列が混入することがあり、意図しない表示になるリスクが高いです。og:description は必ず明示的に設定しましょう。文字数カウントスで og:title と og:description の文字数を確認し、各プラットフォームの表示制限内に収まっているかチェックできます。
OGP 画像 (og:image) の設計
OGP 画像はシェア時の視覚的なインパクトを決定する要素です。テキストだけのシェアと比較して、画像付きのシェアはクリック率が 2〜3 倍になるというデータもあります。
OGP 画像に含めるテキストは 20〜40 文字が適切です。画像内のテキストは小さなスマートフォン画面でも読める大きさにする必要があるため、文字数を絞り込むことが重要です。記事のタイトルをそのまま画像に入れるのではなく、核心部分だけを抽出して配置します。
| プラットフォーム | 最小サイズ | 推奨サイズ | アスペクト比 |
|---|---|---|---|
| 200×200px | 1200×630px | 1.91:1 | |
| X (Twitter) | 144×144px (summary) / 300×157px (large) | 1200×628px | 1.91:1 |
| LINE | 200×200px | 1200×628px | 1.91:1 |
| Slack | 250×250px | 1200×630px | 1.91:1 |
- 画像サイズ: 1200×630px (横長) を基本とする。ファイルサイズは 1MB 以下に抑え、読み込み速度を確保する
- テキスト配置: 画像の中央〜上部に配置し、下部はプラットフォームの UI と重なる可能性がある
- フォントサイズ: 最低 40px 以上を確保する
- 背景色: テキストとのコントラストを十分に確保する。WCAG AA 基準 (コントラスト比 4.5:1 以上) を目安にする
各プラットフォームのクローラーの挙動
OGP 情報を取得するクローラーは、プラットフォームごとに異なる挙動を示します。Facebook のクローラー (facebookexternalhit) は User-Agent ヘッダーで識別でき、JavaScript を実行しません。そのため、クライアントサイドレンダリング (CSR) で OGP タグを動的に生成しているサイトでは、OGP 情報が正しく取得されない問題が発生します。
X (Twitter) の Twitterbot も同様に JavaScript を実行しません。LINE の crawler (Line) も静的 HTML のみを解析します。Slack の Slackbot はやや特殊で、リダイレクトを最大 5 回まで追跡しますが、JavaScript の実行は行いません。
React や Vue.js などの SPA フレームワークを使用している場合、OGP タグはサーバーサイドレンダリング (SSR) または静的サイト生成 (SSG) で出力する必要があります。Next.js の generateMetadata や Nuxt の useHead を活用すると、フレームワークの仕組みの中で OGP タグを適切に出力できます。Web フロントエンド開発の書籍では SSR/SSG での OGP 実装パターンが詳しく解説されています。
OGP キャッシュの仕組みと更新方法
各プラットフォームは OGP 情報をキャッシュしており、ページの OGP タグを更新しても即座には反映されません。キャッシュの有効期間はプラットフォームによって異なります。
- Facebook: 約 24 時間キャッシュ。Facebook シェアデバッガーで URL を入力し「もう一度スクレイピング」をクリックすると即座に更新される
- X (Twitter): キャッシュ期間は非公開だが、約 7 日間とされる。X Card Validator で URL を入力すると最新の情報が取得される
- LINE: 約 1 時間〜数時間キャッシュ。手動でのキャッシュクリア手段は公式には提供されていない
- Slack: URL を再度貼り付けても古いキャッシュが表示される場合がある。URL の末尾にクエリパラメータ (例:
?v=2) を付与することで新しい URL として認識させる回避策がある
OGP を更新した際は、Facebook シェアデバッガーと X Card Validator で再スクレイピングを実行し、意図通りの表示になっていることを確認する習慣をつけましょう。
OGP デバッグツールの使い方
OGP を設定したら、各プラットフォームのデバッグツールで表示を確認することが不可欠です。設定ミスに気づかないまま公開すると、シェアされるたびに意図しない表示が拡散されてしまいます。
主要なデバッグツールとその確認手順は以下の通りです。
- Facebook シェアデバッガー: URL を入力すると、og:title、og:description、og:image のプレビューが表示される。「警告」セクションに不足しているプロパティや推奨サイズ未満の画像が報告される
- X Card Validator: URL を入力すると Twitter Card のプレビューが表示される。twitter:card の種類 (summary / summary_large_image) に応じた表示を確認できる
- LinkedIn Post Inspector: LinkedIn でのシェア表示を確認できる。og:image の最小サイズ (1200×627px) を満たしているかも検証される
OGP タグの設定漏れを防ぐために、文字数カウントスで og:title と og:description の文字数を事前にチェックし、各プラットフォームの表示制限を超えていないか確認する習慣をつけましょう。
CMS 別の OGP 設定方法
主要な CMS やフレームワークでは、OGP タグの設定方法がそれぞれ異なります。
- WordPress: Yoast SEO や All in One SEO Pack などのプラグインで GUI から設定可能。投稿編集画面の「ソーシャル」タブで og:title と og:description を個別に指定できる
- Next.js:
generateMetadata関数でopenGraphプロパティを返すことで、ページごとに OGP タグを動的に生成できる - Nuxt:
useHeadコンポーザブルまたはnuxt.config.tsのapp.headで OGP メタタグを設定する - 静的 HTML:
<head>内に<meta property="og:...">タグを直接記述する。テンプレートエンジンを使用している場合は変数で動的に値を挿入する
動的 OGP 生成の注意点
ユーザーの入力やデータベースの値に基づいて OGP タグを動的に生成する場合、いくつかの注意点があります。
まず、HTML エスケープの徹底が必要です。og:title や og:description にユーザー入力を含める場合、<、>、&、" を適切にエスケープしないと、HTML インジェクションの脆弱性が生じます。
次に、og:image を動的に生成する場合 (例: Vercel OG Image Generation や Cloudinary の動的変換)、画像の生成に時間がかかるとクローラーがタイムアウトする可能性があります。Facebook のクローラーは約 4 秒でタイムアウトするため、画像の生成は事前にキャッシュしておくか、CDN 経由で配信するのが安全です。
また、URL にクエリパラメータやフラグメントが含まれる場合、og:url には正規化された URL (クエリパラメータなし) を設定するのが推奨されます。これにより、同一コンテンツの異なる URL でシェア数が分散するのを防げます。
OGP の歴史と仕様変更
Facebook は 2013 年に OGP の仕様を大幅に変更し、og:image の最小推奨サイズを 600×315px に引き上げました。この変更により、多くのサイトで OGP 画像が正しく表示されなくなる事態が発生しました。2018 年にはさらに推奨サイズが 1200×630px に引き上げられ、高解像度ディスプレイへの対応が求められるようになりました。
X (旧 Twitter) は独自の Twitter Card メタタグ (twitter:card、twitter:title など) を持っていますが、Twitter Card タグが未設定の場合は OGP タグにフォールバックします。そのため、OGP タグを適切に設定しておけば、Twitter Card タグを省略しても基本的な表示は確保できます。ただし、twitter:card タグだけは OGP に対応するプロパティがないため、明示的に設定する必要があります。
よくある失敗パターン
- og:title と title タグを完全に同一にしてしまい、SNS 向けの訴求力を活かせていない。SEO 用の title タグにはキーワードを含め、og:title はクリック率を意識した感情に訴える表現にするのが効果的です
- og:image を設定せずにシェアされ、プラットフォームが自動選択した無関係な画像が表示されてしまう。特にロゴ画像やアイコンが選ばれるケースが多く、クリック率が大幅に低下します
- og:url を設定しない、または相対パスで記述してしまう。og:url は必ず
https://から始まる絶対 URL で指定する必要があります。相対パスを指定すると、プラットフォームによっては URL の解決に失敗し、シェア数がページごとに分散する原因になります - og:type を省略する。og:type が未設定の場合、Facebook は
websiteとして扱いますが、ブログ記事にはarticleを指定することで、公開日や著者情報などの追加メタデータを活用できます
プロのテクニック
- og:title の冒頭 20 文字に最も重要なメッセージを配置する。SNS のタイムラインではスクロール速度が速いため、冒頭で目を引く表現が不可欠です
- OGP 画像にテキストを入れる場合、画像面積の 20% 以内に収める。Facebook の旧広告ポリシーではテキスト面積 20% 超の画像はリーチが制限されていたとされ、この基準は OGP 画像でも参考になります
- og:description の冒頭に行動を促すフレーズを配置する。「今すぐ確認」「無料で試せる」のような表現は、ユーザーのクリック意欲を高めます
- A/B テストを実施する。同一記事に対して異なる og:title を設定し、SNS でのクリック率を比較することで、最適な表現を見つけられます。Facebook シェアデバッガーで OGP を更新した後、異なるグループにシェアして反応を比較する方法が実践的です
まとめ
OGP テキストの最適化は、SNS からの流入を増やすための基本施策です。og:title は 40〜45 文字、og:description は 70〜100 文字を目安に、各プラットフォームの表示仕様に合わせて調整しましょう。OGP タグは HTML の title タグや meta description とは独立して設定できるため、SNS 向けに最適化した表現を使い分けることが重要です。設定後は必ず Facebook シェアデバッガーや X Card Validator で表示を確認し、意図通りに表示されることを検証してください。文字数カウントスで文字数を事前にチェックする習慣をつけると、文字数超過による表示崩れを未然に防げます。