TL;DR
- Xのアルゴリズムは外部リンク付き投稿の配信を抑制する
- OGPカードの画像はタイムライン上で小さく、視認性が低い
- 画像を直接添付 + リンク削除に切り替えたことで、タイムラインでの占有面積と配信の両方が改善
背景
JEPXスポット電力価格を毎朝Xに自動投稿するbotを運用しています。
- アカウント: @enegentJepx
- 構成: GitHub Actions + Python + X API v2
- 詳細: 前回の記事(※一部訂正あり)
当初の投稿フォーマット:
【明日のスポット価格 4/18(土)】
全国平均 12.19円/kWh
前日差 −2.23
最高 35.83円 (18:30 東京)
最低 3.00円 (09:30 北海道)
詳細 → https://enegent.jp/jepx/spot?d=2026-04-18
#JEPX #電力市場
テキスト + 外部リンク。リンク先のOGPメタタグで画像が表示される構成でした。
問題1: 外部リンクがアルゴリズムに嫌われる
Xのアルゴリズムは、ユーザーをプラットフォーム内に留めたいため、外部リンク付き投稿の配信優先度を下げることが広く知られています。
実際、投稿のインプレッションがほぼ自分のアカウント群からのアクセスのみで、フォロワー外への配信がゼロに近い状態でした。
新規アカウント(2026年4月開設)という不利な条件はあるものの、外部リンクがさらに足を引っ張っていると判断しました。
問題2: OGPカードの画像が小さい
OGPカード(summary_large_image)の表示は、タイムライン上では画像が小さく圧縮されます。10エリア×10列のデータテーブルを1200×628のOGP画像に詰め込むと、スマホではフォントが潰れて読めません。
一方、画像を直接添付すると、タイムライン上でより大きく表示されます。特に**4:5縦型(1080×1350px)**は、フィード上の占有面積が最大になるフォーマットです。
解決: 画像直接添付 + リンク削除
変更後の投稿フォーマット
【明日のスポット価格 4/18(土)】
全国平均 12.19円/kWh
前日差 −2.23
最高 35.83円 (18:30 東京)
最低 3.00円 (09:30 北海道)
#JEPX #スポット市場
+ 1080×1350の画像を直接添付。外部リンクは削除。
画像の変更
| 項目 | Before(OGP) | After(直接添付) |
|---|---|---|
| サイズ | 1200×628 (16:9) | 1080×1350 (4:5) |
| 表示形式 | OGPカード | ネイティブ画像 |
| フォントサイズ | 20pt | 30pt |
| 行の高さ | 44px | 112px |
| タイムライン占有 | 小 | 大 |
実装の変更点
1. media.write スコープの追加
前回の記事の訂正で詳述しましたが、OAuthスコープに media.write を追加するだけで画像アップロードが可能でした。
SCOPES = ["tweet.read", "tweet.write", "users.read", "media.write", "offline.access"]
2. 投稿スクリプトの変更
# Before: テキストのみ投稿(URLカードで画像表示)
res = subprocess.run([
sys.executable, "scripts/x_oauth.py",
"--account", "bot", "tweet",
"--file", str(text_path),
])
# After: 画像生成 → media upload → 画像付き投稿
subprocess.run([
sys.executable, "scripts/render_jepx_image.py",
"--date", target_date,
"--output", str(image_path),
])
res = subprocess.run([
sys.executable, "scripts/x_oauth.py",
"--account", "bot", "tweet",
"--file", str(text_path),
"--media", str(image_path), # 画像添付
])
3. 画像レイアウトの変更
Pillowで描画する画像を1200×628の横型から1080×1350の縦型に変更。
# Before
OUTPUT_W, OUTPUT_H = 1200, 628 # OGP用16:9
# After
OUTPUT_W, OUTPUT_H = 1080, 1350 # 4:5縦型
縦型にしたことで行の高さを44px→112pxに拡大でき、フォントサイズも20pt→30ptに。スマホのタイムラインで指を止めて読めるサイズになりました。
4. テキストから外部リンクを削除
# Before
lines.append(f"詳細 → https://enegent.jp/jepx/spot?d={target_date}")
# After(この行を削除)
# サイトへの誘導は画像内のブランドロゴ(enegent.jp)で十分
まとめ
| 変更 | 理由 |
|---|---|
| 外部リンク削除 | Xアルゴリズムによる配信抑制を回避 |
| OGP → 画像直接添付 | タイムラインでの表示サイズを最大化 |
| 16:9 → 4:5縦型 | フィード占有面積を最大化、フォント拡大 |
「リンクを貼ればクリックしてもらえる」という発想は、Xのアルゴリズムの下では逆効果です。 リンクを削って画像で情報を完結させ、ブランドは画像内に自然に配置する方が、結果としてリーチもブランド認知も伸びます。
関連
- 前回の記事(訂正済み) — OGPキャッシュの話
- @enegentJepx — 実際の投稿
- enegent.jp — エネジェント(電気代比較AI)