WordPressの記事をX(旧Twitter)で共有したところ、記事タイトルとURLは表示されるのに、設定したOGP画像が出てこない。ところが、新しい投稿では同じサイトの画像付きカードが表示された。
今回は、この不思議な現象を実際の通信結果から調べた記録。確認できた事実と、まだ検証できていない推測を分けて整理しておく。
起きた現象
対象はWordPressで公開した「Windows+Cloudflare Tunnel+Caddy+PHPでローカルHTTPS接続を追加する方法」という記事。
- WordPressのテーマにOGP画像の自動設定機能を追加し、サイト共通画像も管理画面で指定した。
- Xで記事URL
https://wp.mf235.com/?p=34を共有しても、画像付きカードにならず、リンク文字列だけが表示された。 - URL末尾に
&ogptest=1を追加しても、古い記事のカードは表示されなかった。 - 一方、新しく作成した別のX投稿では、同じサイトの画像付きカードが正常に表示された。
つまり、サイト全体で画像が表示できないわけではない。特定の共有URLに限って、画像が出ないように見えるのが問題だった。
実際に確認したこと
1. ページのOGPタグは出力されていた
対象記事の公開HTMLを取得すると、次のタグが含まれていた。
<meta name="twitter:card" content="summary_large_image">
<meta property="og:image" content="(設定した画像のURL)">
<meta name="twitter:image" content="(設定した画像のURL)">
og:title、og:description、og:url も存在した。画像はPNG形式、1731×909ピクセル、約1.3MBだった。
2. 外部から画像にアクセスできた
このPCでは wp.mf235.com をローカルの 127.0.0.1 に向けているため、通常のアクセス確認だけでは不十分。そこで公開DNSのアドレスを指定し、Cloudflare経由で取得し直した。
その結果、記事HTMLと画像の双方が HTTP 200 を返した。User-Agentを Twitterbot/1.0 としても、記事と画像の取得は成功した。
ただし、これは「Twitterbotを名乗るHTTPリクエスト」での確認であって、実際のXのクローラー内部の取得結果を確認できたわけではない。
3. robots設定は途中で改善した
調査当初、記事には次の指定があった。
<meta name="robots" content="noindex, nofollow">
WordPressでは「設定 → 表示設定 → 検索エンジンでの表示」によって、このような指定が出る場合がある。後の確認では max-image-preview:large に変わり、noindex, nofollow はなくなっていた。
この設定変更は正常化の一つではあるものの、最初の画像非表示の直接原因だったとは証明できていない。参考:WordPress公式:表示設定。
4. robots.txtには別の問題が残っていた
https://wp.mf235.com/robots.txt を外部経由で取得すると、テキスト形式のrobots.txtではなく、WordPressが生成したHTMLページが 200 OK で返された。サーバーのURLルーティングを別途確認する必要がある。
ただし、この異常とXの画像非表示との因果関係も未確認である。
現在の推測:X側の取得履歴・キャッシュが関係している?
現時点でもっとも疑わしいのは、OGP画像を設定する前にXが記事URLを取得し、そのときの「画像なし」という状態を保持している可能性だ。
- まだOGP画像がない時点で記事URLをXに共有する。
- XがそのURLのカード情報を取得・保持する。
- 後からWordPressのOGP設定を修正する。
- 新しいURLでは画像が出る一方、以前のURLでは古いカード情報が使われる。
この筋書きなら観測結果と矛盾しない。しかし、Xの内部キャッシュは確認できていないので、あくまで有力な仮説にとどまる。
また ?p=34&ogptest=1 にアクセスしても、HTML内の og:url と canonical は元の ?p=34 を指していた。Xがそれらを使ってURLを同一視するかどうかは未確認で、クエリパラメータを増やせば必ずキャッシュを回避できるとは言えない。
今後の切り分け方法
- 一度もXに貼っていない別の記事URLを、新規投稿で試す。
- その記事が画像付きカードになれば、過去のURLだけに起きる問題という見立てを補強できる。
- 表示されない場合は、記事ごとのOGP・アイキャッチ・画像URL・クローラー応答の違いを比較する。
- 時間を置いて元の記事を再共有し、表示が変わるか確認する。
robots.txtがHTMLになる件は、Xの問題とは分けて修正・検証する。
なお、すでに投稿したXのポストにカードが後から必ず追加されるとは限らない。判定は新規の投稿・新規のプレビューで行う。
暫定結論
WordPress側のOGPタグと画像URLは、調査時点では正常に公開されていた。 それにもかかわらず一部のX投稿で画像が出なかったため、URL単位のキャッシュや取得履歴を疑っている。ただし原因は未確定。
技術的な不具合は、直したつもりでも本当に原因が分かったとは限らない。今回は「ページが正しいこと」と「SNSが正しく表示すること」が別の問題だと分かった。追加検証で進展があれば、結果を追記したい。
