以提高线上销售额为目标且使用产品 Feed 的效果最大化广告系列(零售)

零售专用效果最大化广告系列 通过提供在 Google 展示广告网络中 更多广告资源

您可能需要制作新的素材资源,例如文字、图片或 视频),以便通过新格式和新平台(例如 例如文字广告、Google 探索、YouTube 插播广告和展示广告。

如果您对哪些细分用户群更有可能 转换后,您现在还可以使用 告知 Google 的受众群体信号

以下是效果最大化广告系列提供的更多增强功能 标准购物广告系列:

  • 基于 Merchant Center Feed 或广告系列条件的语言定位
  • 最终到达网址扩展
  • 如果选择了“实体店光顾”目标,系统会定位到所有实体店
  • 能够为每个客户或每个广告系列设置转化目标

若要使用零售专用效果最大化广告系列,必须关联 Google Ads 账号 与现有 Merchant Center 账号相关联。 与 Merchant Center 关联后,系统可以自动为 广告系列,但覆盖面和效果都会受到限制。

添加素材资源组

添加素材资源组可启用购物广告和动态再营销 渠道,而设置网址扩展功能可启用动态 搜索广告。一般来说,您提供的素材资源越多, 以便定位到更多广告资源

我们建议每个素材资源组分别定位到不同的产品。请注意, 对商家信息的限制 群组。根据最佳实践, 素材资源组中的产品组。例如,产品 A-L 应位于 素材资源组 1 和产品 M-Z 将位于素材资源组 2 中。

如果您想按受众群体定制素材资源讯息,可以创建 每个广告系列可包含多个素材资源组。通过这种方式,您可以制作不同的素材资源 。

查看更多优化措施 小贴士

制作零售效果最大化广告系列

与其他购物广告系列一样,设置 ShoppingSetting 字段的 广告系列。

必填

merchant_id
包含待宣传产品的账号的 Merchant Center ID。

可选

feed_label

用于 Feed 标签的字符串(如 Merchant Center 中所定义)。此字段 如果您需要从特定产品 Merchant Center Feed。 如果未指定,则广告系列会使用 Merchant Center。

如果您之前使用的是已废弃的 sales_country, 国家/地区代码 (XX) 格式,则应改用 feed_label。有关 请参阅 Feed 标签 支持文章。

请注意,系统不会自动在 feed_label 中提交国家/地区代码 使广告能够在相应国家/地区投放;您必须先设置地理位置 地理位置定位

campaign_priority

购物广告系列的优先级。数值更高的广告系列 优先级高于优先级较低的订单项

enable_local

用于为此广告系列在本地店铺所售产品启用广告的选项。

如果存在商品目录,则默认启用本地商品。可以是 使用产品信息组进行过滤。

language

您可以选择多种语言,向特定的一组 客户。

转化目标

您可以替换客户级转化 更新广告系列一级的 转化目标,如 示例:

/** Retrieves the list of customer conversion goals. */
private static List<CustomerConversionGoal> getCustomerConversionGoals(
   
GoogleAdsClient googleAdsClient, long customerId) {
 
String query =
     
"SELECT customer_conversion_goal.category, customer_conversion_goal.origin "
         
+ "FROM customer_conversion_goal";

 
List<CustomerConversionGoal> customerConversionGoals = new ArrayList<>();
 
try (GoogleAdsServiceClient googleAdsServiceClient =
      googleAdsClient
.getLatestVersion().createGoogleAdsServiceClient()) {
   
// The number of conversion goals is typically less than 50, so we use
   
// GoogleAdsService.search instead of search_stream.
   
SearchPagedResponse response =
        googleAdsServiceClient
.search(Long.toString(customerId), query);
   
for (GoogleAdsRow googleAdsRow : response.iterateAll()) {
      customerConversionGoals
.add(googleAdsRow.getCustomerConversionGoal());
   
}
 
}

 
return customerConversionGoals;
}

/** Creates a list of MutateOperations that override customer conversion goals. */
private static List<MutateOperation> createConversionGoalOperations(
   
long customerId, List<CustomerConversionGoal> customerConversionGoals) {
 
List<MutateOperation> mutateOperations = new ArrayList<>();
 
// To override the customer conversion goals, we will change the
 
// biddability of each of the customer conversion goals so that only
 
// the desired conversion goal is biddable in this campaign.
 
for (CustomerConversionGoal customerConversionGoal : customerConversionGoals) {
   
ConversionActionCategory category = customerConversionGoal.getCategory();
   
ConversionOrigin origin = customerConversionGoal.getOrigin();
   
String campaignConversionGoalResourceName =
       
ResourceNames.campaignConversionGoal(
            customerId
, PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID, category, origin);
   
CampaignConversionGoal.Builder campaignConversionGoalBuilder =
       
CampaignConversionGoal.newBuilder().setResourceName(campaignConversionGoalResourceName);
   
// Change the biddability for the campaign conversion goal.
   
// Set biddability to True for the desired (category, origin).
   
// Set biddability to False for all other conversion goals.
   
// Note:
   
//  1- It is assumed that this Conversion Action
   
//     (category=PURCHASE, origin=WEBSITE) exists in this account.
   
//  2- More than one goal can be biddable if desired. This example
   
//     shows only one.
   
if (category == ConversionActionCategory.PURCHASE && origin == ConversionOrigin.WEBSITE) {
      campaignConversionGoalBuilder
.setBiddable(true);
   
} else {
      campaignConversionGoalBuilder
.setBiddable(false);
   
}
   
CampaignConversionGoal campaignConversionGoal = campaignConversionGoalBuilder.build();
   
CampaignConversionGoalOperation campaignConversionGoalOperation =
       
CampaignConversionGoalOperation.newBuilder()
           
.setUpdate(campaignConversionGoal)
           
.setUpdateMask(FieldMasks.allSetFieldsOf(campaignConversionGoal))
           
.build();
    mutateOperations
.add(
       
MutateOperation.newBuilder()
           
.setCampaignConversionGoalOperation(campaignConversionGoalOperation)
           
.build());
 
}
 
return mutateOperations;
}

     
/// <summary>
/// Creates a MutateOperation that links an asset to an asset group.
/// </summary>
/// <param name="fieldType">The field type of the asset to be linked.</param>
/// <param name="assetGroupResourceName">The resource name of the asset group
/// to link the asset to.</param>
/// <param name="assetResourceName">The resource name of the text asset to be
/// linked.</param>
/// <returns>A MutateOperation that links an asset to an asset group.</returns>
private MutateOperation CreateLinkAssetOperation(
   
AssetFieldType fieldType,
   
string assetGroupResourceName,
   
string assetResourceName) => new MutateOperation()
   
{
       
AssetGroupAssetOperation = new AssetGroupAssetOperation()
       
{
           
Create = new AssetGroupAsset()
           
{
               
FieldType = fieldType,
               
AssetGroup = assetGroupResourceName,
               
Asset = assetResourceName
           
}
       
}
   
};

     
private static function getCustomerConversionGoals(
   
GoogleAdsClient $googleAdsClient,
   
int $customerId
): array {
    $customerConversionGoals
= [];
    $googleAdsServiceClient
= $googleAdsClient->getGoogleAdsServiceClient();
   
// Creates a query that retrieves all customer conversion goals.
    $query
= 'SELECT customer_conversion_goal.category, customer_conversion_goal.origin ' .
       
'FROM customer_conversion_goal';
   
// The number of conversion goals is typically less than 50 so we use a search request
   
// instead of search stream.
    $response
=
        $googleAdsServiceClient
->search(SearchGoogleAdsRequest::build($customerId, $query));

   
// Iterates over all rows in all pages and builds the list of conversion goals.
   
foreach ($response->iterateAllElements() as $googleAdsRow) {
       
/** @var GoogleAdsRow $googleAdsRow */
        $customerConversionGoals
[] = [
           
'category' => $googleAdsRow->getCustomerConversionGoal()->getCategory(),
           
'origin' => $googleAdsRow->getCustomerConversionGoal()->getOrigin()
       
];
   
}

   
return $customerConversionGoals;
}

/**
 * Creates a list of MutateOperations that override customer conversion goals.
 *
 * @param int $customerId the customer ID
 * @param array $customerConversionGoals the list of customer conversion goals that will be
 *      overridden
 * @return MutateOperation[] a list of MutateOperations that update campaign conversion goals
 */

private static function createConversionGoalOperations(
   
int $customerId,
    array $customerConversionGoals
): array {
    $operations
= [];

   
// To override the customer conversion goals, we will change the biddability of each of the
   
// customer conversion goals so that only the desired conversion goal is biddable in this
   
// campaign.
   
foreach ($customerConversionGoals as $customerConversionGoal) {
        $campaignConversionGoal
= new CampaignConversionGoal([
           
'resource_name' => ResourceNames::forCampaignConversionGoal(
                $customerId
,
               
self::PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID,
               
ConversionActionCategory::name($customerConversionGoal['category']),
               
ConversionOrigin::name($customerConversionGoal['origin'])
           
)
       
]);
       
// Changes the biddability for the campaign conversion goal.
       
// Sets biddability to true for the desired (category, origin).
       
// Sets biddability to false for all other conversion goals.
       
// Note:
       
//  1- It is assumed that this Conversion Action
       
//     (category=PURCHASE, origin=WEBSITE) exists in this account.
       
//  2- More than one goal can be biddable if desired. This example
       
//     shows only one.
       
if (
            $customerConversionGoal
["category"] === ConversionActionCategory::PURCHASE
           
&& $customerConversionGoal["origin"] === ConversionOrigin::WEBSITE
       
) {
            $campaignConversionGoal
->setBiddable(true);
       
} else {
            $campaignConversionGoal
->setBiddable(false);
       
}

        $operations
[] = new MutateOperation([
           
'campaign_conversion_goal_operation' => new CampaignConversionGoalOperation([
               
'update' => $campaignConversionGoal,
               
// Sets the update mask on the operation. Here the update mask will be a list
               
// of all the fields that were set on the update object.
               
'update_mask' => FieldMasks::allSetFieldsOf($campaignConversionGoal)
           
])
       
]);
   
}

   
return $operations;
}
     
def get_customer_conversion_goals(client, customer_id):
   
"""Retrieves the list of customer conversion goals.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.

    Returns:
        a list of dicts containing the category and origin of customer
        conversion goals.
    """

    ga_service
= client.get_service("GoogleAdsService")
    customer_conversion_goals
= []
    query
= """
            SELECT
              customer_conversion_goal.category,
              customer_conversion_goal.origin
            FROM customer_conversion_goal
            """

   
# The number of conversion goals is typically less than 50 so we use
   
# GoogleAdsService.search instead of search_stream.
    search_request
= client.get_type("SearchGoogleAdsRequest")
    search_request
.customer_id = customer_id
    search_request
.query = query
    results
= ga_service.search(request=search_request)

   
# Iterate over the results and build the list of conversion goals.
   
for row in results:
        customer_conversion_goals
.append(
           
{
               
"category": row.customer_conversion_goal.category,
               
"origin": row.customer_conversion_goal.origin,
           
}
       
)
   
return customer_conversion_goals


def create_conversion_goal_operations(
    client
,
    customer_id
,
    customer_conversion_goals
,
):
   
"""Creates a list of MutateOperations that override customer conversion goals.

    Args:
        client: an initialized GoogleAdsClient instance.
        customer_id: a client customer ID.
        customer_conversion_goals: the list of customer conversion goals that
          will be overridden.

    Returns:
        MutateOperations that update campaign conversion goals.
    """

    campaign_conversion_goal_service
= client.get_service(
       
"CampaignConversionGoalService"
   
)
    operations
= []

   
# To override the customer conversion goals, we will change the
   
# biddability of each of the customer conversion goals so that only
   
# the desired conversion goal is biddable in this campaign.
   
for customer_conversion_goal in customer_conversion_goals:
        mutate_operation
= client.get_type("MutateOperation")
        campaign_conversion_goal
= (
            mutate_operation
.campaign_conversion_goal_operation.update
       
)

        campaign_conversion_goal
.resource_name = (
            campaign_conversion_goal_service
.campaign_conversion_goal_path(
                customer_id
,
                _PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID
,
                customer_conversion_goal
["category"].name,
                customer_conversion_goal
["origin"].name,
           
)
       
)
       
# Change the biddability for the campaign conversion goal.
       
# Set biddability to True for the desired (category, origin).
       
# Set biddability to False for all other conversion goals.
       
# Note:
       
#  1- It is assumed that this Conversion Action
       
#     (category=PURCHASE, origin=WEBSITE) exists in this account.
       
#  2- More than one goal can be biddable if desired. This example
       
#     shows only one.
       
if (
            customer_conversion_goal
["category"]
           
== client.enums.ConversionActionCategoryEnum.PURCHASE
           
and customer_conversion_goal["origin"]
           
== client.enums.ConversionOriginEnum.WEBSITE
       
):
            biddable
= True
       
else:
            biddable
= False
        campaign_conversion_goal
.biddable = biddable
        field_mask
= protobuf_helpers.field_mask(
           
None, campaign_conversion_goal._pb
       
)
        client
.copy_from(
            mutate_operation
.campaign_conversion_goal_operation.update_mask,
            field_mask
,
       
)
        operations
.append(mutate_operation)

   
return operations
     
def _get_customer_conversion_goals(client, customer_id)
  query
= <<~EOD
    SELECT
        customer_conversion_goal
.category,
        customer_conversion_goal
.origin
    FROM customer_conversion_goal
  EOD

  customer_conversion_goals
= []

  ga_service
= client.service.google_ads
 
# The number of conversion goals is typically less than 50 so we use
 
# GoogleAdsService.search instead of search_stream.
  response
= ga_service.search(
      customer_id
: customer_id,
      query
: query,
      page_size
: PAGE_SIZE,
 
)

 
# Iterate over the results and build the list of conversion goals.
  response
.each do |row|
    customer_conversion_goals
<< {
       
"category" => row.customer_conversion_goal.category,
       
"origin" => row.customer_conversion_goal.origin
   
}
 
end

  customer_conversion_goals
end

def create_conversion_goal_operations(client, customer_id, customer_conversion_goals)
  campaign_conversion_goal_service
= client.service.campaign_conversion_goal

  operations
= []

 
# To override the customer conversion goals, we will change the
 
# biddability of each of the customer conversion goals so that only
 
# the desired conversion goal is biddable in this campaign.
  customer_conversion_goals
.each do |customer_conversion_goal|
    operations
<< client.operation.mutate do |m|
        m
.campaign_conversion_goal_operation = client.operation.campaign_conversion_goal do |op|
          op
.update = client.resource.campaign_conversion_goal do |ccg|
              ccg
.resource_name = client.path.campaign_conversion_goal(
                  customer_id
,
                  PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID
,
                  customer_conversion_goal
["category"].to_s,
                  customer_conversion_goal
["origin"].to_s)
             
# Change the biddability for the campaign conversion goal.
             
# Set biddability to True for the desired (category, origin).
             
# Set biddability to False for all other conversion goals.
             
# Note:
             
#  1- It is assumed that this Conversion Action
             
#     (category=PURCHASE, origin=WEBSITE) exists in this account.
             
#  2- More than one goal can be biddable if desired. This example
             
#     shows only one.
              ccg
.biddable = (customer_conversion_goal["category"] == :PURCHASE &&
                  customer_conversion_goal
["origin"] == :WEBSITE)
         
end
          op
.update_mask = Google::Ads::GoogleAds::FieldMaskUtil.all_set_fields_of(op.update)
       
end
   
end
 
end

  operations
end
     
sub get_customer_conversion_goals {
 
my ($api_client, $customer_id) = @_;

 
my $customer_conversion_goals = [];
 
# Create a query that retrieves all customer conversion goals.
 
my $query =
   
"SELECT customer_conversion_goal.category, customer_conversion_goal.origin "
   
. "FROM customer_conversion_goal";
 
# The number of conversion goals is typically less than 50 so we use
 
# GoogleAdsService->search() method instead of search_stream().
 
my $search_response = $api_client->GoogleAdsService()->search({
    customerId
=> $customer_id,
    query      
=> $query
 
});

 
# Iterate over the results and build the list of conversion goals.
 
foreach my $google_ads_row (@{$search_response->{results}}) {
    push
@$customer_conversion_goals,
     
{
      category
=> $google_ads_row->{customerConversionGoal}{category},
      origin  
=> $google_ads_row->{customerConversionGoal}{origin}};
 
}

 
return $customer_conversion_goals;
}

# Creates a list of MutateOperations that override customer conversion goals.
sub create_conversion_goal_operations {
 
my ($customer_id, $customer_conversion_goals) = @_;

 
my $operations = [];
 
# To override the customer conversion goals, we will change the biddability of
 
# each of the customer conversion goals so that only the desired conversion goal
 
# is biddable in this campaign.
 
foreach my $customer_conversion_goal (@$customer_conversion_goals) {
   
my $campaign_conversion_goal =
     
Google::Ads::GoogleAds::V17::Resources::CampaignConversionGoal->new({
        resourceName
=>
         
Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign_conversion_goal(
          $customer_id
,
          PERFORMANCE_MAX_CAMPAIGN_TEMPORARY_ID
,
          $customer_conversion_goal
->{category},
          $customer_conversion_goal
->{origin})});
   
# Change the biddability for the campaign conversion goal.
   
# Set biddability to true for the desired (category, origin).
   
# Set biddability to false for all other conversion goals.
   
# Note:
   
#  1- It is assumed that this Conversion Action
   
#     (category=PURCHASE, origin=WEBSITE) exists in this account.
   
#  2- More than one goal can be biddable if desired. This example
   
#     shows only one.
   
if ( $customer_conversion_goal->{category} eq PURCHASE
     
&& $customer_conversion_goal->{origin} eq WEBSITE)
   
{
      $campaign_conversion_goal
->{biddable} = "true";
   
} else {
      $campaign_conversion_goal
->{biddable} = "false";
   
}

    push
@$operations,
     
Google::Ads::GoogleAds::V17::Services::GoogleAdsService::MutateOperation
     
->new({
        campaignConversionGoalOperation
=>
         
Google::Ads::GoogleAds::V17::Services::CampaignConversionGoalService::CampaignConversionGoalOperation
         
->new({
            update
=> $campaign_conversion_goal,
           
# Set the update mask on the operation. Here the update mask will be
           
# a list of all the fields that were set on the update object.
            updateMask
=> all_set_fields_of($campaign_conversion_goal)})});
 
}

 
return $operations;
}
     

购物报告

使用shopping_performance_view执行以下操作: 检索按产品细分汇总的指标,例如 segments.product_item_id

SELECT
  segments
.product_item_id,
  metrics
.clicks,
  metrics
.cost_micros,
  metrics
.impressions,
  metrics
.conversions,
  metrics
.all_conversions,
  campaign
.advertising_channel_type
FROM shopping_performance_view
WHERE
  campaign
.advertising_channel_type = 'PERFORMANCE_MAX'
 
AND segments.date DURING LAST_30_DAYS
 
AND metrics.clicks > 0
ORDER BY
  metrics
.all_conversions DESC,
  metrics
.conversions DESC,
  metrics
.clicks DESC,
  metrics
.cost_micros DESC,
  metrics
.impressions DESC

使用 asset_group_product_group_view 以检索相应广告系列的点击次数、转化次数和展示次数等指标, 产品信息组

车辆广告

广告客户可以使用车辆广告 通过上传车辆数据 Feed 来宣传其车辆商品目录, Merchant Center,然后使用 具有车辆 Feed 的效果最大化广告系列 管理广告。

要使用 Google Ads API 制作包含车辆 Feed 的效果最大化广告系列,请执行以下操作: 按照制作零售广告系列中的说明操作, 并将广告系列的listing_type设为 VEHICLES