メインコンテンツへ移動

OGプレビュー

OGプレビューはOpen GraphとTwitterカードのタグを読み取り、クローラが実際に表示するリンクカードをフォールバックも含めて示します。og:titleがなければカードは<title>を表示し、多くの場合サイト名が先頭に付きます。相対パスの画像URLはそもそも取得されない、といった沈黙の失敗も報告します。

端末内で処理
HEAD部のマークアップ
628 B10 行行 1、列 1
Facebook · LinkedIn · Slack
画像の絶対URLがありません

acme.example

料金

3つのプラン。最低席数なし、ずっと使える無料プランもあります。

Xカード · summary

acme.example

料金

3つのプラン。最低席数なし、ずっと使える無料プランもあります。

1件の重大な問題1件の警告3件の注記

これらのタグに何問題がありますか?

警告 · og:image:alt設定されていません。altテキストはスクリーンリーダーがカードの画像に対して読み上げるもので、画像の読み込みに失敗した場合に表示されるものです。すべての主要プラットフォームがサポートしています。
注意 · twitter:cardカードは「summary」に設定されており、小さな正方形のサムネイルが表示されます。「summary_large_image」は画像を全幅で表示し、ほとんどのサイトが望むものです。
注意 · og:image:width幅と高さが宣言されていないため、クローラーは画像をダウンロードして形状を特定する必要があります。これを宣言すると、クローラーはより早く判断でき、一部のクライアントは画像到着前にカードのレイアウトを決定できます。
注意 · iconfaviconリンクがありません。ブラウザは/favicon.icoにフォールバックするため、アイコンが他の場所にある場合のみ問題になります。

OGプレビューはどう動きますか?

リンクカードは、ページ上のタグをもとに他人のクローラが描画します。そして、うまくいかないあらゆる形が沈黙しています。例外もログも発生せず、ページはブラウザでは正常に見えます。カードだけが少しずれ、クリック率はわずかに低いままです。

フォールバックチェーンが実際の表示を決める

プラットフォームはog:titleを必須にしていません。なければ<title>が使われます。多くのサイトでは<title>はページ名の前にサイト名が付いた形なので、カードは「料金」と表示されるべきところを「Acme Analytics——料金」と表示します。上のプレビューは存在するタグを並べるだけでなく、フォールバックチェーンを解決し、各フィールドがどのソースから来たかを明示します。「欠落」と「存在するが誤り」では必要な修正が異なるためです。

成功に見える失敗

<meta property="og:image" content="/og/pricing.png">は有効なHTMLでありながら完全に壊れています。クローラはページを基準に相対パスを解決しないため、画像は一度も取得されず、カードには灰色の四角が表示されます。ローカルのプレビューでは機能するのに本番では何も表示されないカードの最大の原因であり、相対的な画像URLがスタイルの指摘ではなくcriticalとして報告される理由です。

パターンマッチではなくパースする理由

安易な実装はタグごとの正規表現ですが、最初の実ページで壊れます。content="a > b"は引用された属性の中に>を含み、content='It's here'は素朴な走査を終了させてしまうアポストロフィを持ち、<meta>は自己完結していたり閉じられていなかったり、属性の順序も任意です。そのためドキュメントは、クォートと生テキスト要素を理解するスキャナで一度だけ走査されます。このサイトのJSONツールやXMLツールと同じ方式です。

できないのは画像の取得です。ネットワークリクエストを一切出さないと謳うページからリクエストが出ることになるためです。その代わり、リクエストなしで検証できる項目をチェックします。URLが絶対か、宣言された寸法が十分か、アスペクト比が各プラットフォームがクロップする1.91:1に近いか、alt属性が存在するか。

head内マークアップ

<meta property="og:title" content="Pricing" />
<meta property="og:image" content="/static/og/pricing.png" />
<meta name="twitter:card" content="summary" />

検出結果

critical  og:image        "/static/og/pricing.png" is not an absolute URL.
                          Crawlers do not resolve relative paths.
warning   og:description  Missing. The card falls back to <meta description>.
warning   og:image:alt    Missing. Screen readers announce nothing.
info      twitter:card    "summary" renders a small square thumbnail.

head内マークアップ → 検出結果

head内マークアップ

<meta property="og:title" content="Pricing" />
<meta property="og:image" content="/static/og/pricing.png" />
<meta name="twitter:card" content="summary" />
<title>Acme Analytics — Pricing</title>
<meta name="description" content="Pricing for Acme Analytics." />
<link rel="canonical" href="https://acme.example/pricing" />

検出結果

critical og:image       "/static/og/pricing.png" is not an absolute URL.
warning  og:description Missing.
warning  og:url         Missing.
warning  og:image:alt   Missing.
info     og:type        Missing, so it defaults to "website".
info     og:site_name   Missing.

OGプレビューが対応するオプションとエッジケースは?

技術リファレンスとオプション
パラメータ型デフォルト動作とエッジケース
og:title必須<title>にフォールバックカードの見出しです。なければカードは<title>を使用します。多くのサイトでは<title>の先頭にサイト名が付くため、カードがそのページではなくトップページのように読めてしまいます。
og:description必須meta descriptionにフォールバック見出しの下の2行です。meta descriptionは検索結果のために書かれ、カードのコピーはクリックするかどうか迷っている人のために書かれます。同じ文章であることはまれです。
og:image必須なし絶対URLのhttpsアドレスである必要があります。クローラは相対パスを解決しません。1200×630が各プラットフォームのクロップ基準となるサイズで、600×315未満では引き伸ばされてぼやけます。
og:image:alt推奨なしスクリーンリーダーが読み上げ、画像の読み込みに失敗したときにも表示されます。主要なプラットフォームはすべて対応していますが、ほとんどの場合省略されています。
og:image:width / height推奨自動検出宣言しておくと、クローラは画像をダウンロードする前にカードのレイアウトを組めます。宣言がないと、ページ取得に続いて画像の2回目のリクエストが発生します。
og:url推奨取得したURLページの正規アドレスです。なければ、2つのURLで到達できるページはシェア数が両方に分散します。
og:type推奨website"article"を指定するとauthorや公開日時のフィールドが使えるようになり、カードの表示方法が変わるクライアントもあります。
og:site_name任意ホスト名LinkedInや一部のチャットクライアントでタイトルの上に表示されます。なければホスト名が表示されます。
twitter:card推奨summarysummary_large_imageは画像を全幅で表示し、summaryは小さな正方形のサムネイルを表示します。認識できない値はsummaryとして扱われます。
canonical推奨なし<link rel="canonical">はOGタグではありませんが、同じだけ重要です。2つのアドレスで到達できる同一ページが自分自身と競合するのを防ぐものだからです。

よくある質問

プレビューに画像が表示されないのはなぜですか?

ほとんどの場合、原因は相対URLです。og:imageは絶対URLである必要があります。https://acme.example/og/pricing.pngであり、/og/pricing.pngではありません。クローラは文脈なしで画像を取得するため、解決の基準となるページを持ちません。この理由から、このツールではcriticalとして報告します。2番目に多い原因はログインの背後にある画像、3番目はプラットフォームのユーザーエージェントをブロックするCDNです。

タグを更新したのにカードが変わらないのはなぜですか?

クローラは結果をキャッシュします。FacebookとLinkedInはカードを数日間保持し、Xは約1週間キャッシュします。FacebookのSharing Debuggerにはキャッシュを消すScrape Againボタンがあり、LinkedInのPost Inspectorにも同じ機能があります。実行するまで見えているのは古いタグの結果であり、正しく反映されたはずの変更が反映されていないように見えるのはこのためです。

画像のサイズはいくつにすればよいですか?

1200×630ピクセルです。これはちょうど1.91:1で、各プラットフォームがクロップする比率そのものなので、端が切り取られません。600×315未満は引き伸ばされてぼやけ、これより大幅に横長なものは端が失われます。写真にはJPEG、フラットな図版やテキストにはPNGを使い、サイズは約1MB未満に抑えます。大きい画像を待たずにスキップするクライアントがあるためです。

Open GraphタグがあればTwitterタグは不要ですか?

Xはタイトル、説明、画像についてOpen Graphにフォールバックするため、og:*だけでカードは表示されます。ただしカードタイプまでは選んでくれません。twitter:cardがなければ、大きい画像ではなく小さな正方形のsummaryになります。タグ1つ追加する価値はあります。カードのコピーを他の場所のリンクプレビューと変えたい場合は、twitter:titleも設定する価値があります。

このツールはページや画像を取得しますか?

いいえ。マークアップを貼り付けるとタブ内で解析され、Networkパネルには何も表示されません。これは制限ではなく意図的な制約です。画像を取得するツールなら寸法を測れますが、同時に貼り付けられたすべてのURLを知るサーバーにもなってしまうためです。ここでのチェックは、リクエストなしで検証できる項目に限られます。URLが絶対か、宣言された寸法が十分か、アスペクト比、alt属性の有無です。

どのプラットフォームがどのタグを読みますか?

Open GraphはFacebook、LinkedIn、Slack、WhatsApp、Discord、Telegram、Pinterest、そしてフォールバックとしてXが読みます。Xでは独自のtwitter:*タグがあればそちらが優先されます。さらにクライアント独自の要件も加わります。Slackのunfurlには正方形に近い画像が求められ、Discordはsummaryカードでは小さなサムネイル、summary_large_imageでは全幅のバナーを表示します。