このブログシリーズでは、新しく改善されたインタラクティブ Google 広告クエリビルダーの構築過程についてお伝えしています。シリーズのパート 2 では、インタラクティブ クエリビルダー Angular アプリケーションの正規データセットとして利用する詳細な JSON リソース スキーマの設計について説明しました。パート 3 では、GoogleAdsFieldService を使ってそのスキーマを作成する方法を取り上げます。

データの取得

パート 2 で説明したスキーマのデータの大半は、次のクエリを使って GoogleAdsFieldService という API を呼び出すことで作成します。

SELECT name, category, data_type, selectable, filterable, sortable, selectable_with, metrics, segments, is_repeated, type_url, enum_values, attribute_resources

結果は、Google Ads API で利用できるすべてのフィールドについての JSON オブジェクトの配列です。配列の各オブジェクトには、先ほどの SELECT 句のフィールドが含まれています。たとえば、ad_group のリスト項目は次のようになります。

{
"resourceName": "googleAdsFields/ad_group",
"name": "ad_group",
"category": "RESOURCE",
"dataType": "MESSAGE",
"selectable": false,
"filterable": false,
"sortable": false,
"selectableWith": [...],
"metrics": [...],
"segments": [...],
"isRepeated": false,
"typeUrl": "com.google.ads.googleads.v6.resources.AdGroup",
"enumValues": [],
"attributeResources": [...]
}


これをキーと値のペアに変換します。キーをエンティティ名、値をエンティティのメタデータにして、エンティティからメタデータを簡単に検索できるようにします。たとえば、ad_group エントリは次のようになります。

{
"ad_group": {
"resourceName": "googleAdsFields/ad_group",
"name": "ad_group",
"category": "RESOURCE",
"dataType": "MESSAGE",
"selectable": false,
"filterable": false,
"sortable": false,
"selectableWith": [...],
"metrics": [...],
"segments": [...],
"isRepeated": false,
"typeUrl": "com.google.ads.googleads.v6.resources.AdGroup",
"enumValues": [],
"attributeResources": [...]
}


パート 2 で設計したスキーマと比べると、変換したオブジェクトにはいくつかのフィールドが存在しないことがわかります。そこで、属性、フィールド、説明、表示名を表すセクションを追加します。

属性

スキーマの設計を思い出してみると、それぞれのリソースに attributes という名前の配列があり、そのリソース自体と任意の属性付きリソースに存在するすべてのフィールド名が含まれていました。この配列は、GoogleAdsFieldService クエリの結果を反復処理し、そのリソースかいずれかの属性付きリソースで始まるエントリ名にドットを追加することで作成できます。

フィールド

このスキーマの fields エントリは、(a)先ほど作成した属性配列の項目、(b)リソースの指標、(c)リソースのセグメントのそれぞれがエントリとなるオブジェクトです。各エントリの値は、先ほど作成したオブジェクトのそれぞれのフィールドの値となります。ただし、各フィールドに incompatible_fields 配列を追加する必要があります。

fields オブジェクトの各エントリの incompatible_fields 配列を作成するには、トップレベル オブジェクトに存在するフィールド、指標、セグメントのそれぞれが、評価対象のフィールドの selectable_with と一致するかどうかを確認します。一致しない場合、そのフィールド、指標、セグメントを incompatible_fields 配列に追加します。

説明

次に、トップレベルのリソースと fields エントリ内の項目のそれぞれに説明を追加します。ここで重要なのは、トップレベルのリソースによって、フィールドの説明が異なる場合があることです。たとえば、ad_group.id の説明には「出力のみ。広告グループの ID。」とありますが、campaign.id の説明には「出力のみ。キャンペーンの ID。」とあります。REST ディスカバリー ドキュメントには、ネストした説明が含まれています。これは正規の説明オブジェクトを作るために利用できるので、これを使ってスキーマを設定します。このステップには解析とフォーマット設定が必要ですが、詳細は割愛します。必要になったときのために、REST ディスカバリー ドキュメントが用意されていることを覚えておいてください。今のところ、この方法が利用できる最適なソリューションですが、GoogleAdsFieldService から説明が返されるようになれば、そちらを使う方が簡単でしょう。

表示名

残る作業は、リソース スキーマの表示名フィールドの設定です。この作業は単純で、名前に含まれるアンダースコアをスペースで置換し、各単語の最初の文字を大文字にするだけです。

リソースのフィルタリング

これで、リソース スキーマの内容をすべて設定できました。ただし、これには GoogleAdsFieldService クエリが返したすべてのリソース、フィールド、セグメント、指標が含まれています。このスキーマをフィルタリングし、categoryRESOURCE である項目のみを含むようにします。

まとめ

詳細なフィールド情報と、それぞれのフィールドと同時に選択できないフィールドのリストを含む、拡張リソース スキーマが作成できました。Angular アプリケーションでは、このスキーマを利用します。今回の投稿では、以下について説明しました。
  • GoogleAdsFieldService を使ってフィールドのメタデータを取得する方法
  • GAQL でのフィールドの同時使用可否
  • REST ディスカバリー API
Google Ads API でできることについての理解が深まれば幸いです。ご質問やさらにサポートが必要なことがありましたら、フォーラムまたは [email protected] にご連絡ください。


このブログシリーズでは、最近リリースされたインタラクティブ Google 広告クエリビルダー ツールの構築過程についてお伝えしています。シリーズのパート 1 では、このシリーズで説明する大まかな内容と、このコンテンツを公開することになった理由を紹介しました。パート 2 では、インタラクティブ クエリビルダー Angular アプリケーションの正規データセットとして利用する詳細な JSON リソース スキーマの設計について取り上げます。

背景

パート 1 でも述べたように、新しいインタラクティブ クエリビルダーの大きなメリットの 1 つは、Google Ads Query Language(GAQL)クエリの句において、フィールドを選択できる理由やできない理由をリアルタイムで細かくフィードバックできることです。

たとえば、ad_group を FROM 句のメインリソースとする GAQL クエリを作成する場合を考えてみましょう。ad_group リソースでは、segments.conversion_actionmetrics.absolute_top_impression_percentage の両方を選択できます。しかし、segments.conversion_action の詳しいリファレンス ドキュメントを見ると、一緒に選択できる("Selectable With")フィールドのリストが記載されており、そこには metrics.absolute_top_impression_percentage は含まれていません。そのため、この 2 つのフィールドを同時に使用することはできません。FROM 句のリソースが何であれ、クエリにこの 2 つのフィールドのどちらかが存在すれば、もう片方は使用できません。そのため、segments.conversion_action を選択すると、インタラクティブ クエリビルダーで metrics.absolute_top_impression_percentage は選択できなくなります。

私たちは、実行時にサーバーを何度も呼び出してすべてのロジックを知ろうとするよりも、リソース スキーマを含む静的な JSON ファイルをアプリケーションに渡す方が便利だと考えました。しかし、最適なスキーマとはどのようなものでしょうか。

スキーマの設計(定義はこのブログ投稿の最後に掲載)

GAQL 文字列では、FROM 句に 1 つのリソースが必要です。この制約を考えると、トップレベルの JSON スキーマは、リソースからそれぞれのリソースの詳細スキーマへのマップとなります。たとえば、スキーマの ad_group エントリは次のようになります。


{

"ad_group": {
"name": "ad_group",
"display_name": "Ad Group",
"description": "An ad group.",
// Array of all attribute and attributed resource fields.
"attributes": [
"ad_group.ad_rotation_mode",
"ad_group.base_ad_group",
"ad_group.campaign",
...
"campaign.ad_serving_optimization_status",
"campaign.advertising_channel_sub_type",
"campaign.advertising_channel_type",
...
"customer.auto_tagging_enabled",
"customer.call_reporting_setting.call_conversion_action",
"customer.call_reporting_setting.call_conversion_reporting_enabled",
...
],
// Array of all metrics selectable with ad_group.
"metrics": [...],
// Array of all segments selectable with ad_group.
"segments": [...],
// Expanded info for all items listed in attributes, metrics, and segments arrays.
"fields": {...}
}




この拡張スキーマの厄介な点は、fields エントリです。このオブジェクトのキーは、トップレベルのリソース(ad_group など)のすべての属性、指標、セグメントです。このオブジェクトのそれぞれの項目の値は、そのフィールドについての詳細情報と、incompatible_fields という追加フィールドを含むオブジェクトです。この追加フィールドは、そのフィールドと同時に選択できないフィールドの配列です。たとえば、fields オブジェクトの metrics.phone_impressions エントリは次のようになります。




"metrics.phone_impressions": {
"field_details": {
"name": "metrics.phone_impressions",
"category": "METRIC",
"selectable": true,
"filterable": true,
"sortable": true,
"data_type": "INT64",
"is_repeated": false,
"type_url": "",
"description": "Number of offline phone impressions.",
"enum_values": [],
"selectable_with": [
"ad_group",
"ad_group_ad",
"campaign",
"customer",
"extension_feed_item",
"segments.ad_network_type",
"segments.click_type",
"segments.date",
"segments.day_of_week",
"segments.interaction_on_this_extension",
"segments.keyword.ad_group_criterion",
"segments.keyword.info.match_type",
"segments.keyword.info.text",
"segments.month",
"segments.month_of_year",
"segments.quarter",
"segments.week",
"segments.year"
]
},
"incompatible_fields": [
"segments.slot",
"segments.device",
"segments.external_conversion_source",
"segments.conversion_action_category",
"segments.conversion_lag_bucket",
"segments.hour",
"segments.conversion_action_name",
"segments.conversion_action",
"segments.conversion_adjustment",
"segments.conversion_or_adjustment_lag_bucket"
]
},




このスキーマは再帰的で、一部のフィールドは複数のリソースに登場するので、冗長に思えるかもしれません。しかし、読み込み時間を減らすため、最終的にはこのメインスキーマを分割してそれぞれのリソースを表す JSON ファイルを作成し、FROM 句のリソースに応じてリソースに固有な 1 つのスキーマのみを取得します。


スキーマ定義

参考までに、完全なスキーマ定義を示します。


interface ResourceSchema {
name: string; // the name of the resource
display_name: string; // the display name of the resource
description: string; // the description of the resource
attributes: string[]; // the resource's fields (including attributed resource fields)
metrics: string[]; // available metrics when the resource is in the FROM clause
segments: string[]; // available segments when the resource is in the FROM clause
fields: { // detailed info about all fields, metrics, and segments
[key: string]: {
field_details: FieldDetails; // details about the field (defined below)
incompatible_fields: string[]; // fields that are incompatible with the current field
}
};
}

interface FieldDetails {
name: string; // the name of the field
category: string; // the field's category (e.g. ATTRIBUTE, METRIC, SEGMENT)
selectable: boolean; // whether or not the field is allowed to be placed in the SELECT clause
filterable: boolean; // whether or not the field is allowed to be placed in the WHERE clause
sortable: boolean; // whether or not the field is allowed to be placed in the ORDER BY clause
data_type: string; // the field's data type
is_repeated: boolean; // whether or not the field is a repeated field
type_url: string; // the field's type_url
description: string; // the field's description
enum_values: string[]; // possible enum values if the field is of type ENUM
selectable_with: string[]; // the list of field the current field is selectable with
}


まとめ

以上で、詳細なフィールド情報と、それぞれのフィールドと同時に選択できないフィールドのリストを含む拡張リソース スキーマが設計できました。Angular アプリケーションでは、このスキーマを利用します。パート 3 では、GoogleAdsFieldService を使ってこのスキーマを作成する方法について説明します。
Google Ads API でできることについての理解が深まれば幸いです。ご質問やさらにサポートが必要なことがありましたら、フォーラムまたは [email protected] にご連絡ください。
 

FLoC は、プライバシーを保護しつつ、興味ベースで広告を選択するメカニズムです。

ユーザーがウェブを動き回ると、ブラウザは FLoC アルゴリズムを使って、直近の閲覧履歴が似ているたくさんのブラウザで共通する「興味コホート」を割り出します。コホートはユーザーのデバイスで定期的に再計算されますが、個々の閲覧データがブラウザ ベンダーなどの他者と共有されることはありません。

広告主(お金を払って広告を出稿するサイト)は、自分のウェブサイトにコードを含めてコホートデータを収集し、アドテック プラットフォーム(広告を配信するソフトウェアやツールを提供する企業)に提供できます。たとえば、アドテック プラットフォームは、オンラインの靴店から、コホート 1101 と 1354 のブラウザはこの店のハイキング グッズに興味があるかもしれないことを把握できます。その他の広告主から、アドテック プラットフォームは各コホートのその他の興味を知ることができます。

次に、広告プラットフォームはこのデータを使って、これらのコホートのいずれかに属するブラウザが広告掲載サイト(ニュースサイトなど)のページをリクエストしたときに、関連性が高い広告(先ほどの靴店のハイキング シューズなど)を選択できます。

Privacy Sandbox は、サードパーティ Cookie などのトラッキング メカニズムを使わずにサードパーティ ユースケースを満たすための一連の提案です。各提案の概要については、Privacy Sandbox の詳細をご覧ください。

この提案について、皆さんからのフィードバックが必要です。コメントがある方は、FLoC Explainer リポジトリで Issue を作成してください。この提案に関連する Chrome の試験運用についてフィードバックがある方は、試験運用の目的に返信する形で投稿してください。

FLoC が必要になる理由

多くの企業は、サイトのトラフィックを増加するために広告を利用しています。そして多くのパブリッシャーのウェブサイトは、広告のインベントリを販売することで、コンテンツの資金を得ています。ユーザーは通常、関連性が高く有用な広告を見ることを好みます。また、広告の関連性が高いほど、広告主に多くのビジネスを、広告をホストしているウェブサイトに多くの収益をもたらします。言い換えれば、関連性の高い広告を表示すれば、広告スペースの価値が上がります。したがって、関連性の高い広告を選ぶことで、広告がサポートするウェブサイトの収益が上がります。つまり、関連性の高い広告は、ユーザーにメリットをもたらすコンテンツを制作するための資金源になります。

しかし、多くのユーザーは、関連性の高い広告が示唆するプライバシーの問題を心配しています。現在、このような広告は、Cookie によるトラッキングやデバイスのフィンガープリンティングなどの技術を利用しています。これらは、個人の閲覧動作を追跡するために使われる技術です。FLoC の提案は、プライバシーを侵害せずに広告選択の効率を高めることを目指しています。

FLoC の利用目的

  • 広告主のサイトに頻繁にアクセスしたコホートや、それに関連するトピックに興味を示したコホートに属するブラウザを使うユーザーに広告を表示する。
  • 機械学習モデルを使用して、ユーザーをコンバージョンできる可能性をコホートに基づいて予測し、広告オークションの入札動作に反映する。
  • ユーザーにコンテンツをお勧めする。たとえば、あるニュースサイトで、スポーツのポッドキャスト ページの人気がコホート 1234 と 7 のユーザーの間で特に高い場合、同じコホートの他のユーザーにもそのコンテンツをお勧めできる。

FLoC の動作の仕組み

下の例は、FLoC を使って広告を選択するうえでのそれぞれの役割について説明しています。

  • この例の広告主(お金を払って広告を出稿する企業)は、次のオンライン靴店です。
    shoestore.example

  • この例のパブリッシャー(広告スペースを販売するサイト)は、次のニュースサイトです。
    dailynews.example

  • アドテック プラットフォーム(広告を配信するソフトウェアやツールを提供する企業)は、次のサイトです。
    adnetwork.example

FLoC を使って広告を選択して配信するうえでのそれぞれの役割について、順を追って説明する図。FLoC サービス、ブラウザ、広告主、パブリッシャー(コホートの観測)、アドテック、パブリッシャー(広告の表示)

この例では、ユーザーを YoshiAlex と呼びます。最初の状態では、どちらのブラウザも同じコホート 1354 に属しています。

ここではユーザーを Yoshi と Alex と呼んでいますが、これは例示のみの目的です。FLoC では、広告主、パブリッシャー、アドテック プラットフォームに名前や個々の ID が明かされることはありません。

コホートをユーザーの集合と考えないでください。そうではなく、コホートは閲覧アクティビティをグループ化したものと考えてください。

1. FLoC サービス

  1. ブラウザによって利用される FLoC サービスは、たくさんの「コホート」を持つ数学的なモデルを作成します。各コホートは、最近の閲覧履歴が似ているたくさんのウェブブラウザに対応しています。この処理については、後ほど詳しく説明します。
  2. それぞれのコホートに番号が付けられます。

2. ブラウザ

  1. Yoshi のブラウザは、FLoC サービスから FLoC モデルの詳細データを取得します。
  2. Yoshi のブラウザは、FLoC モデルのアルゴリズムを使ってどのコホートが自分の閲覧履歴に最も近いかを計算し、自分のコホートを割り出します。この例では、コホート 1354 とします。Yoshi のブラウザは、FLoC サービスに何のデータも送信していない点に注目してください。
  3. 同じように、Alex のブラウザもコホート ID を計算します。Alex の閲覧履歴は Yoshi の履歴とは違いますが、かなり似ているので、どちらのブラウザもコホート 1354 に属すると判断されます。

3. 広告主 : shoestore.example

  1. Yoshi が shoestore.example にアクセスします。
  2. サイトが Yoshi のブラウザにコホートを尋ねます。1354 が返されます。
  3. Yoshi がハイキング シューズのページを閲覧します。
  4. サイトは、コホート 1354 のブラウザがハイキング シューズに興味を示したことを記録します。
  5. サイトは後ほど、コホート 1354 が興味を示した製品についての追加情報も記録します。他のコホートについても同様です。
  6. サイトは、コホートと興味が示された製品についての情報を定期的に集計し、アドテック プラットフォーム adnetwork.example に送信します。

次は Alex です。

4. パブリッシャー : dailynews.example

  1. Alex が dailynews.example にアクセスします。
  2. サイトは Alex のブラウザにコホートを尋ねます。
  3. その後、アドテック プラットフォーム adnetwork.example に広告をリクエストしますが、その際に Alex のブラウザのコホート 1354 を含めます。

5. アドテック プラットフォーム : adnetwork.example

  1. adnetwork.example は、Alex に適した広告を選択できます。その際に、パブリッシャー dailynews.example と 広告主 shoestore.example からの以下のデータを組み合わせて利用します。
    • Alex のブラウザのコホート(1354)。dailynews.example から提供されたもの。
    • コホートと製品に対する興味に関するデータ。shoestore.example から提供されたもの。「コホート 1354 のブラウザはハイキング シューズに興味がある可能性がある」
  2. adnetwork.example は Alex に適した広告を選択します。ハイキング シューズの広告で、shoestore.example によるものが選ばれます。
  3. dailynews.example が広告 🥾 を表示します。

現在の広告選択には、Cookie によるトラッキングやデバイスのフィンガープリンティングなどの技術が利用されています。これらは、広告主などのサードパーティが個人の閲覧行動を追跡するために使われる技術です。

FLoC では、ブラウザは FLoC サービスにも他の誰にも閲覧履歴を送信しません。ブラウザは、ユーザーのデバイス上でブラウザ自身が属するコホートを割り出します。ユーザーの閲覧履歴がデバイスを離れることは一切ありません。

FLoC モデルを作るバックエンド サービスは誰が運用するのか?

各ブラウザ ベンダーは、それぞれにどのようにコホートを作り出すのかを選択する必要があります。Chrome は独自の FLoC サービスを運用していますが、他のブラウザは異なるクラスタリングアプローチを採った FLoC を実装し、独自のサービスを運用する可能性があります。

FLoC サービスがブラウザにコホートを割り出す方法

  1. ブラウザによって利用される FLoC サービスは、すべての潜在的なウェブ閲覧履歴を表す多次元数学的表現を作成します。このモデルを「コホート空間」と呼びます。
  2. サービスはこの空間をたくさんのセグメントに分割します。各セグメントは、たくさんの類似した閲覧履歴のクラスタを表します。このグループ分けは、実際の閲覧履歴に基づくものではありません。単に「コホート空間」でランダムな中心を選んだり、空間をランダムな線で分割したりしたものです。
  3. それぞれのセグメントにコホート番号が与えられます。
  4. ウェブブラウザは、FLoC サービスから「コホート空間」を示すこのデータを取得します。
  5. ユーザーがウェブを動き回ると、ブラウザはあるアルゴリズムに基づき、「コホート空間」内でのブラウザ自身の閲覧履歴に最も近い領域を定期的に計算します。
FLoC サーバーが作成した「閲覧履歴空間」の図。コホート番号が振られた複数のセグメントが存在する。
FLoC サービスは「コホート空間」をたくさんのセグメントに分割する(ここに示すのは一部のみ)。

このプロセスのどの時点においても、ユーザーの閲覧履歴が FLoC サービスやサードパーティに送信されることはありません。ブラウザのコホートは、ユーザーのデバイス上でブラウザ自身が計算します。FLoC サービスは、ユーザーデータを取得することも、保管することもありません。

ブラウザのコホートは変わることがあるか

はい、ブラウザのコホートはもちろん変わることがあります。毎週同じウェブサイトにアクセスすることはないでしょう。ブラウザのコホートはそれを反映します。

コホートは、ユーザーの集まりではなく、閲覧アクティビティのクラスタを表します。通常、コホートの行動の特徴は時間が経っても一貫性があり、コホートは最近の閲覧行動が似ているグループなので、広告の選択に役立ちます。それぞれのユーザーのブラウザは、閲覧行動の変化とともにコホートを出入りします。まずは、7 日ごとにブラウザがコホートを再計算することを想定しています。

上の例では、Yoshi と Alex のブラウザのコホートはどちらも 1354 でした。将来的に興味が変われば、Yoshi のブラウザと Alex のブラウザが別のコホートに移動する可能性があります。下の例では、Yoshi のブラウザはコホート 1101 に移動し、Alex のブラウザはコホート 1378 に移動します。他のユーザーのブラウザも、閲覧の興味が変わるにつれてコホートを出入りします。

FLoC サーバーが作成した「閲覧履歴空間」の図。コホート番号が振られた複数のセグメントが存在する。時間とともに閲覧の興味が変わるにつれて、ユーザーの Yoshi と Alex に属するブラウザが別のコホートに移動する様子を示した図。
興味が変われば、Yoshi と Alex のブラウザのコホートは変わる可能性がある。

コホートは、ユーザーのグループではなく、閲覧アクティビティのグループを定義します。行動が変わるにつれて、ブラウザはコホートを出入りします。

ブラウザはどのようにしてコホートを割り出すのか

前述のように、ユーザーのブラウザはコホートの数学モデルの詳細データを FLoC サービスから取得します。これは、すべてのユーザーの閲覧アクティビティを表す多次元空間です。その後、ブラウザはあるアルゴリズムを使い、この「コホート空間」のどの領域(すなわち、どのコホート)が最近の自身の閲覧行動に最も近いかを割り出します。

FLoC はどのようにしてコホートの適切なサイズを割り出すのか

各コホートには、たくさんのブラウザが存在することになります。

コホートのサイズが小さい場合、広告のパーソナライズには役立つかもしれませんが、ユーザーのトラッキングをやめることにはなりません。逆もまた同様です。ブラウザをコホートに割り当てるメカニズムには、プライバシーと有用性との間でトレードオフが必要になります。Privacy Sandbox は、ユーザーが「集団の中に隠れる」ことができるように、k-匿名性を利用します。コホートは、少なくとも k 人のユーザーによって共有されれば、k-匿名性があります。k の数が大きくなるほど、コホートのプライバシーは高くなります。

プライベートな分類に基づいてユーザーをグループ化するために FLoC を使えるか

FLoC のコホートモデルを作成するために使うクラスタリング アルゴリズムは、なぜ分類がプライベートなのかは知ることなく、コホートにプライベートな分類と相関関係があるかどうかを評価できるように設計されています。人種、性別、病歴など、プライベートな分類が明らかになる可能性があるコホートはブロックされます。言い換えれば、コホートを割り出すとき、ブラウザはプライベートな分類が明らかにならないようなコホートのみを選択します。

FLoC はオンラインでユーザーを分類するための別の方法にすぎないのか

FLoC では、ユーザーのブラウザは他のたくさんのユーザーのブラウザとともに、たくさんのコホートのうちの 1 つに属します。サードパーティ Cookie やその他のターゲティング メカニズムとは異なり、FLoC はユーザーのブラウザが属するコホートしか明かさず、個々のユーザー ID が明らかになることはありません。そのため、他者がコホート内の個人を特定することはできません。さらに、ブラウザのコホートを割り出すために使われる閲覧アクティビティに関する情報は、ローカルのブラウザやデバイスに留まり続けて、他の場所にアップロードされることはありません。ブラウザは、差分プライバシーなどの他の手法を使ってさらに匿名化することもできます。

ウェブサイトは参加して情報を共有する必要があるのか

ウェブサイトは、FLoC をオプトインすることもオプトアウトすることもできます。そのため、プライベートなトピックを扱うサイトは、そのサイトへのアクセスを FLoC の計算に含めないようにすることもできます。さらなる保護として、FLoC サービスによる分析では、そのコホートがなぜプライベートであるかを知ることなく、コホートによってユーザーに関するプライベートな情報が明らかになる可能性があるかどうかを評価します。あるコホートで、サイトにアクセスしたユーザーのうちプライベートな分類に属するユーザーの数が典型的なユーザーの数を超えている可能性がある場合、そのコホート全体が削除されます。この分析で扱われるプライベートな分類には、負債状況やメンタルヘルスなどが含まれます。

ウェブサイトは Permissions-Policy ヘッダーに interest-cohort=() を設定すると、FLoC 計算からオプトアウトすることができます。オプトアウトしていないページでは、document.interestCohort() が使われていると、ブラウザの FLoC 計算に含まれることになります。FLoC のオリジントライアル期間中、広告や広告に関連するリソースを読み込むことが検知された場合も、ブラウザの FLoC 計算に含まれることになります(Chrome の広告検知メカニズムの仕組みは、Chromium での広告のタグ付けで説明しています)。イントラネットのサイトなど、プライベートな IP アドレスから提供されているページは、FLoC の計算対象に含まれません。

ウェブ デベロッパーとして FLoC を試すにはどうすればよいか

FLoC API はシンプルで、Promise を返すメソッドが 1 つあるだけです。この Promise は、コホートの idversion を表すオブジェクトに解決されます。

const { id, version } = await document.interestCohort();
console.log('FLoC ID:', id);
console.log('FLoC version:', version);

利用できるようになったコホートのデータは、次のように見えます。

{
"id": "14159",
"version": "chrome.1.0"
}

FLoC を使うサイトは、version の値を使って、コホート ID が参照するブラウザと FLoC モデルを知ることができます。以下の説明のとおり、interest-cohort パーミッションが許可されていないフレームでは、document.interestCohort() が返す Promise はリジェクトされます。

FLoC API は Chrome 89 以降で利用できますが、オリジン トライアルに参加していない場合は、フラグを設定してコマンドラインから Chrome を実行する必要があります。さまざまなオペレーティング システムで実行する方法は、フラグ付きで Chromium を実行するで説明されています。

  1. 次のフラグを使って Chrome を起動します。

    --enable-blink-features=InterestCohortAPI  
    --enable-features="FederatedLearningOfCohorts:update_interval/10s/minimum_history_domain_size_required/1,FlocIdSortingLshBasedComputation,InterestCohortFeaturePolicy"
  2. サードパーティ Cookie がブロックされていないこと、広告ブロッカーが実行されていないことを確認します。

  3. floc.glitch.me のデモを確認します。

ファーストパーティとサードパーティのそれぞれのコンテキストで FLoC を試す方法は、FLoC のオリジン トライアルに参加する方法で説明しています。

ウェブサイトで FLoC の計算をオプトアウトするにはどうすればよいか

サイトで interest-cohort パーミッション ポリシーを使うと、コホートを計算するためのユーザーのサイト一覧から除外することを宣言できます。このポリシーは、デフォルトで allow となる予定です。interest-cohort パーミッションが許可されていないフレームでは、document.interestCohort() が返す Promise はリジェクトされます。メインのフレームに interest-cohort permission がない場合、そのページへのアクセスは興味コホートの計算には使われません。

たとえば、次の HTTP レスポンス ヘッダーを送ると、すべての FLoC コホート計算をオプトアウトできます。

  Permissions-Policy: interest-cohort=()

提案やフィードバックをするにはどうすればよいか

API に関するコメントがある方は、FLoC Explainer リポジトリで Issue を作成してください。

関連情報


Reviewed by Eiji Kitamura - Developer Relations Team

アプリを iOS 14 に対応させる

Apple が ATT を変更することにより、広告がどの程度コンバージョン(アプリのインストールや販売)を促進しているかを示す重要な指標の一部が見えなくなります。これは、広告主による広告インプレッションの価値評価や入札に影響します。そのため、Apple の ATT ポリシーが適用されると、アプリの発行元は、iOS での Google 広告の収益に重大な影響が発生する可能性があります。iOS の収益化率を向上するには、Google Mobile Ads SDK のバージョン 7.64 にアップグレードし、SKAdNetwork サポートなどの新機能を利用することをお勧めします。アプリの発行元が準備できることの詳細は、こちらをご覧ください


iOS 14 での広告パフォーマンスの測定

Google は、iOS 14 で広告主がキャンペーンの結果を正確に測定できるように、業界と連携して、SKAdNetwork の改善に関するフィードバックを Apple に提供しています。改善が行われるまでの間は、最新バージョンの Google Analytics for Firebase にアップグレードし、SKAdNetwork サポートなどの新機能を利用することをお勧めします。また、すべての iOS のアプリ キャンペーンのパフォーマンスや成果を細かく監視し、必要に応じて目標を達成できるように予算や入札を調整することをお勧めします。アプリの広告主が準備できることの詳細は、こちらをご覧ください。また、一連のガイドは Learn with Google 教育シリーズに掲載されています。

広告主がウェブベースのコンバージョン目標に向けてディスプレイ、動画などのキャンペーンをしている場合、Apple の ATT ポリシーが適用される際に実績が変動する可能性があります。この期間には、推定コンバージョンを拡張してより多くの iOS 14 トラフィックに対応できるようにする予定です。


ATT への準拠の仕組み

Apple のポリシーが適用されると、現在広告目的で ATT に該当する(IDFA などの)情報を利用しているいくつかの Google 製 iOS アプリで、その情報を利用できなくなります。そのため、Apple のガイドに従い、これらのアプリには ATT プロンプトは表示しません。私たちは、App Store のすべての Google 製アプリについて、Apple のガイドを理解してそれに準拠する作業を懸命に進めています。新機能やバグの修正などで Google 製 iOS アプリがアップデートされると、アプリの掲載情報ページで App のプライバシーに関する詳細情報が新しくなるのを確認できます。

Google は、常にユーザーとプライバシーを最優先しています。透明性、選択肢、制御は、ユーザーに対する私たちの献身の根底であり、それは広告でも同様です。Google は、プライバシーと選択肢が確かに尊重され、広告によってサポートされる幅広いコンテンツにアクセスでき、活発でオープンなアプリのエコシステムをこれからも守り続けます。集計ソリューションやオンデバイス ソリューションなどのプライバシー保護技術に注力し続けているのはそのためです。現在、エコシステム パートナーとともにウェブで開発しているプライバシー サンドボックスもその 1 つです。


Reviewed by Eiji Kitamura - Developer Relations Team

試験運用 #3: Exchange-Enforced Frequency Capping

RTB プロトコルが更新され、Exchange-Enforced Frequency Capping 提案の試験運用が可能になっています。この提案は、入札リクエストで提供されるユーザーの識別子によらずに、1 つの Exchange によって提供されるインベントリについて頻度の上限を設けるという重要なユースケースをサポートします。Google RTB プロトコルの BidResponseFrequencyCap メッセージが追加されています。このメッセージは、Google の OpenRTB 実装の Bid オブジェクトの拡張としても利用できます。メッセージの構造は次のようになっています。


  message FrequencyCap {
// An ID that can represent a bidder's use-case for frequency capping; for
// example, it could represent their campaign, ad, line item, etc. It should
// not contain any user-specific information or identifiers.
optional string fcap_id = 1;

// The time units for which frequency caps can be enforced.
enum TimeUnit {
UNKNOWN_TIME_UNIT = 0;
MINUTE = 1;
DAY = 2;
WEEK = 3;
MONTH = 4;
// When INDEFINITE is used, time_range will be ignored. INDEFINITE means
// the frequency cap will be applied for a long period of time, (longer
// than a month) but not necessarily forever.
INDEFINITE = 5;
}

// The unit of time used to specify the time window for which a frequency
// cap applies.
optional TimeUnit time_unit = 2;

// The length of the time window, in units specified by time_unit, for which
// the frequency cap applies. For instance, if time_unit=WEEK and
// time_range=3, then capping is applied for a three week period. If the
// time_unit=INDEFINITE, this will be ignored.
optional int32 time_range = 3 [default = 1];

// The maximum number of impressions allowed to be shown to a user for
// the provided frequency_cap_id within the time window described by
// time_unit and time_range.
optional int32 max_imp = 4;
}


この試験運用に関する追加情報は、提案の中に記載されています。参加する方には、Issue Tracker を使ってフィードバックを提供することをお勧めします。



Reviewed by Eiji Kitamura - Developer Relations Team


 Google Ads API が一般公開版になったことをお知らせします。これにより、以前のパフォーマンスの問題がすべて解消され、本番環境のアプリケーションで安心して Google Ads API を使えるようになります。バッチ処理を誰でも利用できるようになりました。

AdWords API のサポートも継続されます。サポートの終了予定については、あらためてお知らせします。AdWords API と完全に同じ機能を利用できるようにするため、今後のリリースでさらに機能追加を続ける予定です。

さらに詳しく知りたい方へ
まずは、以下のリソースをご覧ください。 ご質問やさらにサポートが必要なことがありましたら、フォーラムまたは [email protected] にご連絡ください。

 


 2020 年 5 月より、Google 広告アカウントにログインすると、コンバージョン アクションごとに新しいコンバージョン カテゴリにアップグレードすることを求められる場合があります。更新されたコンバージョン カテゴリを活用すると、ビジネスにとって重要な意味を持つコンバージョン アクションをさらにきめ細かく分類できます。詳細については、こちらの Google 広告ヘルプセンターの記事をご覧ください。

上記の候補の承認が完了していない場合、2020 年 10 月 15 日より自動的に適用されます。Google Ads API、AdWords API、Google 広告スクリプトのユーザーには、次の変更が適用されます。

Google Ads API をご利用の場合は、ConversionActionCategoryEnum で新しいコンバージョン カテゴリが既に利用できる状態になっています。その他に必要な対応はありません。

AdWords API をご利用の場合は、新しいバージョンの AdWords API はリリースされないため、新しいコンバージョン カテゴリタイプは既存の ConversionTracker.Category 列挙型値に変換されます。変換は、以下のマッピングに基づいて行われます。

新しいコンバージョン カテゴリ ConversionTracker.Category
カートに追加 LEAD
決済手続きの開始 LEAD
購入 PURCHASE
サブスクライブ(有償) PURCHASE
サブスクライブ(無償) SIGNUP
通話リード LEAD
オフライン リード LEAD
リードフォームの送信 LEAD
予約 LEAD
見積もり依頼 LEAD
経路検索 LEAD
離脱のクリック LEAD
連絡先 LEAD
ダウンロード DOWNLOAD
重要なページの表示 PAGE_VIEW
エンゲージメント DEFAULT
来店DEFAULT
店舗での販売PURCHASE
その他 DEFAULT


そのため、AdWords API を使って(レポートやサービス経由で)コンバージョン カテゴリタイプを取得している場合は、依然として上記のマッピングに基づいて既存のコンバージョン カテゴリタイプが返され続けます。これらは、Google 広告の UI で使われる移行された新しいタイプとは異なります。

AdWords API ユーザーは、今後も既存のカテゴリタイプを使ってコンバージョン アクションを作成できます。AdWords API は、機械学習モデルに基づいて作成されたコンバージョンを新しいカテゴリタイプに自動変換します。コンバージョン アクションにカテゴリタイプを設定するコードのサンプルは、AdWords API デベロッパー サイトに掲載されています。

Google 広告スクリプトをお使いの場合は、レポート フィールド ConversionCategoryName を選択またはフィルタする際に、上記の表のマッピングに基づいて AdWords API で使われるものと同じ既存のカテゴリタイプが表示されます。

ご質問やさらにサポートが必要なことがありましたら、フォーラムからご連絡ください。
- Google Ads API チーム、Fei Xiang 

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team


 Google Ads API ベータ版 v2 は、2020 年 10 月 21 日に提供を終了します。それ以降、v2 API へのすべてのリクエストは失敗します。API アクセスに影響がないように、必ず 2020 年 10 月 21 日までに新バージョンに移行してください。

移行に役立つさまざまなリソースを準備しています。

アップグレードの際に疑問に思うことがありましたら、フォーラムまたは [email protected] にご連絡ください。


 


Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team


皆さんは、生活のさまざまな側面で調整に追われていることと思います。そこで、次のような形でサポートします。
  • Google Ads API v1 のサービス終了を延期: Google Ads API v1 のサービス終了を 2020 年 7 月 29 日まで延期します。AdWords API は、今後も本番環境で利用できます。
  • 追加の時間を提供: AdWords API や Google Ads API のコードのアップデートが必要になる新規変更は、追加の時間を提供するか、延期します。
皆さんに新機能をお届けするため、Google Ads API の新バージョンのリリースは継続されます。

どんなカスタマー リソースがありますか
Google 広告は、企業やお客様に以下のリソースを提供しています。
どこでサポートを受けることができますか

Google 広告ヘルプセンターは、API に関連しないサポートに遅れが出ていることを発表しました。これには、デベロッパー トークンの承認や変更も含まれます。

API の質問やサポートが必要なことがありましたら、[email protected] または Google Ads API および AdWords API フォーラムにご連絡ください。

Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team


Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team




Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team


API に関する質問やサポートが必要なことがございましたら、以下からご連絡ください。


Reviewed by Thanet Knack Praneenararat - Ads Developer Relations Team