最適化スコアと最適化案

動画: 詳細

最適化案は、次のような方法でキャンペーンを改善できます。

  • 関連性の高い新機能を紹介する
  • 入札単価、キーワード、広告を改善して予算を有効活用する
  • キャンペーンの全体的なパフォーマンスと効率を向上させる

最適化スコアを上げるには、RecommendationService を使用して最適化案を取得し、それに応じて適用または非表示にします。RecommendationSubscriptionService を使用して、最適化案の自動適用をサブスクライブすることもできます。

最適化スコア

動画: 最適化スコア

最適化スコアは、Google 広告アカウントが成果を最大化するためにどの程度最適化されているかを示す推定値で、Customer レベルと Campaign レベルで確認できます。

customer レポートと campaign レポートでは、最適化に関連する次の指標を使用できます。

  1. metrics.optimization_score_url は、Google 広告の管理画面で関連する推奨事項の情報を表示するためのアカウントへのディープリンクを提供します。
  2. metrics.optimization_score_uplift は、関連するすべての最適化案を適用した場合に最適化スコアがどれだけ上昇するかを示します。これは、各最適化案のスコアの上昇の合計ではなく、利用可能なすべての最適化案全体に基づく推定値です。

返されたレコメンデーションをグループ化して並べ替えるには、クエリで segments.recommendation_type を使用して、これらの指標の両方をレコメンデーション タイプ別にセグメント化します。

おすすめのタイプ

完全にサポートされている最適化案の種類

RecommendationType 説明
CAMPAIGN_BUDGET 予算によって制限されているキャンペーンの問題を解決する
KEYWORD 新しいキーワードを追加しましょう
TEXT_AD 広告の候補を追加しましょう
TARGET_CPA_OPT_IN 目標コンバージョン単価で入札する
MAXIMIZE_CONVERSIONS_OPT_IN 「コンバージョン数の最大化」で入札する
MAXIMIZE_CONVERSION_VALUE_OPT_IN 「コンバージョン値の最大化」で入札する
ENHANCED_CPC_OPT_IN 拡張クリック単価で入札する
MAXIMIZE_CLICKS_OPT_IN クリック数の最大化で入札する
OPTIMIZE_AD_ROTATION 広告のローテーションを最適化する
MOVE_UNUSED_BUDGET 未使用から予算制限に変更する
TARGET_ROAS_OPT_IN 目標広告費用対効果に基づく入札
FORECASTING_CAMPAIGN_BUDGET 今後予算による制限を受けると予想されるキャンペーンの問題を解決する
RESPONSIVE_SEARCH_AD 新しいレスポンシブ検索広告を追加する
MARGINAL_ROI_CAMPAIGN_BUDGET キャンペーンの予算を調整して ROI を高める
USE_BROAD_MATCH_KEYWORD 自動入札を使用するコンバージョン重視のキャンペーンでは部分一致を使用する
RESPONSIVE_SEARCH_AD_ASSET 広告にレスポンシブ検索広告のアセットを追加する
RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH レスポンシブ検索広告の広告アセットの充実度を高める
DISPLAY_EXPANSION_OPT_IN ディスプレイの拡張を使用するようにキャンペーンを更新する
SEARCH_PARTNERS_OPT_IN Google 検索パートナーを使ってリーチを拡大する
CUSTOM_AUDIENCE_OPT_IN カスタム オーディエンスを作成する
IMPROVE_DEMAND_GEN_AD_STRENGTH デマンド ジェネレーション キャンペーンの広告アセットの充実度を改善する
UPGRADE_SMART_SHOPPING_CAMPAIGN_TO_PERFORMANCE_MAX スマート ショッピング キャンペーンを P-MAX キャンペーンにアップグレードする
UPGRADE_LOCAL_CAMPAIGN_TO_PERFORMANCE_MAX 以前のローカル キャンペーンを P-MAX キャンペーンにアップグレードする
SHOPPING_MIGRATE_REGULAR_SHOPPING_CAMPAIGN_OFFERS_TO_PERFORMANCE_MAX 通常のショッピング キャンペーンでターゲットに設定されている商品を既存の P-MAX キャンペーンに移行する
MIGRATE_DYNAMIC_SEARCH_ADS_CAMPAIGN_TO_PERFORMANCE_MAX 動的検索広告を P-MAX キャンペーンに移行する
PERFORMANCE_MAX_OPT_IN アカウントで P-MAX キャンペーンを作成する
IMPROVE_PERFORMANCE_MAX_AD_STRENGTH P-MAX キャンペーンのアセット グループの充実度を「非常に高い」に改善する
PERFORMANCE_MAX_FINAL_URL_OPT_IN P-MAX キャンペーンで最終ページ URL の拡張機能をオンにする
RAISE_TARGET_CPA_BID_TOO_LOW 目標アクション単価が低すぎてコンバージョンがほとんど発生していない場合は、目標アクション単価を引き上げます
FORECASTING_SET_TARGET_ROAS トラフィックの増加が予測される季節的なイベントに備えて予算を引き上げ、入札戦略をコンバージョン値の最大化から目標広告費用対効果に変更する
LEAD_FORM_ASSET キャンペーンにリードフォーム アセットを追加する
CALLOUT_ASSET キャンペーン単位または顧客単位でコールアウト アセットを追加する
SITELINK_ASSET キャンペーン単位または顧客単位でサイトリンク アセットを追加する
CALL_ASSET キャンペーン単位または顧客単位で電話番号アセットを追加する
SHOPPING_ADD_AGE_GROUP 年齢層が指定されていないために掲載順位が下がった商品に年齢層属性を追加する
SHOPPING_ADD_COLOR 色が指定されていないために掲載順位が下げられた商品に色を追加する
SHOPPING_ADD_GENDER 性別が指定されていないために掲載順位が下がった商品に性別を追加する
SHOPPING_ADD_GTIN GTIN が指定されていないために掲載順位が下げられた商品に GTIN(国際取引商品番号)を追加する
SHOPPING_ADD_MORE_IDENTIFIERS ID が指定されていないために掲載順位が下げられた商品に ID を追加する
SHOPPING_ADD_SIZE サイズが指定されていないために掲載順位が下がった商品にサイズを追加する
SHOPPING_ADD_PRODUCTS_TO_CAMPAIGN キャンペーンで配信する商品を追加する
SHOPPING_FIX_DISAPPROVED_PRODUCTS 不承認となった商品を修正する
SHOPPING_TARGET_ALL_OFFERS すべての商品が対象となる汎用キャンペーンを作成する
SHOPPING_FIX_SUSPENDED_MERCHANT_CENTER_ACCOUNT Merchant Center アカウントの一時停止に関する問題を解決する
SHOPPING_FIX_MERCHANT_CENTER_ACCOUNT_SUSPENSION_WARNING 一時停止中の Merchant Center アカウントを修正する
DYNAMIC_IMAGE_EXTENSION_OPT_IN アカウントで動的画像表示オプションを有効にする
RAISE_TARGET_CPA 目標コンバージョン単価を引き上げる
LOWER_TARGET_ROAS 目標広告費用対効果の引き下げ
FORECASTING_SET_TARGET_CPA トラフィックの増加が見込まれる季節のイベントに備えて、目標コンバージョン単価が指定されていないキャンペーンに目標コンバージョン単価を設定する
SET_TARGET_CPA 目標アクション単価が指定されていないキャンペーンに目標アクション単価を設定する
SET_TARGET_ROAS 目標広告費用対効果が指定されていないキャンペーンに目標広告費用対効果を設定する
REFRESH_CUSTOMER_MATCH_LIST 過去 90 日間更新されていない顧客リストを更新する
IMPROVE_GOOGLE_TAG_COVERAGE Google タグを他のページにも設定する
KEYWORD_MATCH_TYPE(非推奨) 非推奨。代わりに USE_BROAD_MATCH_KEYWORD を使用してください

詳しくは、こちらの動画をご覧ください

サポートされていない型を処理する

レコメンデーションを取得する

動画: ライブコーディング

Google Ads API の他のほとんどのエンティティと同様に、Recommendation オブジェクトは、Google 広告クエリ言語のクエリで GoogleAdsService.SearchStream を使用して取得されます。

推奨事項のタイプごとに、推奨事項固有のフィールドに詳細が提供されます。たとえば、CAMPAIGN_BUDGET の推奨事項の詳細は campaign_budget_recommendation フィールドにあり、CampaignBudgetRecommendation オブジェクトでラップされています。

最適化案固有のフィールドはすべて、recommendation 共用体フィールドにあります。

最適化案の影響

一部の推奨事項タイプでは、推奨事項の impact フィールドに値が入力されます。RecommendationImpact には、最適化案を適用した結果としてアカウントのパフォーマンスに与える影響の見積もりが含まれます。impact.base_metrics フィールドと impact.potential_metrics フィールドでは、次の推奨事項の指標を使用できます。

  • impressions

  • clicks

  • cost_micros

  • conversions

  • all_conversions

  • video_views

impact フィールドが入力されている場合でも、指標の可用性は、最適化案のタイプやキャンペーン タイプなどの要因によって異なります。一般に、各影響指標を使用する前に、その指標が利用可能かどうかを確認します。

サンプルコード

次のサンプルコードでは、アカウントからタイプ KEYWORD の利用可能なすべての推奨事項と非表示の推奨事項を取得し、その詳細の一部を出力します。

Java

try (GoogleAdsServiceClient googleAdsServiceClient =
        googleAdsClient.getLatestVersion().createGoogleAdsServiceClient();
    RecommendationServiceClient recommendationServiceClient =
        googleAdsClient.getLatestVersion().createRecommendationServiceClient()) {
  // Creates a query that retrieves keyword recommendations.
  String query =
      "SELECT recommendation.resource_name, "
          + "  recommendation.campaign, "
          + "  recommendation.keyword_recommendation "
          + "FROM recommendation "
          + "WHERE recommendation.type = KEYWORD";
  // Constructs the SearchGoogleAdsStreamRequest.
  SearchGoogleAdsStreamRequest request =
      SearchGoogleAdsStreamRequest.newBuilder()
          .setCustomerId(Long.toString(customerId))
          .setQuery(query)
          .build();

  // Issues the search stream request to detect keyword recommendations that exist for the
  // customer account.
  ServerStream<SearchGoogleAdsStreamResponse> stream =
      googleAdsServiceClient.searchStreamCallable().call(request);

  // Creates apply operations for all the recommendations found.
  List<ApplyRecommendationOperation> applyRecommendationOperations = new ArrayList<>();
  for (SearchGoogleAdsStreamResponse response : stream) {
    for (GoogleAdsRow googleAdsRow : response.getResultsList()) {
      Recommendation recommendation = googleAdsRow.getRecommendation();
      System.out.printf(
          "Keyword recommendation '%s' was found for campaign '%s'%n",
          recommendation.getResourceName(), recommendation.getCampaign());
      KeywordInfo keyword = recommendation.getKeywordRecommendation().getKeyword();
      System.out.printf("\tKeyword = '%s'%n", keyword.getText());
      System.out.printf("\tMatch type = '%s'%n", keyword.getMatchType());

      // Creates an ApplyRecommendationOperation that will apply this recommendation, and adds
      // it to the list of operations.
      applyRecommendationOperations.add(buildRecommendationOperation(recommendation));
    }
  }
      

C#

// Get the GoogleAdsServiceClient.
GoogleAdsServiceClient googleAdsService = client.GetService(
    Services.V22.GoogleAdsService);

// Creates a query that retrieves keyword recommendations.
string query = "SELECT recommendation.resource_name, " +
    "recommendation.campaign, recommendation.keyword_recommendation " +
    "FROM recommendation WHERE " +
    $"recommendation.type = KEYWORD";

List<ApplyRecommendationOperation> operations =
    new List<ApplyRecommendationOperation>();

try
{
    // Issue a search request.
    googleAdsService.SearchStream(customerId.ToString(), query,
        delegate (SearchGoogleAdsStreamResponse resp)
        {
            Console.WriteLine($"Found {resp.Results.Count} recommendations.");
            foreach (GoogleAdsRow googleAdsRow in resp.Results)
            {
                Recommendation recommendation = googleAdsRow.Recommendation;
                Console.WriteLine("Keyword recommendation " +
                    $"{recommendation.ResourceName} was found for campaign " +
                    $"{recommendation.Campaign}.");

                if (recommendation.KeywordRecommendation != null)
                {
                    KeywordInfo keyword =
                        recommendation.KeywordRecommendation.Keyword;
                    Console.WriteLine($"Keyword = {keyword.Text}, type = " +
                        "{keyword.MatchType}");
                }

                operations.Add(
                    BuildApplyRecommendationOperation(recommendation.ResourceName)
                );
            }
        }
    );
}
catch (GoogleAdsException e)
{
    Console.WriteLine("Failure:");
    Console.WriteLine($"Message: {e.Message}");
    Console.WriteLine($"Failure: {e.Failure}");
    Console.WriteLine($"Request ID: {e.RequestId}");
    throw;
}
      

PHP

$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
// Creates a query that retrieves keyword recommendations.
$query = 'SELECT recommendation.resource_name, recommendation.campaign, '
    . 'recommendation.keyword_recommendation '
    . 'FROM recommendation '
    . 'WHERE recommendation.type = KEYWORD ';
// Issues a search request to detect keyword recommendations that exist for the
// customer account.
$response =
    $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query));

$operations = [];
// Iterates over all rows in all pages and prints the requested field values for
// the recommendation in each row.
foreach ($response->iterateAllElements() as $googleAdsRow) {
    /** @var GoogleAdsRow $googleAdsRow */
    $recommendation = $googleAdsRow->getRecommendation();
    printf(
        "Keyword recommendation with resource name '%s' was found for campaign "
        . "with resource name '%s':%s",
        $recommendation->getResourceName(),
        $recommendation->getCampaign(),
        PHP_EOL
    );
    if (!is_null($recommendation->getKeywordRecommendation())) {
        $keyword = $recommendation->getKeywordRecommendation()->getKeyword();
        printf(
            "\tKeyword = '%s'%s\ttype = '%s'%s",
            $keyword->getText(),
            PHP_EOL,
            KeywordMatchType::name($keyword->getMatchType()),
            PHP_EOL
        );
    }
    // Creates an ApplyRecommendationOperation that will be used to apply this
    // recommendation, and adds it to the list of operations.
    $operations[] = self::buildRecommendationOperation($recommendation->getResourceName());
}
      

Python

googleads_service = client.get_service("GoogleAdsService")
query: str = """
    SELECT
      recommendation.campaign,
      recommendation.keyword_recommendation
    FROM recommendation
    WHERE
      recommendation.type = KEYWORD"""

# Detects keyword recommendations that exist for the customer account.
response: Iterable[GoogleAdsRow] = googleads_service.search(
    customer_id=customer_id, query=query
)

operations: List[ApplyRecommendationOperation] = []
for row in response:
    recommendation = row.recommendation
    print(
        f"Keyword recommendation ('{recommendation.resource_name}') "
        f"was found for campaign '{recommendation.campaign}."
    )

    keyword = recommendation.keyword_recommendation.keyword
    print(
        f"\tKeyword = '{keyword.text}'\n" f"\tType = '{keyword.match_type}'"
    )

    # Create an ApplyRecommendationOperation that will be used to apply
    # this recommendation, and add it to the list of operations.
    operations.append(
        build_recommendation_operation(client, recommendation.resource_name)
    )
      

Ruby

query = <<~QUERY
  SELECT recommendation.resource_name, recommendation.campaign,
      recommendation.keyword_recommendation
  FROM recommendation
  WHERE recommendation.type = KEYWORD
QUERY

google_ads_service = client.service.google_ads

response = google_ads_service.search(
  customer_id: customer_id,
  query: query,
)

operations = response.each do |row|
  recommendation = row.recommendation

  puts "Keyword recommendation ('#{recommendation.resource_name}') was found for "\
    "campaign '#{recommendation.campaign}'."

  if recommendation.keyword_recommendation
    keyword = recommendation.keyword_recommendation.keyword
    puts "\tKeyword = '#{keyword.text}'"
    puts "\ttype = '#{keyword.match_type}'"
  end

  build_recommendation_operation(client, recommendation.resource_name)
end
      

Perl

# Create the search query.
my $search_query =
  "SELECT recommendation.resource_name, " .
  "recommendation.campaign, recommendation.keyword_recommendation " .
  "FROM recommendation " .
  "WHERE recommendation.type = KEYWORD";

# Get the GoogleAdsService.
my $google_ads_service = $api_client->GoogleAdsService();

my $search_stream_handler =
  Google::Ads::GoogleAds::Utils::SearchStreamHandler->new({
    service => $google_ads_service,
    request => {
      customerId => $customer_id,
      query      => $search_query
    }});

# Create apply operations for all the recommendations found.
my $apply_recommendation_operations = ();
$search_stream_handler->process_contents(
  sub {
    my $google_ads_row = shift;
    my $recommendation = $google_ads_row->{recommendation};
    printf "Keyword recommendation '%s' was found for campaign '%s'.\n",
      $recommendation->{resourceName}, $recommendation->{campaign};
    my $keyword = $recommendation->{keywordRecommendation}{keyword};
    printf "\tKeyword = '%s'\n",    $keyword->{text};
    printf "\tMatch type = '%s'\n", $keyword->{matchType};
    # Creates an ApplyRecommendationOperation that will apply this recommendation, and adds
    # it to the list of operations.
    push @$apply_recommendation_operations,
      build_recommendation_operation($recommendation);
  });
      

curl

# Gets keyword recommendations.
#
# Variables:
#   API_VERSION,
#   CUSTOMER_ID,
#   DEVELOPER_TOKEN,
#   MANAGER_CUSTOMER_ID,
#   OAUTH2_ACCESS_TOKEN:
#     See https://developers.google.com/google-ads/api/rest/auth#request_headers
#     for details.
curl -f --request POST \
"https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/googleAds:search" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data @- <<EOF
{
"query": "
  SELECT
    recommendation.campaign,
    recommendation.keyword_recommendation
  FROM recommendation
  WHERE
    recommendation.type = KEYWORD
"
}
EOF
      

対処

取得した推奨事項は、適用または拒否できます。

最適化案のタイプによっては、毎日変更されるものがあります。場合によっては、1 日に複数回変更されます。そのような場合、最適化案が取得された後に、最適化案オブジェクトの resource_name が古くなることがあります。

取得直後に最適化案を適用することをおすすめします。

推奨事項を適用する

動画: 最適化案を適用する

RecommendationServiceApplyRecommendation メソッドを使用して、有効な最適化案または却下された最適化案を適用できます。

推奨事項のタイプには、必須または省略可能なパラメータを設定できます。ほとんどの推奨事項には、デフォルトで使用される推奨値が付属しています。

最適化案の自動適用用にアカウントを設定することは、すべての最適化案の種類でサポートされているわけではありません。ただし、Google Ads API で完全にサポートされている最適化案のタイプについては、同様の動作を実装できます。詳細については、DetectAndApplyRecommendations コード例をご覧ください。

ApplyRecommendationOperationapply_parameters 共用体フィールドを使用して、特定のパラメータ値で推奨事項を適用します。適切な推奨事項タイプごとに独自のフィールドがあります。apply_parameters フィールドにリストされていない推奨事項タイプでは、これらのパラメータ値は使用されません。

サンプルコード

次のコードは、ApplyRecommendationOperation をビルドする方法と、推奨値を独自の値に置き換える場合に推奨値をオーバーライドする方法を示しています。

Java

/** Creates and returns an ApplyRecommendationOperation to apply the given recommendation. */
private ApplyRecommendationOperation buildRecommendationOperation(Recommendation recommendation) {
  // If you have a recommendation ID instead of a resource name, you can create a resource name
  // like this:
  // String resourceName = ResourceNames.recommendation(customerId, recommendationId);

  // Creates a builder to construct the operation.
  Builder operationBuilder = ApplyRecommendationOperation.newBuilder();

  // Each recommendation type has optional parameters to override the recommended values. Below is
  // an example showing how to override a recommended ad when a TextAdRecommendation is applied.
  // operationBuilder.getTextAdBuilder().getAdBuilder().setResourceName("INSERT_AD_RESOURCE_NAME");

  // Sets the operation's resource name to the resource name of the recommendation to apply.
  operationBuilder.setResourceName(recommendation.getResourceName());
  return operationBuilder.build();
}
      

C#

private ApplyRecommendationOperation BuildApplyRecommendationOperation(
    string recommendationResourceName
)
{
    // If you have a recommendation_id instead of the resource_name you can create a
    // resource name from it like this:
    // string recommendationResourceName =
    //    ResourceNames.Recommendation(customerId, recommendationId)

    // Each recommendation type has optional parameters to override the recommended values.
    // This is an example to override a recommended ad when a TextAdRecommendation is
    // applied.
    // For details, please read
    // https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation.
    /*
    Ad overridingAd = new Ad()
    {
        Id = "INSERT_AD_ID_AS_LONG_HERE"
    };
    applyRecommendationOperation.TextAd = new TextAdParameters()
    {
        Ad = overridingAd
    };
    */

    ApplyRecommendationOperation applyRecommendationOperation =
    new ApplyRecommendationOperation()
    {
        ResourceName = recommendationResourceName
    };

    return applyRecommendationOperation;
}
      

PHP

private static function buildRecommendationOperation(
    string $recommendationResourceName
): ApplyRecommendationOperation {
    // If you have a recommendation_id instead of the resource name, you can create a resource
    // name from it like this:
    /*
    $recommendationResourceName =
        ResourceNames::forRecommendation($customerId, $recommendationId);
    */

    // Each recommendation type has optional parameters to override the recommended values.
    // This is an example to override a recommended ad when a TextAdRecommendation is applied.
    // For details, please read
    // https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation.
    /*
    $overridingAd = new Ad([
        'id' => 'INSERT_AD_ID_AS_INTEGER_HERE'
    ]);
    $applyRecommendationOperation->setTextAd(new TextAdParameters(['ad' => $overridingAd]));
    */

    // Issues a mutate request to apply the recommendation.
    $applyRecommendationOperation = new ApplyRecommendationOperation();
    $applyRecommendationOperation->setResourceName($recommendationResourceName);
    return $applyRecommendationOperation;
}
      

Python

def build_recommendation_operation(
    client: GoogleAdsClient, recommendation: str
) -> ApplyRecommendationOperation:
    """Creates a ApplyRecommendationOperation to apply the given recommendation.

    Args:
        client: an initialized GoogleAdsClient instance.
        recommendation: a resource name for the recommendation to be applied.
    """
    # If you have a recommendation ID instead of a resource name, you can create
    # a resource name like this:
    #
    # googleads_service = client.get_service("GoogleAdsService")
    # resource_name = googleads_service.recommendation_path(
    #   customer_id, recommendation.id
    # )

    operation: ApplyRecommendationOperation = client.get_type(
        "ApplyRecommendationOperation"
    )

    # Each recommendation type has optional parameters to override the
    # recommended values. Below is an example showing how to override a
    # recommended ad when a TextAdRecommendation is applied.
    #
    # operation.text_ad.ad.resource_name = "INSERT_AD_RESOURCE_NAME"
    #
    # For more details, see:
    # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation#apply_parameters

    operation.resource_name = recommendation
    return operation
      

Ruby

def build_recommendation_operation(client, recommendation)
  # If you have a recommendation_id instead of the resource_name
  # you can create a resource name from it like this:
  # recommendation_resource =
  #    client.path.recommendation(customer_id, recommendation_id)

  operations = client.operation.apply_recommendation
  operations.resource_name = recommendation_resource

  # Each recommendation type has optional parameters to override the recommended
  # values. This is an example to override a recommended ad when a
  # TextAdRecommendation is applied.
  #
  # text_ad_parameters = client.resource.text_ad_parameters do |tap|
  #   tap.ad = client.resource.ad do |ad|
  #     ad.id = "INSERT_AD_ID_AS_INTEGER_HERE"
  #   end
  # end
  # operation.text_ad = text_ad_parameters
  #
  # For more details, see:
  # https://developers.google.com/google-ads/api/reference/rpc/latest/ApplyRecommendationOperation#apply_parameters

  return operation
end
      

Perl

sub build_recommendation_operation {
  my ($recommendation) = @_;

  # If you have a recommendation ID instead of a resource name, you can create a resource
  # name like this:
  # my $recommendation_resource_name =
  #   Google::Ads::GoogleAds::V22::Utils::ResourceNames::recommendation(
  #   $customer_id, $recommendation_id);

  # Each recommendation type has optional parameters to override the recommended values.
  # Below is an example showing how to override a recommended ad when a TextAdRecommendation
  # is applied.
  # my $overriding_ad = Google::Ads::GoogleAds::V22::Resources::Ad->new({
  #   id => "INSERT_AD_ID_AS_INTEGER_HERE"
  # });
  # my $text_ad_parameters =
  #   Google::Ads::GoogleAds::V22::Services::RecommendationService::TextAdParameters
  #   ->new({ad => $overriding_ad});
  # $apply_recommendation_operation->{textAd} = $text_ad_parameters;

  # Create an apply recommendation operation.
  my $apply_recommendation_operation =
    Google::Ads::GoogleAds::V22::Services::RecommendationService::ApplyRecommendationOperation
    ->new({
      resourceName => $recommendation->{resourceName}});

  return $apply_recommendation_operation;
}
      

次の例では、ApplyRecommendation を呼び出し、前のコードで作成した推奨事項の適用オペレーションを送信します。

Java

// Issues a mutate request to apply the recommendations.
ApplyRecommendationResponse applyRecommendationsResponse =
    recommendationServiceClient.applyRecommendation(
        Long.toString(customerId), applyRecommendationOperations);
for (ApplyRecommendationResult applyRecommendationResult :
    applyRecommendationsResponse.getResultsList()) {
  System.out.printf(
      "Applied recommendation with resource name: '%s'.%n",
      applyRecommendationResult.getResourceName());
}
      

C#

private void ApplyRecommendation(GoogleAdsClient client, long customerId,
    List<ApplyRecommendationOperation> operations)
{
    // Get the RecommendationServiceClient.
    RecommendationServiceClient recommendationService = client.GetService(
        Services.V22.RecommendationService);

    ApplyRecommendationRequest applyRecommendationRequest = new ApplyRecommendationRequest()
    {
        CustomerId = customerId.ToString(),
    };

    applyRecommendationRequest.Operations.AddRange(operations);

    ApplyRecommendationResponse response =
        recommendationService.ApplyRecommendation(applyRecommendationRequest);
    foreach (ApplyRecommendationResult result in response.Results)
    {
        Console.WriteLine("Applied a recommendation with resource name: " +
            result.ResourceName);
    }
}
      

PHP

private static function applyRecommendations(
    GoogleAdsClient $googleAdsClient,
    int $customerId,
    array $operations
): void {
    // Issues a mutate request to apply the recommendations.
    $recommendationServiceClient = $googleAdsClient->getRecommendationServiceClient();
    $response = $recommendationServiceClient->applyRecommendation(
        ApplyRecommendationRequest::build($customerId, $operations)
    );
    foreach ($response->getResults() as $appliedRecommendation) {
        /** @var Recommendation $appliedRecommendation */
        printf(
            "Applied a recommendation with resource name: '%s'.%s",
            $appliedRecommendation->getResourceName(),
            PHP_EOL
        );
    }
}
      

Python

def apply_recommendations(
    client: GoogleAdsClient,
    customer_id: str,
    operations: List[ApplyRecommendationOperation],
) -> None:
    """Applies a batch of recommendations.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.
        operations: a list of ApplyRecommendationOperation messages.
    """
    # Issues a mutate request to apply the recommendations.
    recommendation_service = client.get_service("RecommendationService")
    response: ApplyRecommendationResult = (
        recommendation_service.apply_recommendation(
            customer_id=customer_id, operations=operations
        )
    )

    for result in response.results:
        print(
            "Applied a recommendation with resource name: "
            f"'{result.resource_name}'."
        )
      

Ruby

def apply_recommendations(client, customer_id, operations)
  # Issues a mutate request to apply the recommendation.
  recommendation_service = client.service.recommendation

  response = recommendation_service.apply_recommendation(
    customer_id: customer_id,
    operations: [operations],
  )

  response.results.each do |applied_recommendation|
    puts "Applied recommendation with resource name: '#{applied_recommendation.resource_name}'."
  end
end
      

Perl

# Issue a mutate request to apply the recommendations.
my $apply_recommendation_response =
  $api_client->RecommendationService()->apply({
    customerId => $customer_id,
    operations => $apply_recommendation_operations
  });

foreach my $result (@{$apply_recommendation_response->{results}}) {
  printf "Applied recommendation with resource name: '%s'.\n",
    $result->{resourceName};
}
      

curl

# Applies a recommendation.
#
# Variables:
#   API_VERSION,
#   CUSTOMER_ID,
#   DEVELOPER_TOKEN,
#   MANAGER_CUSTOMER_ID,
#   OAUTH2_ACCESS_TOKEN:
#     See https://developers.google.com/google-ads/api/rest/auth#request_headers
#     for details.
#
#   RECOMMENDATION_RESOURCE_NAME: The resource name of the recommendation to
#     apply, from the previous request.
curl -f --request POST \
"https://googleads.googleapis.com/v${API_VERSION}/customers/${CUSTOMER_ID}/recommendations:apply" \
--header "Content-Type: application/json" \
--header "developer-token: ${DEVELOPER_TOKEN}" \
--header "login-customer-id: ${MANAGER_CUSTOMER_ID}" \
--header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
--data @- <<EOF
{
  "operations": [
    {
      "resourceName": "${RECOMMENDATION_RESOURCE_NAME}"
    }
  ]
}
EOF
      

詳しくは、こちらの動画をご覧ください

パラメータを適用する

一括

エラー

テスト

最適化案を非表示にする

動画: 推奨事項を閉じる

推奨事項は RecommendationService で閉じることができます。コード構造は推奨事項の適用と似ていますが、代わりに DismissRecommendationOperationRecommendationService.DismissRecommendation を使用します。

詳しくは、こちらの動画をご覧ください

一括

エラー

テスト

最適化案を自動的に適用

RecommendationSubscriptionService を使用すると、特定の種類の最適化案を自動的に適用できます。

特定の最適化案タイプをサブスクライブするには、RecommendationSubscription オブジェクトを作成し、type フィールドをサポートされている最適化案のタイプのいずれかに設定し、status フィールドを ENABLED に設定します。

サブスクリプションでサポートされている最適化案のタイプ

  • ENHANCED_CPC_OPT_IN
  • KEYWORD
  • KEYWORD_MATCH_TYPE
  • LOWER_TARGET_ROAS
  • MAXIMIZE_CLICKS_OPT_IN
  • OPTIMIZE_AD_ROTATION
  • RAISE_TARGET_CPA
  • RESPONSIVE_SEARCH_AD
  • RESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTH
  • SEARCH_PARTNERS_OPT_IN
  • SEARCH_PLUS_OPT_IN
  • SET_TARGET_CPA
  • SET_TARGET_ROAS
  • TARGET_CPA_OPT_IN
  • TARGET_ROAS_OPT_IN
  • USE_BROAD_MATCH_KEYWORD

サブスクリプションを取得する

アカウントの推奨事項サブスクリプションに関する情報を取得するには、recommendation_subscription リソースにクエリを実行します。

自動的に適用された変更を表示するには、change_event リソースをクエリし、change_event.client_typeGOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION にフィルタします。

キャンペーンの作成時に表示される最適化案

RecommendationService.GenerateRecommendationsRequest を使用すると、特定の推奨事項タイプについて、キャンペーンの作成中に推奨事項を生成できます。

GenerateRecommendations は、顧客 ID、広告チャネル タイプ(SEARCH または PERFORMANCE_MAX のいずれか)、生成するおすすめのタイプのリスト、指定されたタイプに依存するさまざまなデータポイントを入力として受け取ります。指定したデータに基づいて Recommendation オブジェクトのリストが出力されます。リクエストされた recommendation_types の推奨事項を生成するのに十分なデータがない場合、またはキャンペーンがすでに推奨される状態になっている場合、結果セットにはそのタイプの推奨事項は含まれません。リクエストされた推奨事項のタイプに対して推奨事項が返されない場合をアプリケーションが処理するようにします。

次の表に、GenerateRecommendations がサポートする推奨事項のタイプと、そのタイプの推奨事項を受け取るために指定する必要があるフィールドを示します。おすすめの方法として、リクエストされた推奨事項のタイプに関連するすべての情報が収集されたGenerateRecommendations リクエストを送信します。ネストされたフィールドを含む必須フィールドと省略可能なフィールドの詳細については、リファレンス ドキュメントをご覧ください。

RecommendationType 必須項目 省略可能項目
CAMPAIGN_BUDGET 検索キャンペーンと P-MAX キャンペーンの両方で、次のフィールドが必要です。
  • asset_group_info
  • final_url
  • bidding_strategy_type
検索キャンペーンの場合のみ、次のフィールドも必須です。
  • country_code
  • language_code
  • positive_location_id または negative_location_id
  • ad_group_info.keywords
  • 入札戦略が TARGET_IMPRESSION_SHARE に設定されている場合は bidding_info.
    bidding_strategy_target_info.
    target_impression_share_info
  • budget_info
  • P-MAX キャンペーンの場合は、merchant_center_account_id フィールドに値を指定して、標準の P-MAX キャンペーンではなく、小売業向けの P-MAX キャンペーンの最適化案を生成するように RecommendationsService に指示します。
KEYWORD
  • seed_info
  • ad_group_info
MAXIMIZE_CLICKS_OPT_IN
  • conversion_tracking_status
  • bidding_info
MAXIMIZE_CONVERSIONS_OPT_IN
  • conversion_tracking_status
  • bidding_info
MAXIMIZE_CONVERSION_VALUE_OPT_IN
  • conversion_tracking_status
  • bidding_info
SET_TARGET_CPA
  • conversion_tracking_status
  • bidding_info
SET_TARGET_ROAS
  • conversion_tracking_status
  • bidding_info
SITELINK_ASSET
注: 返される SitelinkAssetRecommendation オブジェクトには空のリストが含まれます。GenerateRecommendations レスポンスに SitelinkAssetRecommendation が含まれている場合、少なくとも 1 つのサイトリンク アセットをキャンペーンに追加するシグナルとして扱うことができます。
  • campaign_sitelink_count
TARGET_CPA_OPT_IN
  • conversion_tracking_status
  • bidding_info
TARGET_ROAS_OPT_IN
  • conversion_tracking_status
  • bidding_info

使用フローの例

たとえば、広告代理店がユーザーにキャンペーン構築ワークフローを提供しており、そのフローの中でユーザーに提案を行いたいとします。GenerateRecommendationsRequest を使用すると、オンデマンドで最適化案を生成し、その最適化案をキャンペーン作成のユーザー インターフェースに組み込むことができます。

使用フローは次のようになります。

  1. ユーザーがアプリケーションにアクセスして、P-MAX キャンペーンを作成します。

  2. ユーザーは、キャンペーン作成フローの一環として初期情報を提供します。たとえば、単一の SitelinkAsset を作成するための詳細を指定し、スマート自動入札戦略として TARGET_SPEND を選択します。

  3. 次のフィールドを設定する GenerateRecommendationsRequest を送信します。

    • campaign_sitelink_count: 1 に設定します。これは、進行中のキャンペーンのサイトリンク アセットの数です。

    • bidding_info: ネストされた bidding_strategy_type フィールドを TARGET_SPEND に設定します。

    • conversion_tracking_status: このお客様の ConversionTrackingStatus に設定します。このフィールドを取得する方法については、コンバージョン管理のスタートガイドをご覧ください。

    • recommendation_types: [SITELINK_ASSET, MAXIMIZE_CLICKS_OPT_IN] に設定します

    • advertising_channel_type: PERFORMANCE_MAX に設定します

    • customer_id: キャンペーンを作成するお客様の ID に設定します。

  4. GenerateRecommendationsResponse の推奨事項(この場合は SitelinkAssetRecommendationMaximizeClicksOptInRecommendation)を取得し、キャンペーン作成インターフェース内に表示してユーザーに提案できます。ユーザーが提案を承認すると、ユーザーがキャンペーン作成フローを完了した時点で、その提案をキャンペーン作成リクエストに組み込むことができます。