最適化案は、いくつかの方法でキャンペーンを改善できます。
- 関連性の高い新機能を紹介する
- 入札単価、キーワード、広告を改善して予算をさらに効果的に活用
- キャンペーンの全体的なパフォーマンスと効率を向上させる
最適化スコアを上げるには、RecommendationService を使用して最適化案を取得し、必要に応じて適用または拒否します。RecommendationSubscriptionService を使用して、最適化案を自動的に適用するように登録することもできます。
最適化スコア
最適化スコアは、Google 広告アカウントの設定がどの程度最適化されているかを示す推定値で、Customer レベルと Campaign レベルで確認できます。
customer レポートと campaign レポートには、最適化に関連する指標があります。
metrics.optimization_score_urlには、Google 広告の管理画面で関連する最適化案の情報を表示するためのアカウントへのディープリンクが用意されています。metrics.optimization_score_upliftは、関連するすべての最適化案を適用した場合に最適化スコアがどの程度上昇するかを示します。これは、各最適化案の最適化スコアの合計ではなく、利用可能なすべての最適化案を全体として考慮した推定値です。
返された推奨事項をグループ化して並べ替えるには、クエリで segments.recommendation_type を使用して、推奨事項の種類別にこれらの指標を分割します。
おすすめのタイプ
次の表に、Google Ads API でサポートされている最適化案のタイプを示します。これらの最適化案は、取得、適用、拒否できます。Google 広告管理画面に API でサポートされていない推奨事項タイプがある場合は、metrics.optimization_score_url を使用して、ユーザーを Google 広告管理画面の [推奨事項] ページに直接リンクし、それらの推奨事項を確認して対応できます。
完全にサポートされている推奨事項のタイプ
| 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 タグをデプロイする |
CAMPAIGN_SPECIFIC_APP_GOAL |
キャンペーン固有のアプリ コンバージョン目標を追加する |
RAISE_TARGET_CPA_PERFORMANCE_BID_TOO_LOW |
検索キャンペーンの目標アクション単価が低すぎる場合は引き上げる |
LOWER_TARGET_ROAS_PERFORMANCE_BID_TOO_LOW |
検索キャンペーンの目標広告費用対効果が低すぎる場合に引き下げる |
RAISE_BUDGET_PERFORMANCE_TOO_LOW |
検索キャンペーンの予算が低すぎる場合は、予算を引き上げます。v26 以降で使用できます。推奨事項の詳細は Recommendation.raise_budget_performance_too_low_recommendation で返され、ApplyRecommendationOperation.raise_budget_performance_too_low を使用して適用されます。 |
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 フィールドでは、次の推奨事項の指標を使用できます。
impressionsclickscost_microsconversionsall_conversionsvideo_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.V25.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, # 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 "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 が古くなる可能性があります。
推奨事項を取得したら、すぐに実践することをおすすめします。
推奨事項を適用する
アクティブな推奨事項または拒否された推奨事項を適用するには、RecommendationService の ApplyRecommendation メソッドを使用します。
推奨事項のタイプには、必須パラメータまたはオプション パラメータを設定できます。ほとんどの推奨事項には、デフォルトで使用される推奨値が付属しています。
最適化案の自動適用のアカウント設定は、すべての最適化案タイプでサポートされているわけではありません。ただし、Google Ads API で完全にサポートされている最適化案の種類については、同様の動作を実装できます。詳しくは、DetectAndApplyRecommendations コードの例をご覧ください。
ApplyRecommendationOperation の apply_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::V25::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::V25::Resources::Ad->new({ # id => "INSERT_AD_ID_AS_INTEGER_HERE" # }); # my $text_ad_parameters = # Google::Ads::GoogleAds::V25::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::V25::Services::RecommendationService::ApplyRecommendationOperation ->new({ resourceName => $recommendation->{resourceName}}); return $apply_recommendation_operation; }
curl
次の例では、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.V25.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 を使用して、推奨事項を非表示にできます。コード構造は推奨事項の適用と似ていますが、代わりに DismissRecommendationOperation と RecommendationService.DismissRecommendation を使用します。
一括オペレーションとエラー処理
ApplyRecommendation と DismissRecommendation はどちらも、リクエストごとに最大 100 個のオペレーションを受け入れます。1 つのリクエストで複数のオペレーションを送信する場合は、次の動作に注意してください。
- 推奨タイプの混在: デフォルト(
partial_failure = false)では、1 つのリクエスト内のすべてのオペレーションが同じ推奨タイプをターゲットにする必要があります。そうでない場合、API はRecommendationError.DIFFERENT_TYPES_NOT_SUPPORTEDを返します。同じリクエストで異なるタイプの最適化案を適用または拒否するには、リクエストでpartial_failureをtrueに設定して、有効なオペレーションが個別に成功するようにします。 - ライフサイクル エラー: 推奨事項は動的に評価されるため、推奨事項の状態は取得とアクションの間で変更される可能性があります。推奨事項がすでに適用されている、すでに拒否されている、または適用できなくなった場合、API は
RecommendationErrorでRECOMMENDATION_ALREADY_APPLIED、RECOMMENDATION_ALREADY_DISMISSED、またはRECOMMENDATION_INVALIDATEDを返します。
最適化案を自動的に適用
RecommendationSubscriptionService を使用すると、特定のタイプの最適化案を自動的に適用できます。
特定の推奨事項タイプに登録するには、RecommendationSubscription オブジェクトを作成し、type フィールドをサポートされている推奨事項タイプのいずれかに設定し、status フィールドを ENABLED に設定します。
サブスクリプションでサポートされている最適化案の種類
ENHANCED_CPC_OPT_INKEYWORDKEYWORD_MATCH_TYPELOWER_TARGET_ROASMAXIMIZE_CLICKS_OPT_INOPTIMIZE_AD_ROTATIONRAISE_TARGET_CPARESPONSIVE_SEARCH_ADRESPONSIVE_SEARCH_AD_IMPROVE_AD_STRENGTHSEARCH_PARTNERS_OPT_INSET_TARGET_CPASET_TARGET_ROASTARGET_CPA_OPT_INTARGET_ROAS_OPT_INUSE_BROAD_MATCH_KEYWORD
サブスクリプションを取得する
アカウントの最適化案のサブスクリプションに関する情報を取得するには、recommendation_subscription リソースをクエリします。
自動的に適用された変更を表示するには、change_event リソースをクエリし、change_event.client_type を GOOGLE_ADS_RECOMMENDATIONS_SUBSCRIPTION にフィルタします。
キャンペーン作成時に表示される最適化案
RecommendationService.GenerateRecommendationsRequest を使用すると、特定の推奨事項タイプについて、キャンペーンの作成中に推奨事項を生成できます。
GenerateRecommendations は、入力として、お客様 ID、広告チャネルタイプ(SEARCH または PERFORMANCE_MAX のいずれか)、生成する最適化案のタイプのリスト、指定されたタイプに応じたさまざまなデータポイントを受け取ります。指定したデータに基づいて Recommendation オブジェクトのリストを出力します。リクエストされた recommendation_types の推奨事項を生成するのに十分なデータがない場合、またはキャンペーンがすでに推奨ステータスになっている場合、結果セットにはそのタイプの推奨事項は含まれません。リクエストされたレコメンデーション タイプに対してレコメンデーションが返されない場合をアプリケーションで処理できるようにします。
次の表に、GenerateRecommendations がサポートする推奨事項のタイプと、そのタイプの推奨事項を受け取るために指定する必要があるフィールドを示します。ベスト プラクティスとして、リクエストされた推奨事項タイプに関連するすべての情報が収集された後に GenerateRecommendations リクエストを送信します。ネストされたフィールドを含む必須フィールドとオプション フィールドの詳細については、リファレンス ドキュメントをご覧ください。
| RecommendationType | 必須項目 | オプション フィールド |
|---|---|---|
CAMPAIGN_BUDGET |
検索キャンペーンと P-MAX キャンペーンの両方で、次のフィールドが必要です。
|
|
KEYWORD |
|
|
MAXIMIZE_CLICKS_OPT_IN |
|
|
MAXIMIZE_CONVERSIONS_OPT_IN |
|
|
MAXIMIZE_CONVERSION_VALUE_OPT_IN |
|
|
SET_TARGET_CPA |
|
|
SET_TARGET_ROAS |
|
|
SITELINK_ASSET
注: 返される SitelinkAssetRecommendation オブジェクトには空のリストが含まれます。GenerateRecommendations レスポンスに SitelinkAssetRecommendation が含まれている場合は、キャンペーンに少なくとも 1 つのサイトリンク アセットを追加するためのシグナルとして扱うことができます。 |
|
|
TARGET_CPA_OPT_IN |
|
|
TARGET_ROAS_OPT_IN |
|
使用フローの例
たとえば、ユーザーにキャンペーン構築ワークフローを提供する広告代理店で、そのフローの中でユーザーに提案を行いたいとします。GenerateRecommendationsRequest を使用してオンデマンドでレコメンデーションを生成し、それらのレコメンデーションをキャンペーン作成のユーザー インターフェースに組み込むことができます。
使用フローは次のようになります。
ユーザーがアプリケーションにアクセスして P-MAX キャンペーンを作成します。
ユーザーは、キャンペーンの構成フローの一環として、いくつかの初期情報を提供します。たとえば、1 つの
SitelinkAssetを作成するための詳細を指定し、スマート自動入札戦略としてTARGET_SPENDを選択します。次のフィールドを設定する
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 に設定します。
GenerateRecommendationsResponseの推奨事項(この場合はSitelinkAssetRecommendationとMaximizeClicksOptInRecommendation)を取得し、キャンペーンの構成インターフェースに表示してユーザーに提案できます。ユーザーが提案を受け入れた場合、ユーザーがキャンペーン作成フローを完了すると、その提案をキャンペーン作成リクエストに組み込むことができます。