OGP SEO HTML

OGPメタタグ入門 — SNSシェアで「リンクカード」を表示する仕組みと動作確認方法

2026-03-14
目次

URLをSNSに貼ったとき、タイトルや画像がカード形式でリッチに表示されることがありますよね。逆に、URLがテキストのまま素っ気なく表示されることもあります。あの違いは何なのか——答えは OGP(Open Graph Protocol) メタタグの有無です。

このブログにOGPを導入した際に調べた内容を、初心者でもひと通り理解できるように整理しました。

OGP(Open Graph Protocol)とは

OGP(Open Graph Protocol)は、Webページの情報を構造化して外部サービスに伝えるためのプロトコルです。もともとFacebook(現Meta)が2010年に策定したもので、HTMLの <head> 内に <meta> タグとして記述します。

SNSやチャットツールでURLを共有したとき、サービス側はそのURLにアクセスしてOGPメタタグを読み取り、タイトル・説明文・画像をカード形式で表示します。これがいわゆる「リンクカード」や「リンクプレビュー」と呼ばれるものです。

OGPがないとどうなるか

OGPタグがない場合、SNS側は <title> タグやページ本文から情報を推測しようとします。しかし、意図した通りに表示される保証はありません。タイトルが途中で切れたり、関係ない画像が選ばれたり、そもそもプレビューが表示されなかったりします。

OGPを設定すると、こうした問題を解決できます。

  • クリック率の向上: 画像やタイトル付きのリッチなカードは目を引く
  • 意図した情報を表示できる: SNSごとに勝手に解釈されるのを防ぐ
  • サイトの信頼性向上: きちんとカードが出るだけで「ちゃんとしたサイト」に見える

OGPの主要プロパティ一覧と設定方法

OGPにはいくつかのプロパティがありますが、まずは主要なものを押さえておけば十分です。以下は、HTMLの <head> 内に記述するメタタグの例です。

index.html
<head>
<meta property="og:title" content="OGPメタタグ入門" />
<meta property="og:description" content="OGPの基本と動作確認方法を解説します" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://example.com/blog/ogp-meta-tags" />
<meta property="og:image" content="https://example.com/images/ogp.png" />
<meta property="og:site_name" content="気まぐれ駆動開発" />
<meta property="og:locale" content="ja_JP" />
</head>

各プロパティの役割を表にまとめます。

プロパティ必須説明
og:titleはいページのタイトル。SNSカードの見出しになる
og:typeはいコンテンツの種類。ブログ記事なら article、トップページなら website
og:imageはいカードに表示する画像のURL。絶対URLで指定する
og:urlはいページの正規URL(canonical URL)
og:descriptionいいえページの説明文。120文字程度が目安
og:site_nameいいえサイト名。タイトルとは別にサイト全体の名前を表す
og:localeいいえ言語と地域。日本語サイトなら ja_JP

公式仕様(ogp.me)では og:titleog:typeog:imageog:url の4つが必須とされています。実運用では og:description もほぼ必須と考えてよいでしょう。

og:imageの設定で注意すべきポイント

OGPプロパティの中で一番ハマりやすいのが og:image です。押さえておくべきポイントがいくつかあります。

  • 絶対URLで指定する: /images/ogp.png のような相対パスでは認識されない。https://example.com/images/ogp.png のようにフルURLで書く
  • 推奨サイズ: 1200 x 630px が広く推奨されている(Facebookの推奨サイズ)
  • ファイルサイズ: Facebookの上限は8MBだが、実用上は5MB未満に抑えるのが望ましい
  • HTTPS: HTTPSのURLを使う
og-image-with-size.html
<meta property="og:image" content="https://example.com/images/ogp.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="記事のサムネイル画像" />

og:image:widthog:image:height を指定しておくと、SNS側が画像を事前にレイアウト計算でき、表示のちらつきが減ります。og:image:alt は画像の代替テキストです。OGP公式仕様(ogp.me)には含まれていませんが、Facebookが対応しており広く使われています。アクセシビリティの観点からも設定しておくのがおすすめです。

Twitter Card との関係

X(旧Twitter)には独自の Twitter Card という仕組みがあります。OGPとは別のメタタグですが、OGPと併用するのが一般的です。

twitter-card.html
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="OGPメタタグ入門" />
<meta name="twitter:description" content="OGPの基本と動作確認方法を解説します" />
<meta name="twitter:image" content="https://example.com/images/ogp.png" />

ポイントは twitter:card の値です。主な選択肢は以下の2つです。

カードタイプ表示用途
summary小さな正方形の画像 + テキスト一般的なページ
summary_large_image大きな横長の画像 + テキストブログ記事やビジュアル重視のページ

他に player(動画・音声の埋め込み用)や app(モバイルアプリ用)もありますが、ブログ記事では上記2つを使うことがほとんどです。

X(旧Twitter)は、Twitter Card用のメタタグが見つからない場合、OGPタグにフォールバックします。つまり twitter:title がなければ og:title を使ってくれます。ただし twitter:card だけはOGPに対応するものがないので、必ず指定する必要があります。

実際の運用では、OGPタグをベースにして twitter:card だけ追加する、というパターンが多いです。

OGPの動作確認方法とデバッグツール

OGPを設定したら、意図した通りに表示されるか確認しましょう。設定したつもりでも、画像のURLが間違っていたりキャッシュが残っていたりして、うまく表示されないことがあります。

Facebook Sharing Debugger

Meta公式のデバッグツールです。URLを入力すると、Facebookがどのようにページを解釈しているか確認できます。

OGPタグにエラーや警告がある場合は具体的に指摘してくれるので、問題の特定に役立ちます。キャッシュが古い場合も「Scrape Again」で解決できます。

X(旧Twitter)での確認

以前は Twitter Card Validator(cards-dev.twitter.com/validator)というプレビューツールがありましたが、2022年にプレビュー機能が廃止されました。現在の確認方法は以下の通りです。

  • ポスト作成画面: X のポスト作成画面にURLを貼り付けると、カードのプレビューが表示される(実際に投稿しなくても確認できる)
  • サードパーティツール: OGP CheckerIframely を使うと、複数のSNSでの表示をまとめて確認できる

サードパーティツール

以下のツールは、ログイン不要で手軽に使えるのでおすすめです。

ツール特徴
OGP CheckerX / Facebook 両方のプレビューを表示。日本語対応
Iframely URL DebuggerOGP / Twitter Card / oEmbed をまとめてチェック
RAKKO OGP確認ツールFacebook / X / LINE / はてなブックマークのプレビュー対応

個人的には OGP Checker が気に入っています。URLを入れるだけで、各プロパティの値と実際のカード表示がすぐに確認できるので便利です。

OGP設定でよくあるトラブルと対処法

OGPの設定でよく報告されるトラブルをまとめます。

画像が表示されない

一番多いトラブルです。原因はだいたい以下のどれかです。

  • 相対URLで指定している: og:image は絶対URLが必須。/images/ogp.png ではなく https://example.com/images/ogp.png
  • 画像のファイルサイズが大きすぎる: Facebookの上限は8MBだが、実用上は5MB未満を目安に
  • HTTPSでない: HTTP のURLだと取得をブロックするSNSがある
  • robots.txt でブロックしている: SNSのクローラーが画像にアクセスできない

キャッシュが更新されない

OGPタグを修正しても、SNS側にキャッシュが残っていて古い情報が表示されることがあります。Facebook Sharing Debugger の「Scrape Again」ボタンを使えばキャッシュをクリアできます。X(旧Twitter)の場合は、URLの末尾にクエリパラメータ(例: ?v=2)を付けてキャッシュを回避する方法もあります。

og:url とページの実URLが異なる

og:url はページの正規URLを指す必要があります。ここが実際のURLと異なると、SNSが別のページだと認識してしまい、OGP情報が正しく表示されないことがあります。wwwの有無、末尾スラッシュの有無なども統一しましょう。

自サイトでの実践

このブログでも、Astro の BaseLayout コンポーネントでOGPメタタグを動的に生成しています。PWA対応Cloudflare Web Analyticsの導入と合わせて、サイトの基盤整備の一環として追加しました。

実際のコードはこんな感じです。

src/layouts/BaseLayout.astro
---
const siteName = '気まぐれ駆動開発';
const siteUrl = 'https://kimagure-dd.dev';
const { title = siteName, description = 'サイトの説明文', mainClass } = Astro.props;
const canonicalUrl = new URL(Astro.url.pathname, siteUrl).href;
---
<head>
<title>{title}</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonicalUrl} />
<!-- OGP -->
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:type" content={Astro.url.pathname === '/' ? 'website' : 'article'} />
<meta property="og:url" content={canonicalUrl} />
<meta property="og:site_name" content={siteName} />
<meta property="og:locale" content="ja_JP" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
</head>

実装で意識したポイントは以下の通りです。

  • og:type の出し分け: トップページは website、それ以外は article を動的に判定。三項演算子1つで済む
  • 正規URLの生成: Astro.url.pathname とサイトURLから絶対URLを生成。相対パスの罠を避けられる
  • og:image は未設定: 現時点ではOGP用の画像を用意していないので省略している。今後、記事ごとのサムネイル画像を自動生成する仕組みを入れたい
  • twitter:cardsummary を固定: 画像が小さい正方形で表示されるタイプ。og:image を設定したら summary_large_image に変更予定

Astroに限らず、静的サイトジェネレーターならテンプレートやレイアウトコンポーネントで一括設定するのが楽です。ページごとに手書きする必要はありません。

まとめ

  • OGPはWebページの情報をSNSなどの外部サービスに伝えるプロトコル。HTMLの <meta> タグとして <head> 内に記述する
  • 必須プロパティog:titleog:typeog:imageog:url の4つ。実質的には og:description も必須
  • og:image は絶対URL・1200x630px・HTTPS で指定する。ハマりポイントの大半はここ
  • Twitter Card は OGP とは別の仕組みだが、OGP にフォールバックする。twitter:card だけは必ず指定する
  • 動作確認は Facebook Sharing Debugger やサードパーティツール(OGP Checker など)で行う
  • キャッシュが原因で更新が反映されないことがあるので、デバッグツールでの再スクレイプを忘れずに
ヒヨリヒヨリ

OGPを設定するだけで、SNSでシェアしたときの見栄えがガラッと変わるよ!og:image は相対パスだと認識されないから、絶対URLで書くのを忘れないでね。設定したら Facebook Sharing Debugger で確認するクセをつけるのがおすすめだよ。さあ、自分のサイトのOGPをチェックしてみよう!