【OGPキャッシュ】
SNSでアイキャッチ画像が表示されない?

ブログ記事を公開して、さっそくSNSでシェアしました。
ところが、リンクプレビューに画像が表示されません。
記事にはアイキャッチ画像を設定したはずなのに、なぜか反映されていませんでした。

SNSでアイキャッチ画像が表示されない × ? 画像が表示されない原因 初回シェア時にキャッシュされた 古い情報が使われ続ける

最初は「少し待てば表示されるかも」と考えました。
しかし、10分経っても状況は変わりません。
投稿を削除して再度シェアしても同じでした。

関連記事

1. OGPのキャッシュという仕組み

調べてみると、SNSには「OGP(Open Graph Protocol)」という仕組みがあることがわかりました

OGPキャッシュの仕組み 初回 シェア スクレイピング サーバーが情報取得 保存 キャッシュ OGP情報 タイトル・説明文・画像 これらがセットで保存される ! 再シェア時は保存済みキャッシュを表示

OGPは、リンクをシェアしたときに、記事のタイトル説明文、そして画像を表示するための規格です。
重要なのは、SNSがこの情報を初回アクセス時にキャッシュするという点でした。

つまり、最初にリンクがシェアされた瞬間に、XやLINEのサーバーが記事のページにアクセスして、OGP情報を取得します。
そして、その情報を自分のサーバーに保存しておくのです。
このアクセスのことを「スクレイピング」といいます。

1.1. 未完成の状態でシェアしてしまうと?

たとえば、記事の下書きを公開設定にした直後、画像設定が完了する前にテストでシェアしてしまいました。
この時点でXのサーバーは「この記事には画像がない」という情報をキャッシュしました。

その後、慌てて画像を設定して再度シェアしても、Twitterは既に保存された古い情報を使い続けます。
サーバーにとっては、わざわざ毎回記事にアクセスして確認する必要がないからです。
効率的ではありますが、この仕組みが今回の問題を引き起こしました。

2. キャッシュをクリアする管理ページ

本質な解決策は「キャッシュのクリア」です。
各SNSは、管理者向けにキャッシュをリセットするツールを用意していれば、それを利用すればアイキャッチ画像を取得し直させることができます。

解決方法:検証ツールでキャッシュクリア f Facebook シェアリング デバッガー 「もう一度 スクレイピング」 ボタンで更新 𝕏 Twitter/X Card Validator (現在利用不可) 新規投稿作成時に 最新情報を取得 in LinkedIn Post Inspector URLを入力して 「Inspect」で 再スクレイピング

Facebookには「シェアリングデバッガー」というツールがあります。
URLは https://developers.facebook.com/tools/debug/ です。

ここに記事のURLを入力すると、現在キャッシュされている情報が表示されます。
「もう一度スクレイピング」というボタンを押すと、Facebookが改めて記事にアクセスして、最新の情報を取得してくれました。

LinkedInには「Post Inspector」というツールがあります。
URLは https://www.linkedin.com/post-inspector/ です。

一方、Xには以前「Card Validator」というツールがありました。URLは https://cards-dev.twitter.com/validator でしたが、現在はアクセスできない状態です。
また、LINEなどのメッセージアプリではこのようなキャッシュ管理ツールが公開されていない場合もあります。

2.1. むりやりスクレイピングさせる(クエリパラメータ)

検証ツールを使わない方法もあります。
それは、URLの末尾にクエリパラメータを追加する方法です。

再度スクレイピングさせる(クエリパラメータ) https://example.com/article/ パラメータ追加 https://example.com/article/ ?v=1 メリット ツール不要で すぐに対応可能 デメリット シェア数が分散 URL管理が複雑化

例えば、元のURLが

  • https://example.com/article の場合、
  • https://example.com/article?v=1

のように末尾に 「?v=1」を付けます。
すると、SNSのシステムは、これを別のURLとして認識します。
URLを少し変更するだけで、新しいURLとして再スクレイピングされます。

クエリパラメータはSNSに「別URL」と認識させるためのダミー値なので、何でも構いません。
?a=0」 や 「?update=1」など、任意の文字列を使えます。

クエリパラメータの使い方 https://example.com/page ?key1=value1&key2=value2 クエリパラメータ 本来の用途 検索条件の指定 フィルタリング 今回の使い方 ダミー値で別URLと認識させる

本来、クエリパラメータは、検索条件や一覧の何ページ目かなどの追加情報をURLの末尾に付加して、サーバーに渡すための仕組みです。
しかし、関係ないクエリパラメータは無視され、表示に影響しません。
ブラウザでアクセスすると、パラメータの有無に関わらず同じページが表示されます。

ただし、記事のシェア数をカウントしている場合にはデメリットもあります。
元のURLと新しいURLが別々にカウントされるため、シェア数が分散してしまうからです。
また、複数のバージョンのURLが出回ると、どれが正しいURLか分かりにくくなります。

長期的にアクセスする公式URLについては、検証ツールでキャッシュをクリアする方法の方がよいです。

3. まとめ

SNSでのリンクシェアは、初回アクセス時の情報がキャッシュされます。
画像設定が未完成の状態でシェアすると、後から修正しても反映されません。

各SNSの検証ツールを使えば、キャッシュをクリアして最新の情報を取得できます。特にFacebookとLinkedInは公式ツールが充実しているため、活用すると確実です。

記事公開のワークフローに、OGP確認の工程を組み込むことで、このようなトラブルは避けられます。