Google Ad Managerで設定したAd Exchangeの広告表示が表示されない問題を解決する

Google Ad Manager

1. 背景

Google Ad Manager(以降GAM)で設定したAd Exchangeの広告がどうやっても表示されず、追い詰められたものの、結果的に解決出来た話です。
GAM側の設定や用語については言及しませんので、ご了承ください。
とりあえず結論が知りたい方はこちらまで読み飛ばしてください。
基本的なことを知りたい方は以下を参考にすると良いです。

qiita.com

skillshop.exceedlms.com

2. 事象

まず前提として、下記について問題がないことを確認した。

  • GAM側で作成したもの
    ※一部カスタムターゲティングにKeyValueを設定している
    • 広告ユニット
    • 広告申込情報
    • クリエイティブ
    • ネイティブ
  • GAMで生成したタグ、実装

しかし…広告申込情報が準備中から一向に変わらない。

3. 正攻法で試す

3.1. ?google_force_console=1を使ったデバッグ

対象のURLにクエリを付与し、デバッグを行う。

# 例
http://localhost:8000/hogehoge?google_force_console=1

これを用いて、何が問題なのかを切り分けようとした。
リクエストするKeyValue(コンソール上だと設定タグ)には異常がなく、正常に送信されている旨がコンソール上に表示されていた。
ただし、広告が表示される想定箇所にはクリエイティブID、広告情報IDは取得出来なかった。
さらに、GAMの配信ツールを使って検証したところ、配信可能な広告申込情報がないと言われる。
正しくリクエストされていれば、広告申込情報は配信中に変わるとあるが、何が間違っているのかわからず。

4. 勘を頼りに試す

私の検索能力が低いのかはわからないが、記事へ辿り付けなかったため、ここからは勘に近い作業でかなり泥臭いやり方を試した。

4.1. ローカルホスト環境だから?という疑問

いくらローカルで確認しても拉致があかない。
実装やGAM設定を幾度となく見直したが結果は変わらず。
これはいよいよサーバーへデプロイするほかない、という短絡的な思考へ。
しかし、デプロイ後も結果は変わらなかった。
これだろ!と思っていたので、あたりが外れてしまった。心が折れてファッキンガム宮殿を検索したのは私だけではないはず。

4.2. 時間が解決してくれる!

GAM側の設定を見直して更新したものの、実はGAM側で更新をしてもリアルタイムで反映されるわけではない。
設定を更新したタイミングが悪かったか?という時間任せな思考へ。
ラッキングの仕組みはさておき、普段閲覧しない粘着力が強そうな広告系の記事を閲覧した後、祈りながら翌日を迎えた。
しかし…祈りは通じることなく、またしてもファッキンガム

5. 残された時間は少ない…解決なるか?

GAMで固有に設定されている箇所がないか、片っ端からメニューを開いていった。
するとドメインが承認となっている箇所が…
「もしや、ここで設定されているドメイン以外だと広告が出ないのでは?」という疑問へ。
調べるよりhostsを書き換える方が早いので早速試した。 sudo vim /etc/hostsで以下を変更。

127.0.0.1 localhost
# 下記へ変更
127.0.0.1 example.com # GAMで承認されているドメインに変更

hostsを書き換え後、アクセスし何度かスーパーリロード。

# 例、localhostを偽装するので、ポートは必要。
http://example.com:8000/hogehoge?google_force_console=1

すると…記事にはデバッグ情報に広告情報ID、クリエイティブIDが表示されている!嬉しいことに広告も表示されている!この時を待ち望んでいた!
とはいえ、hostsの反映も即時ではないのでhostsの変更を何度か繰り返し、確認。
※喜ばしい反面、広告表示されない場合もあり、かなりムラがありました
最後にGAM側の広告申込情報のステータスを確認したところ、準備中から配信中へステータスが変更されており、インプレッション数も計測されている!

6. 結論

adx.txtで設定されている承認済みドメインでないと広告表示がされない!

ads.txt または app-ads.txt の使用は必須ではありませんが推奨されます。使用すると、特定のドメイン、アプリ、動画から配信されたと見誤らせるような偽の広告枠から自社のブランドを保護できます。認定販売者を宣言することで、偽の広告枠に奪われる可能性のあった広告収益を確実に受け取れるようになります。

support.google.com

上記を見る限り、プロジェクトに配置されているads.txtのパブリッシャーIDがGAMに設定されているドメイン(パブリッシャーIDが振られている)と紐付いているためと考えられる。
なので許可されているドメインでリクエストしないと広告は配信されない、という結論に至った。
ミッション完了。本当にお疲れ様でした。

7. 最後に

実際、GAMの公式ドキュメントはとても充実しています。
ですが実装時に遭遇した時のエラー切り分けが難しいというのが私の感想です。
ITエンジニアの勘所も試されたり、問題を解決しても100%これが正解だとは言い難いので少しモヤッとします。
私も結果として想定通りになったものの、ここに書いたものが本当に正しいとは言い切れないです。
※それ間違ってますよ、などあれば意見が欲しいくらい。
とはいえ、当事者でないサービスを使う場合に発生する得体のしれないエラー解決手段の1つとして、この記事が選択肢の1つになれば幸いです。
次はAmazonアフィリエイトが私を呼んでるようだ。