IMA SDKによる広告ブロッキングの仕組み
Google IMA SDK は、動画プレイヤーが広告をリクエストして再生するために使用するライブラリです。ネットワークレベルでこれをブロックするとプレイヤーが動作しなくなるため、AdOff はこの SDK をスタブに置き換え、すべての広告リクエストに対して即座に「コンテンツの再開」イベントを返すようにしています。これによりプレイヤーは正常に動作し、広告は一切読み込まれません。
IMA SDK とは実際には何なのか
Interactive Media Ads(IMA)SDKは、Googleが提供するクライアントサイドの動画広告用ライブラリです。動画を収益化したいウェブサイトは、通常、独自の広告プレイヤーを構築するのではなく、imasdk.googleapis.com/js/sdkloader/ima3.js(または動的バージョンのima3_dai.js)を読み込み、AdDisplayContainerを初期化した上で、SDKに広告タグのURLを渡します。SDKはその後、VASTレスポンスを取得し、プレイヤー内に広告を表示し、インプレッションおよびクォータイルを追跡し、最後に制御をパブリッシャーのコンテンツに戻します。
1つのドメインから提供される1つの共有スクリプトであるため、IMA SDKはウェブ動画広告において最も鍵となる chokepoint(ボトルネック)です。一度これを無効化すれば、それを基盤に構築されたすべてのプレイヤーが広告を配信できなくなります。
広告リクエストのライフサイクル
視聴者が再生ボタンを押すと、プレーヤーは通常、以下の手順を実行します:
- ページは Google のサーバーから
ima3.jsを読み込みます。 - プレイヤーは広告ローダーを作成し、広告サーバーを指す広告タグを使って広告をリクエストします。
- SDK は広告(通常は DoubleClick 経由の VAST/VMAP ドキュメント)を取得し、それを解析して、動画上にオーバーレイされるコンテナ内に広告メディアを描画します。
- トラッキングピクセルが発火し、プレイヤーは待機します。
- 広告が終了する(またはエラーが発生する)と、SDK が
CONTENT_RESUME_REQUESTEDを発火し、プレイヤーが実際の動画の再生を再開します。
最後のイベントが鍵です:プレイヤーはこのイベントを待つように書かれています。SDKを制御する者が、コンテンツの再開タイミングを制御します。
単に SDK をブロックするとプレイヤーが動作しなくなる理由
粗雑な方法としては、ネットワークレベルで imasdk.googleapis.com をブロックして終わりにするというものがあります。しかし問題は、多くのプレイヤーがSDKの失敗や欠落を致命的なエラーとみなして、動画の再生をまったく始めず、代わりに読み込み中のスピナーを表示したり、「広告ブロッカーが検出されました」という壁を表示してしまうことです。
これが、クラシックなネットワークレベルのブロッカーが動画広告に対して弱い理由です:彼らは広告リクエストを遮断することはできますが、プレイヤーの「今、再開してもいいですか?」という問いには答えられません。SDKの代わりに立つものだけが可能です。
代替による無効化:スタブ方式
AdOffは、SDKをブロックするのではなく、それを置き換えます。IMA SDKの公開APIを模倣するスタブが挿入されるため、プレイヤーは依然として「動作中のSDK」を「認識」します——ただし、このSDKはすべての広告ブレイクが空であるかのように振る舞います。
プレイヤーが adsManager.start() を呼び出すと、スタブは直ちに CONTENT_RESUME_REQUESTED を発行します。プレイヤーはコンテンツを即座に再開します。広告は取得されず、広告は表示されず、プレイヤーは一切の欠落に気づかないため、エラー状態に陥ることはありません。
同じスタブを提供する二つの配信チャネル
AdOff は、異なるサイトが SDK を読み込む方法が異なるため、同じスタブを2つのチャネルで提供します。
- ページ内インジェクション。 除外対象ではないサイトでは、メインワールドスクリプトがプレイヤーの初期化前に
window.google.imaを定義するため、バンドル済みまたは外部から読み込まれた SDK はスタブによって上書きされます。 - ネットワークリダイレクト。 42のヨーロッパ放送局ドメインについて、declarativeNetRequest ルールが
ima3.jsおよびima3_dai.jsのリクエストを拡張機能内にバンドルされたスタブファイルへリダイレクトします。ページは Google の SDK を読み込んでいると信じてロードしますが、実際には AdOff の SDK を取得しています。
どちらのチャネルも同じ結果に収束します:プレイヤーはレスポンシブなSDKを、ビューワーはコンテンツを得ます。
この方式が効果を発揮する場面とそうでない場面
このスタブは、クライアントサイドのIMAベース広告を無効化します。ただし、サーバーサイド広告挿入(SSAI)には影響しません。SSAIでは、配信前に広告が動画ストリーム自体に埋め込まれるため、インターセプト可能なSDK呼び出しは存在しません。また、独自の広告パイプラインを使用するプレミアムサブスクリプションサービスについては、意図的に除外しており、そのプレイヤーは引き続き正常に動作します。
主要な動画プラットフォームには、専用のパイプラインが上位に追加されます。広告のスケジューリング情報は、ページが読み取る前にプレイヤーのレスポンスから取り除かれ、漏れ込んだ場合は早送りされます。
このことが広告ブロッキングの将来にとってなぜ重要なのか
広告プラットフォームは、単純なブロッカーがそれらに対応しづらいという理由から、クライアント側SDKへの依存度を高めています。プレイヤーを「空腹」に陥らせるのではなく、プレイヤーに「応答」させるアプローチは、頑強です。これは、すべての広告URLを列挙することに依存せず、SDKがコンテンツを再開しなければならないという固有の契約にのみ依存します。
AdOffは、Chrome、Firefox、Safari、Edge、Operaに対応した無料でアカウント不要なManifest V3拡張機能であり、その動画無効化レイヤーはすべてのユーザーに含まれています。
よくある質問
IMA SDKのブロッキングは、SDKの置き換えと同じですか?
いいえ。ネットワークレベルでブロックすると、プレイヤーがSDKから「コンテンツを再開できる」というシグナルを待つため、動画の再生が妨げられることがよくあります。代わりにスタブを配置することで、プレイヤーを完全に機能させつつ、決して広告がリクエストされないようにします。
スタブが広告リクエストを受け取った場合、どうなりますか?
このスタブは、プレイヤーが期待するのと同じAPIインターフェースを公開します。広告の再生を要求されると、直ちに「コンテンツ再開」イベントを発火させるため、広告の取得や表示なしに再生が継続されます。
IMAスタブはサーバーサイド広告挿入(SSAI)に対しても機能しますか?
いいえ。SSAI(サーバーサイド広告挿入)では、配信前にサーバー側で広告が動画ストリームに統合されるため、クライアント側のSDK呼び出しをインターセプトする余地がありません。サーバーサイド挿入には別の対策が必要であり、ブラウザ拡張機能の範囲では対応できません。
この種の拡張機能を実行できるブラウザはどれですか?
AdOffはManifest V3で構築されており、Chrome、Firefox、Safari、Edge、Operaで動作します。IMA(Interactive Media Ads)の無効化レイヤーは無料版に含まれており、アカウント登録や登録は不要です。
サイト側はSDKが置き換えられたことを検知できるでしょうか?
これはステルスレイヤーの目的です:偽装 bait や fetch/XHR のインターセプトにより、アンチ広告ブロッカー スクリプトに対して環境を通常のものに見せかけます。ただし、プラットフォーム側が検出方法を頻繁に変更するため、いずれの手法も永続的ではありません。
関連記事: ストリーミング広告ブロッキング:完全ガイド, プレロール、ミドルロール、ポストロール:動画広告フォーマットの解説, AdOffの仕組み:レイヤーごとに解説.