OGP は Open Graph protocol の略で、ページの <head> に書く og: で始まる <meta> タグのことです。URL が SNS やチャットに貼られたとき、そのページのタイトル・説明文・画像をどう表示してほしいかを伝えます。仕様は ogp.me で公開されていて、もともとは Facebook が作り、RDFa を土台にしています。そのため属性は name ではなく property を使います。

いまは Facebook だけでなく、X のカード、LINE のトーク内の URL プレビュー、はてなブックマークのサムネイル、Slack の展開表示もこのタグを読んでいます。ただし、どのタグを読むか、画像の条件、キャッシュの長さはサービスごとに違い、それぞれ別の場所に書かれています。この記事では、仕様の必須タグから始めて、各サービスの公式ドキュメントに書かれている内容を並べ、最後に ZeroTool の Meta タグジェネレーターで日本語ページの OGP を作った出力を確認します。ドキュメントの確認日はすべて 2026-10-02 です。

必須の4つと、一緒に書くことが多いタグ

ogp.me はすべてのページに必要なプロパティとして次の4つを挙げています。

プロパティogp.me の説明例
og:titleグラフ上に表示されるオブジェクトのタイトル雨の日に行ける都内のカフェ10選
og:typeオブジェクトの種類。種類によっては追加のプロパティが必要article
og:imageオブジェクトを表す画像の URLhttps://example.jp/ogp/rainy-day.jpg
og:urlグラフ上で永続的な ID として使われる正規 URLhttps://example.jp/cafe/rainy-day/

任意のプロパティで推奨されているのは og:description(1〜2文の説明)、og:site_name(サイト全体の名前)、og:locale などです。og:locale は language_TERRITORY の形式で、既定値は en_US です。日本語のページなら ja_JP と明示しておくと、既定値の英語として扱われません。og:type を書かないページは website として扱われます(ogp.me と Facebook のドキュメントの両方に記載があります)。

ブログ記事やニュースには og:type に article を使い、article:published_time(公開日時)、article:modified_time(更新日時)、article:author、article:section、article:tag を足せます。日時は ISO 8601 形式です。

タグの書き方

OGP のタグは <meta property="og:..." content="..."> の形で書きます。ogp.me の例では <html prefix="og: https://ogp.me/ns#"> のように prefix 属性も書かれています。X のカード用タグ(twitter:card など)は name 属性で書き、X のドキュメントは「Twitter カードにはこの prefix の指定は不要」としています。

値の型にも決まりがあります。ogp.me は URL 型を「http:// か https:// を使う有効な URL」と定義しているので、og:image は /ogp/top.jpg のような相対パスではなく、https:// から始まる絶対 URL で書きます。

画像のように複数書けるタグは、同じタグを並べると配列になります。ogp.me には「衝突したときは上にあるタグが優先される」とあり、og:image:width のような構造化プロパティは直前の og:image に属します。仕様の例では、次の書き方で「1枚目は 300×300、2枚目はサイズ不明、3枚目は高さ 1000px」の3枚になります。

<meta property="og:image" content="https://example.com/rock.jpg" />
<meta property="og:image:width" content="300" />
<meta property="og:image:height" content="300" />
<meta property="og:image" content="https://example.com/rock2.jpg" />
<meta property="og:image" content="https://example.com/rock3.jpg" />
<meta property="og:image:height" content="1000" />

表示させたい画像を先頭に書くこと、og:image:width などは必ず対応する og:image の後に書くことが、この規則から決まります。og:image:alt について ogp.me は「og:image を指定するなら og:image:alt も指定すべき」と書いています。

サービスごとに読まれるタグ

各サービスが公式に書いている内容だけをまとめると次のとおりです。

サービス読むタグ書かれていない場合
Facebook(Instagram・Messenger も同じクローラー)og:url・og:title・og:description・og:image・og:type・og:locale・fb:app_id独自の推測でタイトル・説明・画像を決める
Xtwitter:card などの twitter: タグを先に見て、なければ og:title・og:description・og:image・og:image:alt を使うtwitter:card がなく og:type・og:title・og:description があれば summary カードになることがある
LINEog:title・og:description・og:image の3つだけタイトルは <title>、説明は description メタタグか本文のテキストを使う
はてなブックマークエントリーのタイトルは og:title を優先、サムネイルは og:image か Twitter カードの画像概要はページ本文から抽出
SlackoEmbed、Twitter カード、Open Graph のタグ—

出典は Facebook のウェブマスター向けガイド、X の Cards markup、LINE Developers の FAQ「トークの URL プレビューはどのようにして生成されますか?」、はてなブックマークヘルプのサイト管理者向け情報と開発ブログ(2021-11-10)、Slack Robots です。X のカードのドキュメントは 2026-10-02 時点で developer.x.com から削除され、X API の概要ページに転送されるため、Internet Archive の 2026年1〜2月の保存版にリンクしています。

LINE の FAQ は「LINE で使用されるのは上記の3つの OGP タグのみ」と明記しています。og:site_name や og:image:alt を書いても LINE のプレビューには出ません。

はてなブックマークは 2021年11月のお知らせで「og:title が設定されていればそちらを優先する」ようになりました。それまでは <title> 要素かユーザーが設定したタイトルでした。また、ページの meta タグで noindex・noarchive・nosnippet のいずれかを指定すると、エントリーページに概要とサムネイルを載せない、とヘルプに書かれています。検索に出したくないページに noindex を付けると、はてブのサムネイルも消えるということです。

og:title にサイト名を入れるか

日本語のサイトでは <title> を「記事タイトル|サイト名」の形にすることが多く、そのまま og:title にも入れているページをよく見かけます。Facebook のガイドは og:title を「サイト名などのブランドを含まない記事のタイトル」と説明していて、サイト名は og:site_name に分けることを想定しています。

一方、はてなブックマークは og:title を優先して採用するので、og:title からサイト名を外すと、はてブのエントリーのタイトルにもサイト名が出なくなります。どちらを選ぶかはサイトの方針次第ですが、<title> と og:title は別々に決められる、という点は押さえておくと迷いません。

Google 検索は、タイトルリンクを作るときの材料の一つとして og:title を使います(タイトルリンクのドキュメントでは <title>、見出し、og:title など9種類の情報源が挙がっています)。サイト名の表示には WebSite 構造化データが最も重要で、og:site_name も考慮される、とサイト名のドキュメントにあります。

日本語ページの OGP を生成した例

Meta タグジェネレーターに次の値を入れました。タイトルはサイト名付き、Language は ja、og:type は article、og:locale は ja_JP です(viewport のチェックは外し、Schema.org は「なし」)。

<title>雨の日に行ける都内のカフェ10選|週末さんぽ帖</title>
<meta name="description" content="渋谷・吉祥寺・清澄白河で、駅から濡れずに行けるカフェを10軒紹介します。電源とWi-Fiの有無も載せました。">
<link rel="canonical" href="https://example.jp/cafe/rainy-day/">
<meta name="robots" content="index, follow">

<!-- Open Graph / Facebook -->
<meta property="og:type" content="article">
<meta property="og:title" content="雨の日に行ける都内のカフェ10選|週末さんぽ帖">
<meta property="og:description" content="渋谷・吉祥寺・清澄白河で、駅から濡れずに行けるカフェを10軒紹介します。電源とWi-Fiの有無も載せました。">
<meta property="og:url" content="https://example.jp/cafe/rainy-day/">
<meta property="og:site_name" content="週末さんぽ帖">
<meta property="og:image" content="https://example.jp/ogp/rainy-day.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="雨の窓越しに見えるカフェの店内">
<meta property="og:locale" content="ja_JP">

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@sanpocho">
<meta name="twitter:title" content="雨の日に行ける都内のカフェ10選|週末さんぽ帖">
<meta name="twitter:description" content="渋谷・吉祥寺・清澄白河で、駅から濡れずに行けるカフェを10軒紹介します。電源とWi-Fiの有無も載せました。">
<meta name="twitter:image" content="https://example.jp/ogp/rainy-day.jpg">

この出力から分かるツールの動きは次のとおりです。

  • 「タイトル」欄の文字列は <title>・og:title・twitter:title の3か所にそのまま入ります。og:title からサイト名を外したいときは、コピーしたあとで og:title の行だけを書き換えます。
  • 「正規 URL」欄は <link rel="canonical"> と og:url の両方に使われます。空欄にすると両方とも出力されず、OGP の必須プロパティが1つ欠けます。
  • og:image:width・og:image:height・og:image:alt は画像 URL があるときだけ、og:image の直後に出力されます。
  • twitter:image は Twitter 用の画像を別に入れない限り og:image と同じ URL になります。X は twitter: タグがなければ OGP のタグを使うので、twitter:title などの重複行は省いてもかまいません。twitter:card は大きい画像のカードにするために必要です。
  • <html prefix="og: ..."> は <html> 要素の属性なので、このツールの出力(<head> に貼るブロック)には含まれません。

タイトルと説明の文字数カウンター(60 と 160)は JavaScript の文字列の長さを数えているので、全角も半角も1文字です。この例のタイトルは 23 文字、説明は 54 文字です。Google はスニペットのドキュメントで「説明の長さに上限はなく、検索結果では必要に応じて、たいていは端末の幅に合わせて切り詰める」と書いています。切れる位置は文字数ではなく表示幅で決まり、全角文字は半角より幅を取るので、カウンターは目安として使ってください。X の Cards markup には twitter:title は最大 70 文字、twitter:description は最大 200 文字とあります。

右側のプレビュー(Google・Facebook・Twitter・Discord)はツールが入力から描いた見本で、各サービスの実際の表示とは別物です。プレビューを描くために、ブラウザーは入力した画像 URL を読み込みます。タグの内容そのものはどこにも送信されません。

OGP 画像のサイズと形式

画像の条件は、Facebook と X で数字が違います。

Facebook(リンクシェアの画像)X の summary_large_image(保存版)
縦横比1.91:1 にできるだけ近く2:1
最小200×200(600×315 未満は小さく表示)300×157
推奨・最大1200×630 以上を推奨最大 4096×4096
ファイルサイズ8 MB 以下5 MB 未満
形式og:image:type は image/jpeg・image/gif・image/pngJPG・PNG・WEBP・GIF(GIF は1フレーム目のみ)、SVG は非対応

1200×630 は縦横比 1.905 で Facebook の推奨に合いますが、X の 2:1 とは一致しません。1枚の画像を両方で使うなら、端が少し切れても困らないように、文字やロゴは中央寄りに置くのが無難です。X の summary カード(小さいほう)は 1:1、最小 144×144 で、どの環境でも正方形に切り抜かれる、とドキュメントにあります。

Facebook は、og:image:width と og:image:height を書いておけば、画像を非同期にダウンロードして処理する前にプレビューを描ける、と説明しています。書かない場合、最初にシェアした人には画像が出ないことがあります。

反映されないときの確認とキャッシュ

OGP を直したのに古いプレビューのままのときは、まずクローラーにどう見えているかを確認します。Facebook のクローラーのページには、クローラーと同じヘッダーでページを取得する curl コマンドが載っています。

curl -s --compressed -H "Range: bytes=0-524288" -H "Connection: close" \
  -A "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" \
  "https://zerotool.dev/ja/tools/meta-tag-generator/" \
  | grep -oE '(property|name)="(og|twitter):[a-z_:]+"'
property="og:site_name"
property="og:title"
property="og:description"
property="og:url"
property="og:image"
property="og:type"
name="twitter:card"
name="twitter:title"
name="twitter:description"
name="twitter:image"

このサイト自身のページには必須の4つはありますが、og:image:width・og:image:height・og:image:alt は出していません。ブラウザーでは見えていても、ログイン画面やボット対策でクローラーだけが弾かれている場合は、ここで違いが分かります。Facebook はページの先頭 1 MB までに OGP のタグがないと読まず、サーバーが gzip と deflate に対応していることも求めています。JavaScript であとから挿入したタグは、取得した HTML には含まれません。

確認できたら、各サービスのキャッシュを更新します。

  • Facebook: シェアデバッガーに URL を入れると再取得されます。画像は画像の URL ごとにキャッシュされるので、画像を差し替えるときは新しい URL にします。古い投稿が参照しているので、古い画像は消さないように、とも書かれています。
  • X: カードのマークアップがあるページは、投稿されてから 7 日間キャッシュされます(Getting started の保存版)。X のクローラー(Twitterbot)は robots.txt に従うので、robots.txt でページか画像をブロックしているとカードもサムネイルも出ません。
  • LINE: FAQ にはキャッシュの期間も消し方も書かれていません。同じ FAQ には「LINE で送る」ボタンでシェアしたとき、URL によってはプレビューが出ないことがあり、その場合も URL 自体はシェアできる、とあります。
  • Slack: 取得結果は約 30 分キャッシュされます。Slack は robots.txt には従いません。

よくある失敗

  • 画像を相対パスで書く。 URL 型は http:// か https:// で始まる必要があります。
  • SVG を og:image にする。 X は非対応と明記していて、Facebook の og:image:type も JPEG・GIF・PNG だけです。
  • og:url をトップページの URL のままにする。 Facebook ではシェア数や「いいね!」が og:url に集計されるので、どの記事をシェアしてもトップページとして数えられます。
  • 画像のサイズ指定が実際の画像と違う。 og:image:width と og:image:height はクローラーが画像を取得する前に枠を決めるための値なので、違う数字を書くと違う形で枠が作られます。
  • noindex のページでサムネイルを期待する。 はてなブックマークは noindex・noarchive・nosnippet があるページの概要とサムネイルを載せません。

参考資料

関連ツール: 同じ <head> に入れるアイコンは Favicon ジェネレーター、X のクローラーが取得できるかを左右するクロール設定は Robots.txt ジェネレーターで作れます。