はじめに
WordPressで作ったサイトの記事をSNSでシェアしたら、アイキャッチとは違う画像が出た。Facebookでは正しいのに、LinkedInでは古いタイトルが出る。設定画面を何度見直しても、おかしいところは見当たらない――。
こういうとき、ページのソースを開いてみると、og:title や og:image が 2回(ときには3回)出力されている ことがよくあります。WordPressはテーマ・SEOプラグイン・SNS連携プラグインがそれぞれ「親切に」Open Graphタグ(いわゆるOGPタグ)を出力するので、気づかないうちに重複しがちです。
この記事では、重複の見つけ方、よくある原因の組み合わせ、そして直し方をまとめます。
なぜ重複がまずいのか
Open Graphの仕様では、同じプロパティが複数あると配列として扱われる場合があり、どれが採用されるかはクローラーごとに異なります。最初のものを使うサービスもあれば、別のものを使うサービスもあります。
結果として、次のような「サービスによって見え方が違う」現象が起きます。
- Facebookではアイキャッチ画像、Xではサイト共通のロゴ画像
- LinkedInではプラグインで設定したタイトル、Slackではテーマが出力した「記事名 | サイト名」
どれか1つのサービスで確認しただけでは気づけないのが厄介なところです。
ステップ1:重複を見つける
まずは実際に返ってくるHTMLを確認します。ログアウトした状態で 見るのがポイントです。ログイン中だと、キャッシュを経由しない別のHTMLを見ている可能性があります。
curl -s https://example.com/2026/10/sample-post/ \
| grep -oE '<meta (property|name)="(og|twitter):[a-z:_]+"' \
| sort | uniq -c | sort -rn
出力例:
2 <meta property="og:title"
2 <meta property="og:image"
2 <meta property="og:description"
1 <meta property="og:url"
1 <meta name="twitter:card"
2 以上になっているものが重複です。次に、どのコードが出力しているかを特定します。多くのプラグインは出力の前後にHTMLコメントを入れているので、前後の行も一緒に見ると犯人がわかります。
curl -s https://example.com/2026/10/sample-post/ | grep -nE 'og:|<!--' | head -40
<!-- This site is optimized with the Yoast SEO plugin --> や <!-- All in One SEO --> のようなコメントが目印になります。コメントがなく、<head> の直書きっぽい位置に出ている場合はテーマの可能性が高いです。
ステップ2:よくある原因の組み合わせ
パターン1:テーマ + SEOプラグイン
一番多いのがこれです。国内でよく使われるテーマの中には、独自にOpen Graphタグを出力する機能を持つものがあります。たとえばCocoonには、設定画面にOGPタグの挿入をオン・オフする項目があります。
そこにYoast SEO、All in One SEO、SEO SIMPLE PACKなどのSEOプラグインを入れると、両方が出力して重複します。
対処:どちらか一方に寄せます。記事ごとにタイトルや画像を細かく設定したいならSEOプラグイン側を残し、テーマ側の出力をオフにするのが一般的です。
パターン2:SEOプラグイン + Jetpack
Jetpackも独自にOpen Graphタグを出力します。主要なSEOプラグインが有効な場合は自動で出力を止めるようになっていますが、組み合わせによっては両方出ることがあります。その場合は、テーマの functions.php(できれば子テーマ)か、コードスニペット系プラグインで止められます。
// Jetpack の Open Graph 出力を無効化
add_filter( 'jetpack_enable_open_graph', '__return_false' );
パターン3:テーマの header.php に直書き
古いテーマや、制作会社が作ったオリジナルテーマでは、header.php にメタタグが直接書かれていることがあります。
<!-- header.php にこういう記述が残っていないか -->
<meta property="og:title" content="<?php the_title(); ?>" />
<meta property="og:image" content="<?php echo get_template_directory_uri(); ?>/images/ogp.png" />
SEOプラグインを後から導入したときに、この直書きを消し忘れるパターンです。親テーマを直接編集するとアップデートで上書きされるので、子テーマに header.php をコピーして修正しましょう。
パターン4:複数のSEOプラグインの同居
サイトを引き継いだときによくあるのが、昔入れたSEOプラグインと新しく入れたSEOプラグインが両方有効になっているケースです。プラグイン一覧で「SEO」「OGP」「Social」「Share」あたりの名前を探して、役割が重なるものは停止します。
ステップ3:重複を直したのに古いまま?
タグを1組に整理したのに、確認ツールやSNSで古い内容が出る場合は、キャッシュを疑います。WordPressでは段階が多いので順番に見ていきます。
- ページキャッシュ系プラグイン(WP Super Cache、W3 Total Cache、LiteSpeed Cacheなど):キャッシュを削除します。ログイン中のユーザーにはキャッシュを返さない設定が多いので、「自分には新しく見えるのに外からは古い」状態になりがちです。
- CDN(Cloudflareなど):該当URLのキャッシュをパージします。
- 各SNSのキャッシュ:FacebookならSharing Debuggerの「もう一度スクレイピング」、LinkedInならPost Inspectorで再取得できます。
画像を差し替えた場合は、同じファイル名で上書きせず、別名でアップロードし直す のがおすすめです。メディアライブラリで同名ファイルを置き換えるプラグインは便利ですが、URLが変わらないため、各所に古い画像が残り続けます。
ステップ4:画像まわりの細かい注意
重複がなくなったら、画像の中身も確認しておきましょう。
- アイキャッチ未設定の記事:SEOプラグインのデフォルト画像が使われます。デフォルト画像が小さいロゴだと、大きなカードになりません。1200×630px程度の画像を設定しておくと安心です。
-
リサイズ済み画像が使われている:テーマによっては、アイキャッチの「medium」サイズ(300px幅など)を
og:imageに使っていることがあります。og:imageのURL末尾が-300x200.jpgのようになっていたら要注意です。 -
httpのURL:古いサイトをhttpsに移行したあと、
og:imageだけhttp://のまま残っていることがあります。設定の「サイトアドレス」とデータベース内のURLを確認しましょう。
まとめて確認するツール
ここまでの確認作業は、curl でも十分できますが、私は自作の無料ツール「OG Scope」の Open Graphプレビュー をよく使っています。公開URLを入れると、サーバー側で取得したHTMLからOpen Graph・Twitter Cardのタグ、title、meta description、canonical、faviconを一覧表示し、画像が実際に読み込めるか、サイズはどのくらいかもチェックしてくれます。FacebookやLinkedIn、X、Slackなどでの推定カードも並べて表示されるので、「どのタグが勝っているか」を目で確認しやすいです。アカウント登録は不要です。
表示されるのはHTMLから作った推定のカードであり、各SNSのキャッシュそのものではない点には注意してください。
まとめ
- WordPressでは、テーマ・SEOプラグイン・Jetpackなどが それぞれOpen Graphタグを出力する ため、重複しやすい
-
curl+uniq -cで、ログアウト状態のHTMLに重複がないか確認する - 出力元を特定したら、1つの仕組みに寄せる(多くの場合はSEOプラグイン)
- 直したあとは、ページキャッシュ → CDN → 各SNS の順にキャッシュを更新する
- 画像を差し替えるときは別名でアップロードする
設定画面だけを見ていても重複には気づけません。一度、実際のHTMLを覗いてみることをおすすめします。
Abid Ali:パキスタンのWeb開発者。リンクプレビュー確認ツール「OG Scope」など、小さな無料ツールを作っています。
