はじめに
このホームページにX(旧Twitter)のタイムラインを埋め込もうとしたところ、公式の埋め込みコードを使用してもタイムラインが表示されず、
「Posts by ○○」というリンクだけが表示される
という現象が発生しました。
最初はWordPressの設定ミスを疑いましたが、原因が分からなかったため、ChatGPT(GPT-5.5)に調査を依頼し、一緒に原因を一つずつ切り分けていくことにしました。
数時間にわたり、WordPress・Apache・HTML・JavaScript・ネットワーク・XのAPIまで順番に確認した結果、原因はX(旧Twitter)側の埋め込みサービスにある可能性が極めて高いという結論に至りました。
同じ症状で困っている方の参考になればと思い、調査内容をまとめます。
環境
- WordPress 7.0.1
- テーマ:Twenty Twenty-Five
- サーバー:Ubuntu 24.04
- Apache 2.4.64
- PHP 8系
- HTTPS(Let’s Encrypt)
使用した埋め込みコード
X公式(publish.x.com)が生成したコードをそのまま使用しました。
<a class="twitter-timeline"
href="https://x.com/kagaku_info?ref_src=twsrc%5Etfw">
Posts by kagaku_info
</a>
<script async src="https://platform.x.com/widgets.js"
charset="utf-8"></script>
症状
表示されるのは
Posts by kagaku_info
というリンクだけです。
クリックするとXのプロフィールは正常に表示されますが、タイムラインは埋め込まれません。
ChatGPTと一緒に原因を切り分ける
ChatGPTからは
「WordPressではなく、まず最小構成で試しましょう。」
という提案がありました。
そこで、WordPressを疑う前に、原因を一つずつ消していくことにしました。
① WordPressを疑う
通常の段落ブロックではなく、
カスタムHTMLブロック
で公式コードを貼り付けました。
結果
改善せず。
② widgets.jsを確認
Chrome DevTools の Network を確認すると
https://platform.x.com/widgets.js
は
200 OK
でした。
つまりJavaScript自体は正常に読み込まれています。
③ JavaScriptエラーを確認
Consoleには
JQMIGRATE: Migrate is installed
しか表示されません。
JavaScriptエラーはありませんでした。
④ WordPressを完全に除外
ChatGPTから
「WordPressを使わないHTMLだけでも試しましょう。」
と提案されたため、
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>X Test</title>
</head>
<body>
<a class="twitter-timeline"
href="https://x.com/OpenAI">
Posts by OpenAI
</a>
<script async src="https://platform.x.com/widgets.js"></script>
</body>
</html>
という test.html を作成しました。
結果は
WordPressを使わなくても同じ症状でした。
ここで
WordPressは原因ではない
ことが分かりました。
⑤ Apacheを疑う
続いてChatGPTから
「HTTPレスポンスヘッダーを確認しましょう。」
という提案がありました。
確認したところ
- Content-Security-Policy
- X-Frame-Options
- Cross-Origin-Embedder-Policy
などは一切設定されていません。
Apache設定も確認しましたが、
iframeをブロックする設定はありませんでした。
ここで
Apacheも原因ではない
ことが分かりました。
⑥ ネットワークを変更
さらに
- スマホ4G/5G
- スマホテザリング
- VPNあり
- VPNなし
で確認しました。
結果は
すべて同じ。
⑦ OpenAI公式アカウントでも試す
ChatGPTから
「OpenAIなど別アカウントでも試してください。」
という提案がありました。
結果は
OpenAIでも同じ症状。
つまり
アカウント固有の問題ではありませんでした。
決定的な証拠
ChatGPTから
「Networkで
syndication.twitter.comを確認してください。」
と指示されました。
すると
https://syndication.twitter.com/srv/timeline-profile/...
が
429 Too Many Requests
を返していました。
つまり
widgets.js
↓
syndication.twitter.com
↓
429
↓
iframe生成失敗
という流れになっていたのです。
これが
タイムラインが表示されない直接の原因
でした。
X Developer Communityでも確認
ChatGPTに最新情報を調査してもらったところ、
X Developer Communityには
- widgets.jsは正常
- timelineだけ表示されない
- syndication.twitter.com が429
- コードは変更していない
という報告が複数ありました。
つまり
今回だけの現象ではありません。
結論
今回の調査では
- WordPress
- HTML
- Apache
- HTTPS
- JavaScript
- ネットワーク
- スマートフォン
- VPN
まで一つずつ切り分けました。
その結果、
https://syndication.twitter.com/srv/timeline-profile/
が
429 Too Many Requests
を返していることを確認しました。
現時点では、
WordPressやApacheではなく、X(旧Twitter)側の埋め込みサービスに原因がある可能性が極めて高い
と判断しています。
ChatGPTを使って感じたこと
今回の調査では、ChatGPTは「答えを決めつける」のではなく、
- 仮説を立てる
- 一つずつ検証する
- 結果に応じて仮説を修正する
という形で、まるで一緒にデバッグを行うパートナーのように調査を進めることができました。
途中で「WordPressではない」「Apacheでもない」といった結論も、実際の検証結果に基づいて修正しながら進められたため、最終的にはX側の埋め込みサービスが429を返しているという技術的な根拠までたどり着くことができました。
AIは万能ではありませんが、人間が検証を行い、AIが次の切り分け手順を提案するという進め方は、トラブルシューティングにおいて非常に有効だと実感しました。
とりあえず
X(旧Twitter)とInstagram(インスタグラム)へのリンクはフッダーに付加してあります。
また、埋め込みの試験をTESTで行っています。
もし、Xのタイムラインの埋め込みがうまくいっている人がいらっしゃったらコメント欄からでも教えてください。









