Appearance
Google AdSense(収益・CPC)運用メモ
日別記事ページを中心とした AdSense の実装・設定・改善方針を記録する。
現状のコード実装
| 項目 | 内容 |
|---|---|
| パブリッシャーID | AppConstants::ADSENSE_PUBLISHER_ID(core_src/Constants/AppConstants.php) |
| 広告スロット(日別記事系) | AppConstants::ADSENSE_SLOTS_CREATE_DAILY_ARTICLE(同一ファイル・3スロット) |
| 日別記事ショートコード内の広告 | core_src/View/components/ad_sense/AdSense.php の display_sequential_google_adsense_ad_for_daily_article() |
| 描画順・呼び出し元 | core_src/View/shortcodes/daily_article_result_view/DailyArticleResultView.php の render() |
| Twig テンプレート | core_src/View/components/ad_sense/templates/adsense.twig — adsense-lazy クラス。インライン push なし |
| 遅延初期化 JS | core_src/View/components/ad_sense/adsense-lazy.js — IntersectionObserver(rootMargin 300px)。push は DOM 順を維持 |
| スタイル(予約高・unfilled) | core_src/View/components/ad_sense/style/style.css — .adsense-wrap に --adsense-wrap-min-height。配信前・unfilled は予約高を保ったまま「広告スペース」プレースホルダー、filled 時のみ解除(Issue #2859)。日別記事は ShortCodeStylePreloader で head 先行 enqueue、表示時も AdSense.php から enqueue(二重は AssetUtil がスキップ) |
ショートコード [random_adsense_ad] | RandomAdSenseAdShortCode.php → A8 は A8AdDisplayService(同一リクエスト内で表示済み ID を除外)、AdSense フォールバックは display_sequential_google_adsense_ad_for_daily_article()(結果ブロック B-8 と $slot_index 共有) |
| テンプレート配置(考察連動) | daily_article_template.twig — 前半考察直後・ホール末尾の広告は、それぞれ consideration_pre / consideration_after があるときのみ出力 |
同一リクエスト内の重複防止(2026-05)
- A8:
A8AdDisplayServiceが表示済み広告 ID を保持。未使用がなくなったらプールをリセットして再抽選(1 ページ内の枠数が有効 A8 件数を超える場合)。 - AdSense: テンプレートの
[random_adsense_ad](A8 0 件時)と日別記事結果 B-8 の両方がdisplay_sequential_google_adsense_ad_for_daily_article()を使い、静的$slot_indexでスロットを順送り。
日別記事ブロック内の表示順(2026-05 時点)
各ホールごとに:
- ランキング(プレースホルダー → JS で埋め込み)
- 末尾データ(同上)
- AdSense(順次スロット割り当て・
auto/ フル幅レスポンシブ) - ヒートマップ(シンプル表示+詳細プレースホルダー)
ヒートマップ用データがない日は、ランキング・末尾の後にのみ広告を出す(従来どおり末尾に 1 枠)。
フォーマット変更の経緯
- 以前は順次表示経路で
horizontal+full_width_responsive: falseとしていたが、小さい横長ユニット中心になり CPC が伸びにくい可能性があったため、auto+full_width_responsive: trueに統一した。 - 未配信(unfilled)時はかつての
display: noneだと予約高が消え縮み CLS になるため、Issue #2859 以降は枠を潰さず残す。当初はvisibility: hiddenの空枠だったが、空白の違和感を減らすため予約高を保ったまま「広告スペース」プレースホルダーを表示するよう変更した。配信判定前(data-ad-status未付与)も同じプレースホルダーを出し、filled時のみ解除する(:has()非対応ブラウザでは解除ルールが効かない点に留意)。
AdSense コンソール側の設定(手動)
自動広告
- 有効。ページトップなど Google が選んだ位置に配信される。
- 手動ユニット(上記スロット)と併用。重複しすぎないよう、変更後はレポートでインプレッション・CTR を様子見する。
モバイルのスクロール体感・CLS 対策(Issue #2826 / #2828)
staging 実測(Device Toolbar + CPU 4x)で CLS 0.93〜0.95・URL に #google_vignette を確認した。自動広告の固定系(アンカー #google_esf / ビネット #google_vignette)は手動枠・Cocoon モバイルフッターと重なり、CLS・スクロール体感の一因になり得る。
運用方針(2026-07): アンカー/ビネットは収益の主軸のため OFF にしない(現状維持)。体感改善はコード側で行う。
- 手動枠は IntersectionObserver で遅延
push(adsense-lazy.js、枠数は維持) - 日別記事の非同期セクションは可視付近まで遅延読込
- モバイルで重い
backdrop-filter等を抑制 - プレースホルダー高さ予約の強化(Issue #2828): ランキング/末尾/ヒートマップ簡易の
min-heightを staging 実測に合わせて種別分離。差し替え時は HTML をプローブ計測し親に一時min-heightを付けて高さ急変を抑える(daily_article_orchestrator_utils.js) - 関連日プレースホルダー(Issue #2831):
.relational-day-placeholderのmin-height引き上げ(640px)+ 差し替え前に CSS 先行読込と高さロック(Mail / MoveDay は対象外) - 日別記事テンプレ注入ショートコードの head 先行読込(Issue #2835):
[MonthlyLinkByYear]/[BirthDayMachinePickUp]は本文走査に載らないため、daily_articleではShortCodeStylePreloaderから Common / Accordion 込みで先行 enqueue(footer 遅延 CSS による CLS 抑制) - AdSense 枠の head 先行読込と予約高維持(Issue #2859):
daily_articleではad_sense/index.phpも先行 enqueue。.adsense-wrapのmin-heightを初回ペイント前に効かせ、配信前・unfilled でも枠を潰さず「広告スペース」プレースホルダーを表示する(filled時のみ解除) - モバイルでは簡易ヒートマップ非表示(Issue #2828 続):
max-width: 768pxでは簡易グリッドを出さず REST も発火しない。詳細表示ボタン経由のモーダルのみ利用可能。発見性のため詳細ヒートマップの固定高さ切り出しティーザー(台番号+差枚・Issue #2833)を詳細ボタン上に表示 - 手動枠の枠数削減や Auto Ads フォーマット変更は、収益指標を見たうえでの別検討とする
(参考)将来、体感が許容できず収益トレードオフを取る場合のみ、AdSense 管理画面 → 広告 → 自動広告 でアンカー/ビネットを段階的に弱める。変更後は 2〜4 週間、RPM・表示回数・CTR・実機スクロールを比較する。
低単価カテゴリのブロック(任意・慎重に)
- メニュー: コンテンツの許可とブロック設定 → 「一般カテゴリ」など。
- パチスロ読者にはゲーム・娯楽系広告主も親和性が高く、ブロックで入札が減り CPC が下がるリスクがあるため、ゲーム・娯楽は基本的に残す。
- サイトと無関係そうなカテゴリのみ、少しずつ試す(例: 参照・ナビゲーション、通信教育、求人・人材 — 実際のリストはコンソールで確認)。
- 変更は 1〜2 カテゴリ単位で行い、CPC・表示回数・RPM を 2〜4 週間単位で比較する。
(コンソールでの具体操作は Google の UI に依存するため、実施したブロック内容があればこのドキュメントに追記する。)
モニタリング指標
| 指標 | 見方のメモ |
|---|---|
| CPC | クリック単価。ジャンル要因も大きいため、コード変更との因果は単日では判断しにくい |
| ページ RPM / 収益 | フォーマット・配置変更の総合効果の確認に向く |
| 表示回数・CTR | 自動広告との兼ね合いや、レイアウト変更の副作用確認 |
| ビューアブル率 | AdSense のレポートで取得できる場合は、配置変更の効果確認に有用 |
今後の検討メモ(コード外)
- コンテンツ強化(設定判別・天井などキーワード)で広告マッチングを上げる(長期)。
- 手動でページ冒頭にユニットを足す場合は、自動広告トップと競合しうるため、レポートを見てから判断する。