零售专用效果最大化广告系列 通过提供在 Google 展示广告网络中 更多广告资源
您可能需要制作新的素材资源,例如文字、图片或 视频),以便通过新格式和新平台(例如 例如文字广告、Google 探索、YouTube 插播广告和展示广告。
如果您对哪些细分用户群更有可能 转换后,您现在还可以使用 告知 Google 的受众群体信号。
以下是效果最大化广告系列提供的更多增强功能 标准购物广告系列:
- 基于 Merchant Center Feed 或广告系列条件的语言定位
- 最终到达网址扩展
- 如果选择了“实体店光顾”目标,系统会定位到所有实体店
- 能够为每个客户或每个广告系列设置转化目标
将 Merchant Center 账号与 Google Ads 账号相关联
若要使用零售专用效果最大化广告系列,必须关联 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
。