再营销和受众群体定位

利用再营销,可以在以前访问过您的网站、使用过您的移动应用或列在您的 CRM 数据库中的用户访问 Google 上的其他网站或进行搜索时,向他们展示相关的广告。再营销中所使用的用户列表也可用于其他类型的受众群体定位,如目标客户匹配

本指南包括:

不能使用有关用户的敏感信息构建再营销列表。在设置再营销广告系列并在网站或应用中放置再营销代码前,请查看针对用户兴趣和地理位置投放广告的政策

UserList 中的受众群体类型

您可以使用 UserList 进行再营销并定位特定受众群体,可以从不同的受众群体类型构造此列表:

您网站的访问者

最简单的受众群体列表类型就是您网站的访问者。而如下所述的定位策略更为先进,例如,可以向最近访问您网站特定页面或页面组合的用户投放量身定制的广告。

所有的 AdWords 帐号都会在开立帐号时自动创建一段帐号级别的再营销代码。即使您还没有启动再营销,这一代码仍存在。第一步是使用 CustomerService,获取您帐号的帐号级再营销代码:

// Get the customer service.
CustomerServiceInterface customerService =
    adWordsServices.get(session, CustomerServiceInterface.class);

// Retrieve the Customer object for the session. Make sure
// that the session's clientCustomerId is set to your account's
// ID.
Customer customer = customerService.getCustomers()[0];

// Print the account level remarketing tag.
System.out.printf("Customer ID %s has remarketing tag:%n%s%n",
    customer.getCustomerId(),
    customer.getRemarketingSettings().getSnippet());

下一步是对您网站的所有网页安装帐号级再营销代码。在此篇 AdWords 帮助中心文章中详细了解如何将再营销代码添加到您的网站或移动应用。

也可以在 Chrome 中使用 Google Tag Assistant 来对代码安装进行验证。

接下来,您需要创建一个用户列表,加入触发再营销代码的用户。使用 AdwordsUserListService 创建和管理用户列表。不同类型的用户列表有不同的特点。如下所示,要创建访问过您网站任意页面的所有用户的列表,可以使用 ExpressionRuleUserList,其中所访问页面的网址包括您网站的域名。有关使用基于规则的再营销列表的详情,请参阅基于规则的再营销

// Get the user list service.
AdwordsUserListServiceInterface userListService =
    adWordsServices.get(session, AdwordsUserListServiceInterface.class);

// Use built-in parameter to create domain URL rule.
StringKey urlKey = new StringKey("url__");

StringRuleItem urlStringRuleItem = new StringRuleItem();
urlStringRuleItem.setKey(urlKey);
urlStringRuleItem.setOp(StringRuleItemStringOperator.CONTAINS);
urlStringRuleItem.setValue("example.com");

RuleItem urlRuleItem = new RuleItem();
urlRuleItem.setStringRuleItem(urlStringRuleItem);

RuleItemGroup ruleItemGroup = new RuleItemGroup();
ruleItemGroup.setItems(new RuleItem[] {urlRuleItem});

Rule rule = new Rule();
rule.setGroups(new RuleItemGroup[] {ruleItemGroup});

// Create the user list.
ExpressionRuleUserList expressionUserList = new ExpressionRuleUserList();
expressionUserList.setName("All visitors to example.com");
expressionUserList.setDescription("Any visitor to any page of example.com");
expressionUserList.setRule(rule);
expressionUserList.setMembershipLifeSpan(365L);
expressionUserList.setStatus(UserListMembershipStatus.OPEN);

// Optional: To include past users in the user list, set the
// prepopulationStatus to REQUESTED.
expressionUserList.setPrepopulationStatus(
    RuleBasedUserListPrepopulationStatus.REQUESTED);

// Create and submit the operation.
UserListOperation operation = new UserListOperation();
operation.setOperator(Operator.ADD);
operation.setOperand(expressionUserList);

UserListReturnValue result =
    userListService.mutate(new UserListOperation[] {operation});
Long userListId = result.getValue(0).getId();

membershipLifeSpanstatus 是用户列表的两个重要属性。前者可以让您定义用户属于该列表的时间段(以天为单位)。后者可以定义该列表是否接受新用户。

最后一步是将广告定位到您用户列表中的成员。这个过程类似于 API 中其他类型的定位条件。下面的代码演示如何使用 CriterionUserList 将广告组中的广告定位到用户列表:

// Get the ad group criterion service.
AdGroupCriterionServiceInterface adGroupCriterionService =
    adWordsServices.get(session, AdGroupCriterionServiceInterface.class);

// Create user list criterion.
CriterionUserList userListCriterion = new CriterionUserList();
userListCriterion.setUserListId(userListId);

// Create biddable ad group criterion.
BiddableAdGroupCriterion biddableCriterion = new BiddableAdGroupCriterion();
biddableCriterion.setAdGroupId(adGroupId);
biddableCriterion.setCriterion(userListCriterion);

// Create operation.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.setOperand(biddableCriterion);
operation.setOperator(Operator.ADD);

AdGroupCriterionOperation[] operations =
    new AdGroupCriterionOperation[] {operation};

// Apply the criterion.
AdGroupCriterionReturnValue result = adGroupCriterionService.mutate(operations);

与其他类型的条件类似,您可以为 BiddableAdGroupCriterion 对象指定其他属性,例如出价替换。

如果您要从广告组级别的用户列表条件切换到广告系列级别,则必须先从该广告系列下的每个已启用或已暂停的广告组中移除现有的用户列表条件:

// Create selector for all user list criteria.
SelectorBuilder builder = new SelectorBuilder();
Selector selector = builder
    .fields(AdGroupCriterionField.Id)
    .equals(AdGroupCriterionField.AdGroupId, adGroupId)
    .equals(AdGroupCriterionField.CriteriaType, "USER_LIST")
    .build();

AdGroupCriterionServiceInterface criterionService =
    new AdWordsServices().get(session, AdGroupCriterionServiceInterface.class);

AdGroupCriterionPage page = criterionService.get(selector);

List<AdGroupCriterionOperation> operations =
    new ArrayList<AdGroupCriterionOperation>();

// Create remove operation for each user list.
for(AdGroupCriterion criterion : page.getEntries()){
  Long criterionId = criterion.getCriterion().getId();

  // Create user list criterion and specify the criterion ID to remove.
  CriterionUserList userListCriterion = new CriterionUserList();
  userListCriterion.setId(criterionId);

  // Create biddable ad group criterion.
  BiddableAdGroupCriterion biddableCriterion = new BiddableAdGroupCriterion();
  biddableCriterion.setAdGroupId(adGroupId);
  biddableCriterion.setCriterion(userListCriterion);

  // Create remove operation.
  AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
  operation.setOperand(biddableCriterion);
  operation.setOperator(Operator.REMOVE);

  operations.add(operation);
}

// Remove the criteria.
AdGroupCriterionReturnValue result =
    adGroupCriterionService.mutate(
    operations.toArray(new AdGroupCriterionOperation[operations.size()]));

切换到广告组级别用户列表时,还必须移除现有的广告系列级别的用户列表条件,该过程与上述示例相同。请注意,criterionId 不是该条件的基础用户列表 ID。

将广告系列中的广告定位到用户列表的方式类似:

// Get the campaign criterion service.
CampaignCriterionServiceInterface campaignCriterionService =
    adWordsServices.get(session, CampaignCriterionServiceInterface.class);

// Create user list criterion.
CriterionUserList userListCriterion = new CriterionUserList();
userListCriterion.setUserListId(userListId);

// Create campaign criterion.
CampaignCriterion campaignCriterion = new CampaignCriterion();
campaignCriterion.setCampaignId(campaignId);
campaignCriterion.setCriterion(userListCriterion);

// Create operation.
CampaignCriterionOperation operation = new CampaignCriterionOperation();
operation.setOperand(campaignCriterion);
operation.setOperator(Operator.ADD);

CampaignCriterionOperation[] operations =
    new CampaignCriterionOperation[] {operation};

// Apply the criterion.
CampaignCriterionReturnValue result = campaignCriterionService.mutate(operations);

特定网页的访问者

可以使用 ExpressionRuleUserList,定位访问过网站特定网页或版块的用户,采用的方式与上面的例子类似,但定位的是更具体的网址,而不只是您网站的网域。下面基于规则的再营销提供了示例和更多详情。

采取了具体操作的访问者

可以将在您的网站上采取了具体操作的用户填充到受众群体列表。如果您在使用转化跟踪,可以将广告定位到曾在您的网站上触发了转化(如购买)的用户。

还可以将广告定位到在您的网站上采取了归入转化的特定操作的用户,如某人将某商品添加到购物车,但随后又删除而没有购买。BasicUserList 涉及到了这两个使用案例。

曾触发转化

可以使用 ConversionTrackerService 创建转化跟踪代码(如果尚未如此操作)。然后,您可以在网站上安装转化跟踪代码段

BasicUserList 将其成员定义为曾在网站上触发一个或多个转化跟踪代码的用户。创建 BasicUserList 时,您在希望与该用户列表相关联的 ConversionTracker 中提供 id 字段的值。

下面的示例创建了与两段现有转化跟踪代码相关联的 BasicUserList

AdwordsUserListServiceInterface userListService =
    adWordsServices.get(session, AdwordsUserListServiceInterface.class);

// Indicate the conversion trackers we want to associate with a new user list
UserListConversionType conversionType1 = new UserListConversionType();
conversionType1.setId(conversionTrackerId1);

UserListConversionType conversionType2 = new UserListConversionType();
conversionType2.setId(conversionTrackerId2);

// Create a basic user list associated with the two conversion trackers.
BasicUserList userList = new BasicUserList();
userList.setName("Example BasicUserList");
userList.setDescription("A list of people who have triggered conversion #1 or #2");
userList.setMembershipLifeSpan(365L);
userList.setConversionTypes(new UserListConversionType[] {conversionType1, conversionType2});
userList.setStatus(UserListMembershipStatus.OPEN);

// Create operation.
UserListOperation operation = new UserListOperation();
operation.setOperand(userList);
operation.setOperator(Operator.ADD);

UserListOperation[] operations = new UserListOperation[] {operation};

// Add user list.
UserListReturnValue result = userListService.mutate(operations);

非转化操作

针对在您的网站上执行过会被视为转化的操作的用户,您可以创建 BasicUserList,方法是将其与具有 REMARKETING 类别的 ConversionTracker 相关联。

可采用两种方式来创建这样一个 ConversionTracker 对象。第一种方式是直接使用 ConversionTrackerService。第二种方式是在创建关联的 BasicUserList 的同时由 AdWords 自动创建。下面的代码演示了第二种方式:

UserListConversionType conversionType = new UserListConversionType();
conversionType.setName("Remarketing-only conversion tracker");

// Create basic user list.
BasicUserList userList = new BasicUserList();
userList.setName("Example BasicUserList Remarketing Only");
userList.setDescription("Triggered an action not considered a conversion");
userList.setMembershipLifeSpan(365L);
userList.setConversionTypes(new UserListConversionType[] {conversionType});
userList.setStatus(UserListMembershipStatus.OPEN);

// Same as previous example
...

请注意,系统将 UserListConversionType 附加到列表,但没有设置 id。这会触发自动生成 REMARKETING 类别的 ConversionTracker 对象。

您可以获取自动生成的 ConversionTracker 对象的代码段:

// From the user list creation obtain the tracker ID.
String conversionId = userList.getConversionTypes().get(0).getId().toString();

// Create predicate and selector.
Predicate predicate = new Predicate();
predicate.setField("Id");
predicate.setOperator(PredicateOperator.IN);
predicate.setValues(new String [] {conversionId});
Selector selector = new Selector();
selector.setFields(new String[] {"Id"});
selector.setPredicates(new Predicate[] {predicate});

// Get the conversion tracker.
ConversionTrackerPage page = conversionTrackerService.get(selector);

// Print out the conversion tracker code snippet.
System.out.println(((AdWordsConversionTracker) page.getEntries()[0]).getSnippet());

多个用户列表

您可以使用 UserListLogicalRule 字段作为 LogicalUserList,构建现有用户列表的自定义组合。LogicalUserList 中不同规则之间是“AND”的关系,因此用户必须符合每条规则才能归入该列表。但是,每条规则可以让您将操作数指定为“AND”或者“OR”。换句话说,您可以指定,用户必须满足规则的所有操作数还是只需满足其中之一。

此外,规则还允许您将其他 LogicalUserList 对象指定为操作数,这样就可以方便您创建一个树状图。LogicalUserList 非常强大,可以帮助您为定位创建复杂的分组层次结构。您可以将列表与不同的 AccessReason 字段组合。但是,如果访问权被撤销,那么当对 LogicalUserList 的规则进行求值时,该 UserList 将被视为没有成员的列表。

下面的代码演示如何创建包含两个 BasicUserList 中任何一个的用户的 LogicalUserList

// My basic user list of Mars customers.
BasicUserList basicMarsList = new BasicUserList();
basicMarsList.setId(...);

// My basic user list of Venus customers.
BasicUserList basicVenusList = new BasicUserList();
basicVenusList.setId(...);

LogicalUserListOperand marsListOperand = new LogicalUserListOperand();
marsListOperand.setUserList(basicMarsList);

LogicalUserListOperand venusListOperand = new LogicalUserListOperand();
venusListOperand.setUserList(basicVenusList);

UserListLogicalRule rule = new UserListLogicalRule(
    UserListLogicalRuleOperator.ANY,
    new LogicalUserListOperand[] {marsListOperand, venusListOperand});

// Create logical user list.
LogicalUserList combinationList = new LogicalUserList();
combinationList.setName("My combination list of Mars or Venus customers #"
    + System.currentTimeMillis());
combinationList.setRules(new UserListLogicalRule[] {rule});

// Create operations.
UserListOperation operation = new UserListOperation();
operation.setOperand(combinationList);
operation.setOperator(Operator.ADD);

UserListOperation[] operations = new UserListOperation[] {operation};

// Add logical user list.
UserListReturnValue result = userListService.mutate(operations);

类似受众群体

吸引新的受众群体的方法之一是使用 SimilarUserList。有了这个用户列表,您可以定位与其他用户列表中的用户具有相同特征的用户。

Google 将根据各种因素为每个 UserList 自动生成 SimilarUserList,这些因素包括原始列表中访问者的数量、这些访问者加入原始列表的时间长短、这些访问者浏览的网站类型以及该列表是否属于您。自源列表创建之时起算,这个过程最长可能需要四天。

以下代码演示了如何查找所有可用的 SimilarUserList 对象:

AdwordsUserListServiceInterface userListService =
    adWordsServices.get(session, AdwordsUserListServiceInterface.class);

UserListPage page = userListService.get(
    new SelectorBuilder()
    .fields("Id", "Name", "SeedUserListId")
    .equals("ListType", UserListType._SIMILAR)
    .build());

for (UserList userlist : page.getEntries()) {
  System.out.printf("id: %d, name: %s, seed list id: %d%n",
      userlist.getId(),
      userlist.getName(),
      ((SimilarUserList)userlist).getSeedUserListId());
}

使用电子邮件地址的目标客户匹配

如果广告客户拥有丰富的 CRM 数据库,您可以根据 CRM 电子邮件数据定义和定位受众群体列表。您可以批量上传电子邮件地址,追加/移除电子邮件地址或者使用这些用户列表创建 LogicalUserList

这些受众群体列表有资格投放到 Google 搜索、YouTube 和 Gmail,但无法用于 Google 的展示广告网络。

根据政策,您只能上传自己(第一方)获取的电子邮件地址。不允许从第三方购买电子邮件列表,然后将其上传到该帐号。

有关隐私问题,电子邮件地址在上传之前,必须使用 SHA-256 算法进行哈希处理。出于这个原因,在对电子邮件地址进行哈希处理之前,您需要:

  • 删除开头或结尾处的空格

  • 将电子邮件地址设置为全小写

下面的代码演示如何创建 CrmBasedUserList,并基于进行了相应标准化和哈希处理的三个不同电子邮件地址添加三名成员。

private static final ImmutableList<String> EMAILS =
    ImmutableList.of("client1@example.com", "client2@example.com", " Client3@example.com ");
private static final MessageDigest digest = getSHA256MessageDigest();

// Get the UserListService.
AdwordsUserListServiceInterface userListService =
    adWordsServices.get(session, AdwordsUserListServiceInterface.class);

// Create a user list.
CrmBasedUserList userList = new CrmBasedUserList();
userList.setName("Customer relationship management list #" + System.currentTimeMillis());
userList.setDescription("A list of customers that originated from email addresses");

// See limit here: https://support.google.com/adwords/answer/6276125#requirements.
userList.setMembershipLifeSpan(30L);

// Create operation.
UserListOperation operation = new UserListOperation();
operation.setOperand(userList);
operation.setOperator(Operator.ADD);

// Add user list.
UserListReturnValue result = userListService.mutate(new UserListOperation[] { operation });

// Display user list.
UserList userListAdded = result.getValue(0);
System.out.printf("User list with name '%s' and ID %d was added.%n",
    userListAdded.getName(), userListAdded.getId());

// Get user list ID.
Long userListId = userListAdded.getId();

// Create operation to add members to the user list based on email addresses.
MutateMembersOperation mutateMembersOperation = new MutateMembersOperation();
MutateMembersOperand operand = new MutateMembersOperand();
operand.setUserListId(userListId);

// You can optionally provide this field.
operand.setDataType(MutateMembersOperandDataType.EMAIL_SHA256);

// Hash normalized email addresses based on SHA-256 hashing algorithm.
List<String> emailHashes = new ArrayList<>(EMAILS.size());
for (String email : EMAILS) {
  String normalizedEmail = toNormalizedEmail(email);
  emailHashes.add(toSHA256String(normalizedEmail));
}

// Add email address hashes.
operand.setMembers(emailHashes.toArray(new String[emailHashes.size()]));
mutateMembersOperation.setOperand(operand);
mutateMembersOperation.setOperator(Operator.ADD);

// Add members to the user list based on email addresses.
MutateMembersReturnValue mutateMembersResult =
    userListService.mutateMembers(new MutateMembersOperation[] { mutateMembersOperation });

// Display results.
// Reminder: it may take several hours for the list to be populated with members.
for (UserList userListResult : mutateMembersResult.getUserLists()) {
  System.out.printf("%d email addresses were uploaded to user list with name '%s' and ID %d "
      + "and are scheduled for review.%n",
      EMAILS.size(), userListResult.getName(), userListResult.getId());
}

/**
 * Hash a string using SHA-256 hashing algorithm.
 *
 * @param str the string to hash.
 * @return the SHA-256 hash string representation.
 * @throws UnsupportedEncodingException If UTF-8 charset is not supported.
 */
private static String toSHA256String(String str) throws UnsupportedEncodingException {
  byte[] hash = digest.digest(str.getBytes("UTF-8"));
  StringBuilder result = new StringBuilder();
  for (byte b : hash) {
    result.append(String.format("%02x", b));
  }

  return result.toString();
}

/**
 * Removes leading and trailing whitespace and converts all characters to lower case.
 *
 * @param email the email address to normalize.
 * @return a normalized copy of the string.
 */
private static String toNormalizedEmail(String email) {
  return email.trim().toLowerCase();
}

/** Returns SHA-256 hashing algorithm. */
private static MessageDigest getSHA256MessageDigest() {
  try {
    return MessageDigest.getInstance("SHA-256");
  } catch (NoSuchAlgorithmException e) {
    throw new RuntimeException("Missing SHA-256 algorithm implementation.", e);
  }
}

不同广告系列类型的目标客户匹配有不同的选项:

“仅限搜索网络”广告系列
可使用 CrmBasedUserList。广告将展示在搜索网络上。
“仅限展示广告网络”广告系列
可使用 CrmBasedUserList 及其 SimilarUserList。仅当存在 Gmail 赞助商广告素材时,才在 Gmail 上展示广告。
“搜索网络和精选展示广告网络”广告系列
可使用 CrmBasedUserList。广告将展示在搜索网络和 Gmail 上(仅当存在 Gmail 赞助商广告素材时)。
视频广告系列
可使用 CrmBasedUserList 及其 SimilarUserList。仅当存在 TrueView 插播广告时,才在 YouTube 上展示广告。

注意事项

  • 该 API 限制了每个转变请求中的电子邮件地址数量

  • MembershipLifeSpan 限制可能与其他用户列表不同。

  • 最多可能需要几个小时的时间,才能对列表填充成员。

  • 电子邮件地址必须与 Google 帐号相关联。

  • 只有 @gmail.com 地址可用于在 Gmail 中定位。

  • 出于保护隐私的目的,用户列表的大小会显示为零,直到列表中至少有 1000 个成员。在此之后,大小将被舍入到两位有效数字。

  • 至少向列表上传 5000 个电子邮件地址,以确保广告开始投放。

  • 使用 LogicalUserList 时,CrmBasedUserList 只能与另一个 CrmBasedUserList 合并。所有的 CrmBasedUserList 政策将适用于结果用户列表。

再营销的定位设置

将用户列表作为条件添加到广告组或广告系列之后,就可以开始将其投入使用了,不过,可能无法完全按您期望的方式对其进行定位。要验证定位方式是否符合预期,请通过调用其 getSettings 方法来检查使用新列表的广告组或广告系列的 TargetingSetting

可以使用 TargetingSettingDetail 对象组,详细设置您的不同条件类型如何用于定位。每个 TargetingSettingDetail 让您可以控制条件类型是使用 Bid only 还是 Target and bid 机制。

使用 Bid only 的话,这一条件将不会用于限制流量,但会允许您为列表中不同的用户提供不同的出价。而 Target and bid 机制使得条件只会限制定位列表上用户的广告组流量。

再营销列表的默认定位是 Target and bid。如果您要向主搜索广告系列添加再营销列表,请考虑将定位设置更改为 Bid only。如果您要为搜索广告再营销列表设置重复的广告系列,请将定位设置保留为 Target and bid

下例使用 Java 客户端库,在广告组上将 TargetingSettingDetail 设置为 Bid only

AdGroup adGroup = ... // fetch the ad group relevant for this case

List<Setting> settings = Lists.newArrayList();
List<TargetingSettingDetail> details = Lists.newArrayList();
TargetingSetting targetingSetting = null;
if (adGroup.getSettings() != null) {
  // Find the existing TargetingSetting if it exists, and keep
  // track of all other settings.
  for (Setting setting : adGroup.getSettings()) {
    if (setting instanceof TargetingSetting) {
      targetingSetting = (TargetingSetting) setting;
    } else {
      settings.add(setting);
    }
  }

  if (targetingSetting != null) {
    // Copy all the existing TargetingSettingDetails except the one for
    // USER_INTEREST_AND_LIST.
    for (TargetingSettingDetail settingDetail : targetingSetting.getDetails()) {
      if (!CriterionTypeGroup.USER_INTEREST_AND_LIST.equals(
              settingDetail.getCriterionTypeGroup())) {
        details.add(settingDetail);
      }
    }
  }
}

if (targetingSetting == null) {
  targetingSetting = new TargetingSetting();
}

// Create a new USER_INTEREST_AND_LIST targeting setting detail and add
// it to the details list.
TargetingSettingDetail userListsSetting = new TargetingSettingDetail();
userListsSetting.setCriterionTypeGroup(CriterionTypeGroup.USER_INTEREST_AND_LIST);

// true = "Bid only"; false = "Target and bid"
userListsSetting.setTargetAll(true);
details.add(userListsSetting);

targetingSetting.setDetails(details.toArray(new TargetingSettingDetail[details.size()]));

// Add the new TargetingSetting for USER_INTEREST_AND_LIST to the settings list.
settings.add(targetingSetting);

adGroup.setSettings(settings.toArray(new Setting[settings.size()]));

对广告系列设置 Bid onlyTarget and bid 的过程几乎相同。按照对 AdGroup 的同一方法,对 Campaign 对象使用 getSettingssetSettings 方法。

效果报告

受众群体效果报告可显示收集用户列表的效果报告所需的字段。例如,您可以考察该报告中的 ConversionsCostPerConversion,以确定列表的定位成员是否实际带来了更多的转化,然后相应地调整您的出价系数。通过将 UserListId 字段加入点击效果报告,还可以查看每个点击的用户列表。详情请查询报告指南

使用基于规则的用户列表进行再营销

有了基于规则的用户列表,您可以基于内置再营销代码参数添加到您的再营销代码的自定义参数确定广告的定位受众群体。如果已将用户列表设置到位,并将再营销代码添加到您的网站或移动应用,可以定位列表中的用户,对这些用户提出不同的出价,并基于该列表的成员生成对统计信息进行整理或过滤的报告。

这一节着重讲述基于规则的列表,所以包含了创建 ExpressionRuleUserListDateSpecificRuleUserList 的示例。

不能使用有关用户的敏感信息构建再营销列表。在设置再营销广告系列以及在网站或应用中放置再营销代码前,请查看个性化广告页

使用内置的再营销代码参数

您可以使用内置的再营销参数 url__,基于用户在您的网站上访问过的网址,定位用户列表。例如,下面的代码演示了如何针对访问了您网站上两个不同版块的网页的用户创建基于规则的用户列表。使用内置的再营销参数不需要对再营销代码进行任何修改。

StringKey urlKey = new StringKey("url__");

StringRuleItem urlStringRuleItem1 = new StringRuleItem();
urlStringRuleItem1.setKey(urlKey);
urlStringRuleItem1.setOp(StringRuleItemStringOperator.CONTAINS);
urlStringRuleItem1.setValue("example.com/section1/");

RuleItem urlRuleItem1 = new RuleItem();
urlRuleItem1.setStringRuleItem(urlStringRuleItem1);

StringRuleItem urlStringRuleItem2 = new StringRuleItem();
urlStringRuleItem2.setKey(urlKey);
urlStringRuleItem2.setOp(StringRuleItemStringOperator.CONTAINS);
urlStringRuleItem2.setValue("example.com/section2/");

RuleItem urlRuleItem2 = new RuleItem();
urlRuleItem2.setStringRuleItem(urlStringRuleItem2);

// Combine the two rule items into a RuleItemGroup so AdWords will AND their
// rules together. To instead OR the rules together, each RuleItem should be
// placed in its own RuleItemGroup.
RuleItemGroup ruleItemGroup = new RuleItemGroup();
ruleItemGroup.setItems(new RuleItem[] {urlRuleItem1, urlRuleItem2});

Rule rule = new Rule();
rule.setGroups(new RuleItemGroup[] {ruleItemGroup});

// Create the user list.
ExpressionRuleUserList expressionUserList = new ExpressionRuleUserList();
expressionUserList.setName("Sections 1 and 2"));
expressionUserList.setDescription("Visitors to section1 or section2");
expressionUserList.setRule(rule);

使用自定义再营销代码参数

您可以向再营销代码添加自定义再营销代码参数,以便创建更适合的用户列表。

场景

比方说,您已经对自己的某个网站配置了几个自定义再营销代码参数,以获取用户的下列属性:

  • ecomm_pagetype - 您的网站的网页类别,如结帐、购物车等。
  • cartsize - 用户购物车中的商品数量。
  • checkoutdate - 用户的结帐日期。只有当用户已经实际完成了购买时,您才设置此参数。

您希望对已经将多个商品放入购物车并开始结帐过程的用户进行更多的展示。您还希望找出十一月和十二月间进行了购买的用户,原因是您计划这几个月在网站上进行大促销。

您可以使用以下任一规则描述此组用户:

  1. 访问结帐页面并且在他们的购物车中有多个商品的用户
  2. 在十一月或十二月结帐的用户

如果用户属于类别 1 或 2 中的任意一个,您希望将特定广告组或广告系列的出价提高 25%。

对象概述

在深入研究代码之前,让我们看看基于规则的用户列表的结构。基于规则的列表在 AdWords API 中表示为 RuleBasedUserList。下图显示了完成操作时这一使用案例的 RuleBasedUserList 的外观。

基于规则的用户列表结构的图表

创建第一个 RuleItemGroup

开始时我们先在左侧创建第一个 RuleItemGroup,其中包括两个 RuleItem

  1. 访问过结帐页的用户。
  2. 购物车中有多个商品的用户。

第一项使用具有字符串值的 ecomm_pagetype 参数,所以您需要先创建 StringRuleItem

StringRuleItem checkoutStringRuleItem = new StringRuleItem(
    new StringKey("ecomm_pagetype"), StringRuleItemStringOperator.EQUALS, "checkout");
RuleItem checkoutRuleItem = new RuleItem();
checkoutRuleItem.setStringRuleItem(checkoutStringRuleItem);

第二项使用有数值的 cartsize 参数,所以现在您需要 NumberRuleItem

NumberRuleItem cartSizeNumberRuleItem = new NumberRuleItem(
    new NumberKey("cartsize"), NumberRuleItemNumberOperator.GREATER_THAN, 1.0);
RuleItem cartSizeRuleItem = new RuleItem();
cartSizeRuleItem.setNumberRuleItem(cartSizeNumberRuleItem);

下一步,将这两个 RuleItems 合并成 RuleItemGroup。当项目被合并到项目组中,AdWords 会对它们的规则一并进行 AND 操作。

RuleItemGroup checkoutMultipleItemGroup = new RuleItemGroup();
checkoutMultipleItemGroup.setItems(new RuleItem[] {checkoutRuleItem, cartSizeRuleItem});

创建第二个 RuleItemGroup

右侧的 RuleItemGroup 由两个 RuleItem 对象组成:

  1. 在 10 月 31 日之后结帐的用户。
  2. 在 1 月 1 日之前结帐的用户。

这两项都使用有日期值的 checkoutdate 参数,所以这次您要创建 DateRuleItem 对象。

// Create the RuleItem for the start date.
DateRuleItem startDateDateRuleItem = new DateRuleItem(
    new DateKey("checkoutdate"),
    DateRuleItemDateOperator.AFTER, "20141031");
RuleItem startDateRuleItem = new RuleItem();
startDateRuleItem.setDateRuleItem(startDateDateRuleItem);

// Create the RuleItem for the end date.
DateRuleItem endDateDateRuleItem = new DateRuleItem(
    new DateKey("checkoutdate"),
    DateRuleItemDateOperator.BEFORE, "20150101");
RuleItem endDateRuleItem = new RuleItem();
endDateRuleItem.setDateRuleItem(endDateDateRuleItem);

与左侧的组一样,将这两个 RuleItem 对象合并到一个 RuleItemGroup 中,用 AND 将它们组合在一起。

RuleItemGroup checkedOutNovDecItemGroup = new RuleItemGroup();
checkedOutNovDecItemGroup.setItems(new RuleItem[] {startDateRuleItem, endDateRuleItem});

创建用户列表

现在只要将上述规则项目组合并成新的用户列表即可。

// Create the user list.
ExpressionRuleUserList expressionUserList = new ExpressionRuleUserList();
expressionUserList.setName("My expression rule user list");
expressionUserList.setDescription("Users who checked out in November or December "
    + "OR visited the checkout page with more than one item in their cart");

// OR the RuleItemGroups together into a Rule.
Rule rule = new Rule();
rule.setGroups(new RuleItemGroup[] {checkoutMultipleItemGroup, checkedOutNovDecItemGroup});
expressionUserList.setRule(rule);

// Set other optional attributes of the user list.
...

// Create an operation to ADD the user list.
UserListOperation operation = new UserListOperation();
operation.setOperator(Operator.ADD);
operation.setOperand(expressionUserList);

// Submit the operation.
UserListReturnValue result =
    adwordsUserListService.mutate(new UserListOperation[] {operation});

通过网站访问日期范围加以限制

上述 ExpressionRuleUserList 满足您的需求,但如果您只是希望获取满足该列表规则且在 10 月 1 日和 12 月 31 日之间访问了您的网站的用户,该如何操作?请使用 DateSpecificRuleUserList

要创建 DateSpecificUserList,除了遵照 ExpressionRuleUserList 的同一过程之外,还要设置列表的 startDateendDate

DateSpecificRuleUserList dateRuleUserList = new DateSpecificRuleUserList();
dateRuleUserList.setStartDate(startDate.toString("20141001"));
dateRuleUserList.setEndDate(endDate.toString("20141231"));

// Set optional attributes of the user list, such as membershipLifeSpan or
// integration code.
...

// Use the same rule defined above.
dateRuleUserList.setRule(rule);

这就是全部内容!新列表将包含与前面的列表满足相同规则且在 startDate(含)和 endDate(含)间访问网站的所有用户。有关不限制开始或结束日期等其他选项,请参阅 DateSpecificRuleUserList 文档。

在列表中加入过往用户

从 v201702 开始,还可以通过将用户列表的 prepopulationStatus 设置为 REQUESTED,来将过往用户包含在基于规则的用户列表中,并通过定期检查此字段的状态来监控异步预填充过程的进度。

修改列表中用户的出价

您已经创建了用户列表并且在网站上设置了再营销代码。现在,您希望通过将出价提高 25%,专门定位您的广告组或广告系列中的列表成员。

让我们修改一组广告组的出价:

// Specify the ad group IDs.
List<Long> adGroupIds = Lists.newArrayList(
    // ad group ID 1,
    // ad group ID 2,
    // ...
    );

// Create a CriterionUserList that points to the user list created above.
CriterionUserList criterionUserList = new CriterionUserList();
criterionUserList.setUserListId(dateRuleUserList.getId());

List<AdGroupCriterionOperation> operations = Lists.newArrayList();
for(Long adGroupId : adGroupIds) {
  // Create a BiddableAdGroupCriterion for the CriterionUserList and set
  // its bid modifier to 1.25. Instead of specifying a bid modifier, you
  // could set the BiddableAdGroupCriterion's bidding strategy configuration
  // to a configuration with specific bids.
  BiddableAdGroupCriterion biddableCriterion = new BiddableAdGroupCriterion();
  biddableCriterion.setAdGroupId(adGroupId);
  biddableCriterion.setCriterion(criterionUserList);
  biddableCriterion.setBidModifier(1.25);

  // Create an operation to ADD the BiddableAdGroupCriterion.
  AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
  operation.setOperand(biddableCriterion);
  operation.setOperator(Operator.ADD);
  operations.add(operation);
}

// Submit the operations.
AdGroupCriterionReturnValue result = adGroupCriterionService.mutate(
    operations.toArray(new AdGroupCriterionOperation[operations.size()]));

修改广告系列出价的过程非常相似:

// Specify the campaign ID.
Long campaignId = // ID of campaign

// Create a CriterionUserList that points to the user list created above.
CriterionUserList criterionUserList = new CriterionUserList();
criterionUserList.setUserListId(dateRuleUserList.getId());

CampaignCriterion campaignCriterion = new CampaignCriterion();
campaignCriterion.setCampaignId(campaignId);
campaignCriterion.setCriterion(criterionUserList);
campaignCriterion.setBidModifier(1.25);

CampaignCriterionOperation operation = new CampaignCriterionOperation();
operation.setOperand(campaignCriterion);
operation.setOperator(Operator.ADD);
operations.add(operation);

// Submit the operations.
CampaignCriterionReturnValue result = CampaignCriterionService.mutate(
    new AdGroupCriterionOperation[] {operation});

其他用户列表选项

可以将基于规则的用户列表再推进一步,与其他用户列表合并,以创建更复杂的定位。例如,如果您有定位特定转化类型的 BasicUserList 和基于自定义参数定位用户的 RuleBasedUserList,您可以通过创建 LogicalUserList,定位这两个列表中的成员。有关示例,请参阅上述多个用户列表

将再营销代码添加到您的网站中

对于要填充的基于规则的用户列表,您需要将帐号级再营销代码添加到网站。按照上面的说明来获取代码,并将其安装到网站上。

如果只使用内置的再营销代码参数,则不需要对再营销代码进行任何修改。如果您使用自定义参数,请参阅以下文章,了解如何修改代码,以加入这些参数:编写代码和创建再营销列表的高级策略

代码示例

在每个客户端库Remarketing 文件夹中提供了添加基于规则的用户列表的完整代码示例:

发送以下问题的反馈:

此网页
AdWords API
AdWords API
需要帮助?请访问我们的支持页面