地理位置定位

为确保AdWords广告系列取得成功,您需要针对您的受众群体进行投放。本指南将详细探讨地理位置定位。我们将指导您如何使用AdWords API来为您的广告系列添加、检索及更新地理位置定位。我们还将介绍高级地理位置定位概念(如所在位置和兴趣区域),以及如何生成报告并评估您广告系列的地理位置效果。

本指南中的代码示例使用的是AdWords API Java库。如果您想查找使用其他编程语言的客户端库,可以参阅客户端库的完整列表。此外,使用客户端库是可选建议;您也可以选择使用编程语言中的任何SOAP套件来调用API。

  1. 为什么地理位置定位如此重要?
  2. 以地理位置定位方式将您的广告系列定位到某个区域
  3. 查询某个区域的地理位置代码
  4. 以地理位置定位方式将您的广告系列定位到某个地理位置的邻近区域
  5. 查询地址坐标
  6. 以地理位置定位方式将您的广告系列定位到某个多边形区域
  7. 检索地理位置定位
  8. 更新地理位置定位
  9. 高级地理位置定位设置
  10. 地理位置效果报告

为什么地理位置定位如此重要?

为确保AdWords广告系列取得成功,您需要针对您的受众群体进行投放。通过地理位置定位,您可以针对某个特定地理区域的用户投放您的广告。例如,假设您正在为某个连锁超市投放广告。如果没有地理位置定位,您的广告就会在全球所有区域展示,一些所在区域没有该连锁超市的用户可能也会点击您的广告,这样会浪费您的广告预算,并且不会给您带来任何回报。对广告系列进行地理位置定位可以让您的广告只在该连锁超市提供服务的区域中展示,从而提高广告效果。这种方法还能让您覆盖搜索本地超市的客户。

通过使用AdWords API,您可以根据国家/地区、区域或地理位置点的邻近区域来定位您的广告。接下来我们将依次介绍这些选项。如果您不熟悉AdWords中的这些选项,请参阅此帮助中心文章来了解详情。

以地理位置定位方式将您的广告系列定位到某个区域

通过AdWords API,您可以以地理位置定位方式将您的广告系列定位到某个区域。这个区域可以是AdWords支持以地理位置定位方式定位到的任何地理区域,例如国家/地区、州或省/直辖市/自治区、城市或邮政区域。每个可定位的地理位置都有一个唯一标识的标准ID。

您可以使用CampaignTargetingService来为您的广告系列添加地理位置定位。以下代码段显示了如何将广告系列定位到加利福尼亚(美国)和墨西哥。

// 创建地理位置。可在文档中找到ID,也可以
// 使用LocationCriterionService进行检索。
Location california = new Location();
california.setId(21137L);
Location mexico = new Location();
mexico.setId(2484L);

List operations = new ArrayList();
for (Criterion criterion : new Criterion[] {california, mexico}) {
  CampaignCriterionOperation operation = new CampaignCriterionOperation();
  CampaignCriterion campaignCriterion = new CampaignCriterion();
  campaignCriterion.setCampaignId(campaignId);
  campaignCriterion.setCriterion(criterion);
  operation.setOperand(campaignCriterion);
  operation.setOperator(Operator.ADD);
  operations.add(operation);
}

CampaignCriterionReturnValue result = campaignCriterionService.mutate(operations
   .toArray(new CampaignCriterionOperation[operations.size()]));

如代码所示,您需要为想要定位的每个区域创建Location对象,并使用CampaignCriteronService.mutate进行添加。21137是加利福尼亚的代码,2484是墨西哥的代码。

出于下列原因,Google可能会逐步淘汰一些地理位置标准:地理位置可以重组为更小(或更大)的位置、地缘政治变化等。您可以参考Location对象中的targetingStatus字段来确定地理位置的状态是ACTIVE、OBSOLETE还是PHASING_OUT。您还可以参阅这篇博文来了解有关逐步淘汰地理位置定位的详情。

查询某个区域的地理位置代码

如上一节所述,您需要创建含有相应代码的Location对象才能对某个区域进行地理位置定位。您可以使用LocationCriterionService来查询地理位置的标准ID。以下代码示例显示了如何根据地理位置名称来查询地理位置的标准ID。

String[] locationNames = new String[] {"Quebec"};

Selector selector = new Selector();
selector.setFields(new String[] {"Id", "LocationName", "CanonicalName", "DisplayType",
   "ParentLocations", "Reach"});

selector.setPredicates(new Predicate[] {
  // 地理位置名称必须完全一致,
  // 仅支持EQUALS和IN。
  new Predicate("LocationName", PredicateOperator.IN, locationNames),
  // 设置返回的地理位置名称的语言区域。
  new Predicate("Locale", PredicateOperator.EQUALS, new String[] {"en"})
});

// 发出get请求。
LocationCriterion[] locationCriteria = locationCriterionService.get(selector);

// 显示生成的地理位置标准。
for (LocationCriterion locationCriterion : locationCriteria) {
 String parentString =
     getParentLocationString(locationCriterion.getLocation().getParentLocations());
 System.out.printf("The search term '%s' returned the location '%s (%d)' of type '%s' "
     + "with parent locations '%s' and reach '%d'.\n",
    locationCriterion.getSearchTerm(),
    locationCriterion.getLocation().getLocationName(),
    locationCriterion.getLocation().getId(),
    locationCriterion.getLocation().getDisplayType(), parentString,
    locationCriterion.getReach());
}

/**
  * 助手函数,用于设置上级地理位置的字符串的格式。
  *
  * @param parents:上级地理位置的列表。
  * @return:采用特定格式的字符串,代表上级地理位置。
  */
 public static String getParentLocationString(Location[] parents) {
   StringBuilder sb = new StringBuilder();
   if (parents != null) {
     for (Location parent : parents) {
       if (sb.length() > 0) {
         sb.append(", ");
       }
       sb.append(String.format("%s (%s)", parent.getLocationName(),
           parent.getDisplayType()));
     }
   } else {
     sb.append("N/A");
   }
   return sb.toString();
 }

系统会针对上述代码示例显示以下输出内容:

The search term 'Quebec' returned the location 'Quebec'(20123) of type 'Province
' with parent locations 'Canada (Country), ' and reach '5070000'.
The search term 'Quebec' returned the location 'Quebec City'(1002624) of type 'C
ity' with parent locations 'Quebec (Province), Canada (Country), ' and reach '35
6000'.

现在,您可以使用地理位置代码20123来定位魁北克(省),而魁北克市的地理位置代码则是1002624。

使用LocationCriterionService,您可以请求地理位置的上级位置。这是通过将ParentLocations添加到选择器字段的列表中实现的。例如,我们先前的代码返回了地理位置(魁北克市)及其上级位置(加拿大)。如果您想要显示客户的地理位置分层列表,或在定位广告系列时想要为地理位置添加包含逻辑或排除逻辑,这一功能将非常有用。

在处理上级地理位置时,请注意不要在层级上对地理位置的displayType做任何假设。例如,美国被划分为若干个州,并进一步被划分为若干个城市,但对全世界的每个国家/地区来说,并不一定都是这种情况。

如果您想了解精确的地理位置名称,则可以有效使用LocationCriterionService。如果您不知道准确的地理位置名称,或者您想要检索大量区域的地理位置代码,那么将列表保存在本地数据库中,并编写您自己的地理位置查询逻辑会更加有效。您还可以轻松查询地理位置代码,或从我们使用最新的地理位置定位定期更新的定位列表中下载所有代码的列表。

以地理位置定位方式将您的广告系列定位到某个地理位置的邻近区域

通过按地理位置来定位广告系列,您可以有效地根据地理位置来定位自己的广告系列,但有时候您可能想要更加精确地进行定位。例如,您可能想在自己的超市周边10公里的范围内为其投放广告。在这种情况下,您可以使用邻近区域定位来投放广告系列。创建邻近区域定位代码类似于添加地理位置定位,只是您必须将Location对象替换为下文所示的Proximity对象。

Proximity proximity = new Proximity();
proximity.geoPoint = myGeoPoint;
proximity.radiusDistanceUnits = ProximityDistanceUnits.KILOMETERS;
proximity.radiusInUnits = 10;

查询地址坐标

要使用邻近区域定位,您需要知道您想要定位的地址所在的地理位置。您可以使用GeoLocationService来查询地址的坐标(如下所示)。

GeoLocationServiceInterface geoLocationService =
    new AdWordsServices().get(session, GeoLocationServiceInterface.class);

// 查询“38 avenue de l'Opéra, 75002 Paris, FR”的地理位置点。
Address address = new Address();
address.setStreetAddress("38 avenue de l'Opéra");
address.setCityName("Paris");
address.setPostalCode("75002");
address.setCountryCode("FR");

// 创建地理位置选择器。
GeoLocationSelector selector = new GeoLocationSelector();
selector.setAddresses(new Address[] {address});

// 获取地理位置。
GeoLocation[] geoLocationResult = geoLocationService.get(selector);
GeoPoint geoPoint = geoLocationResult[0].getGeoPoint();

使用LocationCriterionService时,如果您需要在广告系列中定位大量地址,那么将地理位置定位的坐标存储到本地数据库,要比使用GeoLocationService查询坐标更加有效。

以地理位置定位方式将您的广告系列定位到某个多边形区域

过去,您可以通过AdWords来将广告系列定位到多边形区域。但是,为了支持邻近区域定位,多边形区域定位功能已被停用,因此您无法再使用AdWords API添加多边形区域定位。不过,如果您要检索现有广告系列的地理位置定位,则有可能会遇到这类定位。您可以使用AdWords API来删除现有的多边形区域定位。

检索地理位置定位

您可以使用CampaignCriterionService.get方法来检索广告系列的地理位置定位。您还可以根据CriteriaType过滤结果,以单独限制地理位置的结果;还可以使用分页功能来限制您检索的定位数量。以下代码段显示了具体操作:

int offset = 0;

// 创建选择器。
Selector selector = new Selector();
selector.setFields(new String[] {"CampaignId", "Id", "CriteriaType", "LocationName"});
selector.setOrdering(new OrderBy[] {new OrderBy("Name", SortOrder.ASCENDING)});
selector.setPredicates(new Predicate[] {new Predicate("CriteriaType",
    PredicateOperator.EQUALS, new String[] {"LOCATION"})});
selector.setPaging(new Paging(offset, PAGE_SIZE));
CampaignCriterionPage page = null;
do {
  page = campaignCriterionService.get(selector);

  if (page.getEntries() != null) {
    // 展示广告系列。
    for (CampaignCriterion campaignCriterion : page.getEntries()) {
      System.out.printf("Campaign criterion with campaign id '%s', criterion id '%s', "
          + "and type '%s' was found.\n", campaignCriterion.getCampaignId(),
        campaignCriterion.getCriterion().getId(),
        campaignCriterion.getCriterion().getCriterionType());
    }
    Thread.sleep(1000);
  } else {
    System.out.println("No campaign criteria were found.");
  }
  offset += PAGE_SIZE;
  selector.getPaging().setStartIndex(offset);
} while (offset < page.getTotalNumEntries());

请注意,如果您的广告系列定位到所有国家/地区和区域,那么您的地理位置定位列表为空。

更新地理位置定位

要更新广告系列的地理位置定位,您需要检索现有地理位置定位的列表,并与新地理位置定位的列表进行比较。然后,您可以使用REMOVE运算符来删除不需要的地理位置定位,并使用ADD运算符来添加所需的新地理位置定位(在现有的广告系列中缺失)。以前,您可以通过AdWords API使用SET运算符来覆盖广告系列的地理位置定位,不过现在这一功能已经停用,因此您在为广告系列更新地理位置定位时,需要同时使用REMOVE和ADD运算符。

排除地理位置定位

您还可以通过AdWords API来将某个区域排除在地理位置定位之外。如果您想要定位某个区域,但又想排除其中的某个子区域(例如定位整个美国,但将纽约市排除在外),这个功能就非常实用。要排除某个区域,您需要创建NegativeCampaignCriterion,并将其作为排除地理位置的标准。

// 添加广告系列地理位置定位排除项。
NegativeCampaignCriterion negativeCriterion = new NegativeCampaignCriterion();
negativeCriterion.campaignId = campaignId;
negativeCriterion.criterion = locationToExclude;

高级地理位置定位设置

利用AdWords,您可以根据用户的实际所在位置或兴趣区域来指定是否向其展示广告。为了更清楚地说明这一点,我们假设您经营一家花店,并且只将宣传此花店的广告系列定位到纽约市。同时,假设“鲜花”是此广告系列中的关键字。假定有一位加利福尼亚州的用户正在搜索“纽约鲜花”,在这种情况下,加利福尼亚州就是用户所处的位置,而纽约则是其感兴趣的区域。

您可以在广告系列中添加GeoTargetTypeSetting,以确定是否根据用户所处的位置和/或兴趣区域向其展示广告。请参阅这篇博文,详细了解此设置。

地理位置效果报告

您可以生成报告来分析广告系列的地理位置定位的有效性。AdWords API提供以下两种报告,供您获取地理位置效果数据:

  1. 您可以使用地理位置效果报告
  2. 您可以使用标准报告,并按CriteriaType=LOCATION或PROXIMITY进行过滤以获取某个特定地理位置定位的地理位置效果数据。

有关如何使用AdWords API生成报告的详情,请参阅此指南

发送以下问题的反馈:

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