RTB 経由の AMP HTML 広告

このページでは、RTB で AMP HTML 広告を使用する方法について説明します。AMP HTML 広告の詳細と作業に役立つツールについては、こちらのリソースをご覧ください。

大まかな流れ

RTB 入札リクエスト

RTB 入札リクエストは、リクエストが AMP ページから送信されているかどうかと、AMP HTML 広告の要件を示します。

OpenRTB

AMP ページ

message SiteExt {
  enum AmpPage {
    // This is not an AMP page.
    DIALECT_HTML = 0;

    // This is an Amp page.
    DIALECT_HTML_AMP = 1;
  }

  // Whether this is an AMP page or not. Omitted if unknown.
  optional AmpPage amp = 1;
  enum VisibilityState {
    VISIBILITY_STATE_UNKNOWN = 0;

    // The page is at least partially visible. For example, in the foreground
    // tab of a non-minimized window.
    VISIBILITY_STATE_VISIBLE = 1;

    // The page is not visible to users. For example, when the page is in a
    // background browser tab, or in a minimized window.
    VISIBILITY_STATE_HIDDEN = 2;
  }

  // The visibility state of the web page containing the ad slot.
  // See https://www.w3.org/TR/page-visibility/.
  // [AdX: BidRequest.page_visibility]
  optional VisibilityState page_visibility = 2 [default =
    VISIBILITY_STATE_UNKNOWN];

  // Information about a browser window's user activation state. See
  // https://html.spec.whatwg.org/multipage/interaction.html#the-useractivation-interface.
  message UserActivation {
    // Indicates whether a user has completed an interaction since page load.
    optional bool wasact = 1;

    // Indicates whether a user is currently interacting with the page.
    optional bool isact = 2;
  }

  // User activation information from the browser for the current request, if
  // the request is for a web page.
  optional UserActivation uact = 5;

  // The set of possible web navigation types that predicate a page load. Each
  // of these types may have different performance characteristics. For example,
  // users going back and forth might experience a faster site than users
  // performing navigation for the first time or submitting forms. See
  // https://w3c.github.io/navigation-timing/#dom-performancenavigationtiming-type.
  enum NavigationType {
    NAVIGATION_TYPE_UNKNOWN = 0;

    // Navigation started by clicking a link, entering the URL in the browser's
    // address bar, form submission, or initializing through a script operation
    // other than reload and back_forward.
    NAVIGATION_TYPE_NAVIGATE = 1;

    // Navigation is through the browser's reload operation, location.reload(),
    // or a Refresh pragma directive like
    // <meta http-equiv="refresh" content="300">.
    NAVIGATION_TYPE_RELOAD = 2;

    // Navigation is through the browser's history traversal operation.
    NAVIGATION_TYPE_BACK_FORWARD = 3;

    // Navigation is initiated by a prerender hint (deprecated). See
    // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/prerender.
    NAVIGATION_TYPE_PRERENDER = 4;
  }

  // The type of browser navigation that led to the current page. Unset for
  // non-web ad requests.
  optional NavigationType ntype = 6;

  // Indicates that the request is using semi-transparent branding,
  // which means only a truncated version of the request URL will
  // be provided. This decision is made by the publisher, see
  // https://support.google.com/admanager/answer/4584891#urls for context.
  optional bool is_semi_transparent_request = 3;

  // The domain of the partner (of the site owner) with ownership
  // of some portion of ad inventory on the site. The partner's ads.txt file
  // will be hosted here. More detail at
  // http://iabtechlab.com/wp-content/uploads/2021/03/ctv-app-ads-explainer-guide.pdf
  optional string inventorypartnerdomain = 4;
}

AMP HTML 広告の要件

// Ad Exchange extensions for the Imp object.
message ImpExt {
...
  // Possible requirement types for AMP ads.
  enum AmpAdRequirementType {
    // AMP ad requirements unknown.
    UNKNOWN_AMP_AD_REQUIREMENT_TYPE = 1;
    // AMP ads are not allowed.
    AMP_AD_NOT_ALLOWED = 2;
    // Either AMP ads or non-AMP ads are allowed;
    // AMP ads are not early rendered.
    AMP_AD_ALLOWED_AND_NOT_EARLY_RENDERED = 3;
    // Either AMP ads or non-AMP ads are allowed;
    // AMP ads are early rendered.
    AMP_AD_ALLOWED_AND_EARLY_RENDERED = 4;
    // AMP ads are required.
    // Ads that are non-AMP may be rejected by the publisher.
    AMP_AD_REQUIRED = 5;
    // Exchange-specific values above 500.
  }
  optional AmpAdRequirementType ampad = 8
    [default = UNKNOWN_AMP_AD_REQUIREMENT_TYPE];
}

認定バイヤー RTB

AMP ページ

// Whether this is an AMP page or not.
enum AmpPage {
  // AMP page status unknown.
  UNKNOWN_AMP_PAGE = 0;

AMP HTML 広告の要件

// Possible requirement types for AMP ads.
enum AmpAdRequirementType {
  // AMP ad requirements unknown.
  UNKNOWN_AMP_AD_REQUIREMENT_TYPE = 0;

RTB 入札レスポンス

OpenRTB

OpenRTB 3.0 と付属の Advertising Common Model では、IAB が策定した最新のドラフト仕様に、AMP HTML 広告をサポートするため次のような機能が追加されています。

入札単価 項目 Attr 種類 説明
リクエスト Site.amp amp 整数 Site.amp フィールドは、ページが AMP でレンダリングされるかどうかを示します。不明な場合は省略されます。
0 = ページが非 AMP
1 = ページが AMP HTML で作成されている
リクエスト ampformat rend 整数 AMP フォーマット仕様には、AMP HTML 広告の要件とレンダリング動作が規定されています。
1 = AMP 広告の要件は不明です
2 = AMP 広告は使用できません
3 = AMP 広告または非 AMP 広告のいずれかが許可されます。AMP 広告の初期レンダリングは行われません
4 = AMP 広告または非 AMP 広告のいずれかが許可され、AMP 広告のいずれかが早期レンダリングされます
5 = AMP 広告が必要です。非 AMP の広告はパブリッシャーにより承認されない可能性がある
500+ = エクスチェンジ固有の値(事前に入札者に通知する必要がある)
レスポンス display curl string 入札レスポンスに display.curl が追加され、URL 経由でクリエイティブを送信できるようになりました。これには AMP HTML 広告も含まれます。
これは、クリエイティブのマークアップを確認できる URL です。対象となるクリエイティブ タイプ(AMP 広告、VAST、DAAST、ネイティブなど)です。通常、1 つの広告では adm または curl のいずれか 1 つのみが有効です。

認定バイヤー RTB

認定バイヤーの入札レスポンスの BidResponse.Ad.amp_ad_url フィールドには、AMP HTML 広告コンテンツを指す URL を指定できます。Google の OpenRTB 実装では、Bid オブジェクトの拡張機能として同じフィールドが存在します。

// The URL to fetch an AMPHTML ad. Only one of the following should be set:
// html_snippet, video_url, amp_ad_url, native_ad.
optional string amp_ad_url = 23;

有効な AMP HTML の検証

AMP HTML 広告を早期レンダリングするには、エクスチェンジによる検証と署名が必要です。これは、広告が amp4ads の <html amp4ads> クリエイティブ フォーマットで作成されていることを示すためです。

有効な AMP HTML の広告は、AMP ページにより早い段階でレンダリングできるようになります。有効な AMP HTML として確認されていない広告は、AMP HTML 以外の広告と同じ速度でレンダリングされます。

amp_ad_url で返されるのは AMP HTML 広告のみです。

今後、パブリッシャーが AMP HTML 広告のみを必要とする場合、AMP HTML として署名されていない広告はレンダリングされなくなります。

認定バイヤーの場合、ビッダーは、AMP HTML の広告が必要な広告スロットに AMP HTML 以外の広告を返した場合、引き続き料金が発生します。

サーバーサイド フェッチ

AMP HTML 広告を早期レンダリングするには、クライアントで追加のホップを必要とせずに AMP HTML 広告コンテンツをレンダリングする必要があります。これは、広告のレイテンシや余分なクライアントサイドの呼び出しによってユーザー エクスペリエンスが低下するのを防ぐためです。

入札者がオークションで落札すると、エクスチェンジはサーバー間リクエストを実行して、amp_ad_url で指定された URL にある AMP HTML 広告コンテンツを取得します。クリエイティブ サーバーは、300 ミリ秒以内に応答してコンテンツを返す必要があります。

クリエイティブ サーバーから返された AMP HTML 広告は、広告スロットに挿入され、その後レンダリングされます。なお、有効な AMP HTML 広告に iframe や他の <amp-ad> タグを含めることはできません。詳しくは、AMP HTML 広告の仕様をご覧ください。

ベータ版のみの機能: この機能が必要な場合は、アカウント チームにお問い合わせください。

AMP HTML 広告(amp_ad_url で指定)をサーバー間で取得する際に、認定バイヤーはユーザーのブラウザからクリエイティブ サーバーに HTTP ヘッダーと IP を渡すことがあります。これにより、クリエイティブ サーバーは、標準のクライアントサイドの取得から送信される情報と同様の情報を確実に受信できます。場合によっては、IP アドレスが最初の 3 バイト(IPv4)または最初の 6 バイト(IPv6)に切り捨てられることがあります。この機能が必要な場合は、アカウント チームにお問い合わせください。HTTP ヘッダーの例を次に示します。

インプレッション トラッキング URL とクリックマクロ

RTB 購入者は通常、入札レスポンスに構造化フィールドとしてインプレッション トラッカーを含めます(この URL は Bid.burl、OpenRTB 2.5 の「請求通知 URL」です)。

認定バイヤーの場合、これらはクライアントサイドで呼び出されます。amp-pixel は、クリエイティブのレンダリング時にトラッキング URL を呼び出します。amp-analytics は、レンダリングだけでなく、より高度なトラッキングのユースケースにも対応できます。

AMP HTML 広告には、AMP HTML 内に有効なクリックマクロが含まれている必要があります。通常、次のような形式になります。

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2my.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>
<a href=”https://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%”></a>

クリエイティブ コードに Cookie マッチング ピクセルが含まれていることがよくあります。AMP HTML 広告では、このユースケースに対して amp-pixel コンポーネントと amp-analytics コンポーネントを使用できます。amp-analytics または amp-pixel を使用してユースケースに対応できない場合は、GitHub の問題を開き、代替オプションを検討してください。さまざまな会社で広く使用されている新しい拡張機能を歓迎します。新しい拡張機能の作成に関する詳細なガイドラインまたは技術ガイドをご覧ください。

テスト用の AMP 広告 URL のサンプル

テストには、次のサンプル AMP HTML 広告コンテンツを使用できます。

関連情報

AMP プロジェクトと Google は、活動開始に役立つさまざまなリソースを公開しています。

AMP で広告を作成する
IAB / OpenRTB グループへの RTB 固有の提案