В этом руководстве описывается таргетинг по местоположению, а также способы использования API Google Ads для добавления, получения и обновления данных о местоположении для ваших кампаний.
Информацию об ограничениях таргетинга см. в разделе «Ограничения таргетинга» в документе «Об ограничениях аккаунта Google Ads» .
Почему важен геотаргетинг?
Таргетинг по местоположению позволяет показывать рекламу пользователям в определенном географическом регионе. Например, предположим, вы рекламируете сеть супермаркетов. Без таргетинга по местоположению ваша реклама показывалась бы во всех регионах мира, и клики могли бы поступать от пользователей из регионов, где у вас нет супермаркетов. Это приводит к дополнительным затратам, не обеспечивая при этом возможности возврата инвестиций. С таргетингом по местоположению ваши кампании показывают рекламу только в регионах, где у вас есть открытые супермаркеты. Такой подход также позволяет напрямую таргетировать клиентов, которые ищут супермаркеты в своем регионе.
API Google Ads позволяет настраивать таргетинг рекламы по стране, региону или близости к определенной географической точке .
Узнайте больше о таргетировании рекламы по географическим регионам .
Целевые географические кампании для региона
Вы можете настраивать рекламные кампании на любой географический регион, для которого Google Ads поддерживает таргетинг по местоположению, например, страну, штат, город или почтовый регион. Каждое местоположение, подлежащее таргетингу, однозначно идентифицируется идентификатором критерия (Criterion ID). Вы можете найти идентификатор критерия, используя GeoTargetConstantService.SuggestGeoTargetConstants . resource_name каждого GeoTargetConstant имеет вид geoTargetConstants/{Criterion ID} . Например, значение resource_name для штата Нью-Йорк — geoTargetConstants/21167 .
Вы можете добавлять географические таргетинги в свои кампании, используя CampaignCriterionService . Следующий фрагмент кода показывает, как настроить таргетинг кампании по идентификатору критерия.
Java
private static CampaignCriterion buildLocationIdCriterion( long locationId, String campaignResourceName) { Builder criterionBuilder = CampaignCriterion.newBuilder().setCampaign(campaignResourceName); criterionBuilder .getLocationBuilder() .setGeoTargetConstant(ResourceNames.geoTargetConstant(locationId)); return criterionBuilder.build(); }
C#
private CampaignCriterion buildLocationCriterion(long locationId, string campaignResourceName) { GeoTargetConstantName location = new GeoTargetConstantName(locationId.ToString()); return new CampaignCriterion() { Campaign = campaignResourceName, Location = new LocationInfo() { GeoTargetConstant = location.ToString() } }; }
PHP
private static function createLocationCampaignCriterionOperation( int $locationId, string $campaignResourceName ) { // Constructs a campaign criterion for the specified campaign ID using the specified // location ID. $campaignCriterion = new CampaignCriterion([ // Creates a location using the specified location ID. 'location' => new LocationInfo([ // Besides using location ID, you can also search by location names using // GeoTargetConstantServiceClient::suggestGeoTargetConstants() and directly // apply GeoTargetConstant::$resourceName here. An example can be found // in GetGeoTargetConstantByNames.php. 'geo_target_constant' => ResourceNames::forGeoTargetConstant($locationId) ]), 'campaign' => $campaignResourceName ]); return new CampaignCriterionOperation(['create' => $campaignCriterion]); }
Python
def create_location_op( client: GoogleAdsClient, customer_id: str, campaign_id: str, location_id: str, ) -> CampaignCriterionOperation: campaign_service: CampaignServiceClient = client.get_service( "CampaignService" ) geo_target_constant_service: GeoTargetConstantServiceClient = ( client.get_service("GeoTargetConstantService") ) # Create the campaign criterion. campaign_criterion_operation: CampaignCriterionOperation = client.get_type( "CampaignCriterionOperation" ) campaign_criterion: CampaignCriterion = campaign_criterion_operation.create campaign_criterion.campaign = campaign_service.campaign_path( customer_id, campaign_id ) # Besides using location_id, you can also search by location names from # GeoTargetConstantService.suggest_geo_target_constants() and directly # apply GeoTargetConstant.resource_name here. An example can be found # in get_geo_target_constant_by_names.py. campaign_criterion.location.geo_target_constant = ( geo_target_constant_service.geo_target_constant_path(location_id) ) return campaign_criterion_operation
Руби
def create_location(client, customer_id, campaign_id, location_id) client.operation.create_resource.campaign_criterion do |criterion| criterion.campaign = client.path.campaign(customer_id, campaign_id) criterion.location = client.resource.location_info do |li| # Besides using location_id, you can also search by location names from # GeoTargetConstantService.suggest_geo_target_constants() and directly # apply GeoTargetConstant.resource_name here. An example can be found # in get_geo_target_constant_by_names.rb. li.geo_target_constant = client.path.geo_target_constant(location_id) end end end
Perl
sub create_location_campaign_criterion_operation { my ($location_id, $campaign_resource_name) = @_; # Construct a campaign criterion for the specified campaign using the # specified location ID. my $campaign_criterion = Google::Ads::GoogleAds::V22::Resources::CampaignCriterion->new({ # Create a location using the specified location ID. location => Google::Ads::GoogleAds::V22::Common::LocationInfo->new({ # Besides using location ID, you can also search by location names # using GeoTargetConstantService::suggest() and directly apply # GeoTargetConstant->{resourceName} here. An example can be found # in get_geo_target_constants_by_names.pl. geoTargetConstant => Google::Ads::GoogleAds::V22::Utils::ResourceNames::geo_target_constant( $location_id)} ), campaign => $campaign_resource_name }); return Google::Ads::GoogleAds::V22::Services::CampaignCriterionService::CampaignCriterionOperation ->new({ create => $campaign_criterion }); }
Google может время от времени отменять некоторые критерии определения местоположения по различным причинам: возможно, территория будет разделена на меньшие или большие участки, произойдут геополитические изменения и т. д. Чтобы определить, включено ли определение местоположения ENABLED или REMOVAL_PLANNED ), обратитесь к полю status объекта GeoTargetConstant .
Найдите по названию местоположения.
Вы также можете найти идентификатор критерия по названию местоположения, используя GeoTargetConstantService.SuggestGeoTargetConstants . В следующем примере кода показано, как найти идентификатор критерия местоположения по названию местоположения.
Java
private void runExample(GoogleAdsClient googleAdsClient) { try (GeoTargetConstantServiceClient geoTargetClient = googleAdsClient.getLatestVersion().createGeoTargetConstantServiceClient()) { SuggestGeoTargetConstantsRequest.Builder requestBuilder = SuggestGeoTargetConstantsRequest.newBuilder(); // Locale is using ISO 639-1 format. If an invalid locale is given, 'en' is used by default. requestBuilder.setLocale("en"); // A list of country codes can be referenced here: // https://developers.google.com/google-ads/api/reference/data/geotargets requestBuilder.setCountryCode("FR"); requestBuilder .getLocationNamesBuilder() .addAllNames(ImmutableList.of("Paris", "Quebec", "Spain", "Deutschland")); SuggestGeoTargetConstantsResponse response = geoTargetClient.suggestGeoTargetConstants(requestBuilder.build()); for (GeoTargetConstantSuggestion suggestion : response.getGeoTargetConstantSuggestionsList()) { System.out.printf( "%s (%s,%s,%s,%s) is found in locale (%s) with reach (%d) for search term (%s).%n", suggestion.getGeoTargetConstant().getResourceName(), suggestion.getGeoTargetConstant().getName(), suggestion.getGeoTargetConstant().getCountryCode(), suggestion.getGeoTargetConstant().getTargetType(), suggestion.getGeoTargetConstant().getStatus().name(), suggestion.getLocale(), suggestion.getReach(), suggestion.getSearchTerm()); } } }
C#
public void Run(GoogleAdsClient client) { // Get the GeoTargetConstantServiceClient. GeoTargetConstantServiceClient geoService = client.GetService(Services.V22.GeoTargetConstantService); // Locale is using ISO 639-1 format. If an invalid locale is given, // 'en' is used by default. string locale = "en"; // A list of country codes can be referenced here: // https://developers.google.com/google-ads/api/reference/data/geotargets string countryCode = "FR"; string[] locations = { "Paris", "Quebec", "Spain", "Deutschland" }; SuggestGeoTargetConstantsRequest request = new SuggestGeoTargetConstantsRequest() { Locale = locale, CountryCode = countryCode, LocationNames = new SuggestGeoTargetConstantsRequest.Types.LocationNames() }; request.LocationNames.Names.AddRange(locations); try { SuggestGeoTargetConstantsResponse response = geoService.SuggestGeoTargetConstants(request); foreach (GeoTargetConstantSuggestion suggestion in response.GeoTargetConstantSuggestions) { Console.WriteLine( $"{suggestion.GeoTargetConstant.ResourceName} " + $"({suggestion.GeoTargetConstant.Name}, " + $"{suggestion.GeoTargetConstant.CountryCode}, " + $"{suggestion.GeoTargetConstant.TargetType}, " + $"{suggestion.GeoTargetConstant.Status}) is found in locale " + $"({suggestion.Locale}) with reach ({suggestion.Reach}) " + $"for search term ({suggestion.SearchTerm})."); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample( GoogleAdsClient $googleAdsClient, array $locationNames, string $locale, string $countryCode ) { $geoTargetConstantServiceClient = $googleAdsClient->getGeoTargetConstantServiceClient(); $response = $geoTargetConstantServiceClient->suggestGeoTargetConstants( new SuggestGeoTargetConstantsRequest([ 'locale' => $locale, 'country_code' => $countryCode, 'location_names' => new LocationNames(['names' => $locationNames]) ]) ); // Iterates over all geo target constant suggestion objects and prints the requested field // values for each one. foreach ($response->getGeoTargetConstantSuggestions() as $geoTargetConstantSuggestion) { /** @var GeoTargetConstantSuggestion $geoTargetConstantSuggestion */ printf( "Found '%s' ('%s','%s','%s',%s) in locale '%s' with reach %d" . " for the search term '%s'.%s", $geoTargetConstantSuggestion->getGeoTargetConstant()->getResourceName(), $geoTargetConstantSuggestion->getGeoTargetConstant()->getName(), $geoTargetConstantSuggestion->getGeoTargetConstant()->getCountryCode(), $geoTargetConstantSuggestion->getGeoTargetConstant()->getTargetType(), GeoTargetConstantStatus::name( $geoTargetConstantSuggestion->getGeoTargetConstant()->getStatus() ), $geoTargetConstantSuggestion->getLocale(), $geoTargetConstantSuggestion->getReach(), $geoTargetConstantSuggestion->getSearchTerm(), PHP_EOL ); } }
Python
def main(client: GoogleAdsClient) -> None: gtc_service: GeoTargetConstantServiceClient = client.get_service( "GeoTargetConstantService" ) gtc_request: SuggestGeoTargetConstantsRequest = client.get_type( "SuggestGeoTargetConstantsRequest" ) gtc_request.locale = LOCALE gtc_request.country_code = COUNTRY_CODE # The location names to get suggested geo target constants. # Type hint for gtc_request.location_names.names is not straightforward # as it's part of a complex protobuf object. gtc_request.location_names.names.extend( ["Paris", "Quebec", "Spain", "Deutschland"] ) results: SuggestGeoTargetConstantsResponse = ( gtc_service.suggest_geo_target_constants(gtc_request) ) suggestion: GeoTargetConstantSuggestion for suggestion in results.geo_target_constant_suggestions: geo_target_constant: GeoTargetConstant = suggestion.geo_target_constant print( f"{geo_target_constant.resource_name} " f"({geo_target_constant.name}, " f"{geo_target_constant.country_code}, " f"{geo_target_constant.target_type}, " f"{geo_target_constant.status.name}) " f"is found in locale ({suggestion.locale}) " f"with reach ({suggestion.reach}) " f"from search term ({suggestion.search_term})." )
Руби
def get_geo_target_constants_by_names # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new gtc_service = client.service.geo_target_constant location_names = client.resource.location_names do |ln| ['Paris', 'Quebec', 'Spain', 'Deutschland'].each do |name| ln.names << name end end # Locale is using ISO 639-1 format. If an invalid locale is given, # 'en' is used by default. locale = 'en' # A list of country codes can be referenced here: # https://developers.google.com/google-ads/api/reference/data/geotargets country_code = 'FR' response = gtc_service.suggest_geo_target_constants( locale: locale, country_code: country_code, location_names: location_names ) response.geo_target_constant_suggestions.each do |suggestion| puts sprintf("%s (%s,%s,%s,%s) is found in locale (%s) with reach (%d)" \ " from search term (%s).", suggestion.geo_target_constant.resource_name, suggestion.geo_target_constant.name, suggestion.geo_target_constant.country_code, suggestion.geo_target_constant.target_type, suggestion.geo_target_constant.status, suggestion.locale, suggestion.reach, suggestion.search_term) end end
Perl
sub get_geo_target_constants_by_names { my ($api_client, $location_names, $locale, $country_code) = @_; my $suggest_response = $api_client->GeoTargetConstantService()->suggest({ locale => $locale, countryCode => $country_code, locationNames => Google::Ads::GoogleAds::V22::Services::GeoTargetConstantService::LocationNames ->new({ names => $location_names })}); # Iterate over all geo target constant suggestion objects and print the requested # field values for each one. foreach my $geo_target_constant_suggestion ( @{$suggest_response->{geoTargetConstantSuggestions}}) { printf "Found '%s' ('%s','%s','%s',%s) in locale '%s' with reach %d" . " for the search term '%s'.\n", $geo_target_constant_suggestion->{geoTargetConstant}{resourceName}, $geo_target_constant_suggestion->{geoTargetConstant}{name}, $geo_target_constant_suggestion->{geoTargetConstant}{countryCode}, $geo_target_constant_suggestion->{geoTargetConstant}{targetType}, $geo_target_constant_suggestion->{geoTargetConstant}{status}, $geo_target_constant_suggestion->{locale}, $geo_target_constant_suggestion->{reach}, $geo_target_constant_suggestion->{searchTerm}; } return 1; }
Целевые рекламные кампании, ориентированные на близость к определенному местоположению.
Иногда может потребоваться более точный таргетинг, чем по городу или стране. Например, вы можете захотеть рекламировать свои супермаркеты в радиусе 10 километров от вашего магазина. В таких случаях можно использовать таргетинг по близости . Код для создания целевого объекта по близости аналогичен добавлению целевого объекта по местоположению, за исключением того, что вам нужно создать объект ProximityInfo вместо объекта LocationInfo .
Java
private static CampaignCriterion buildProximityLocation(String campaignResourceName) { Builder builder = CampaignCriterion.newBuilder().setCampaign(campaignResourceName); ProximityInfo.Builder proximityBuilder = builder.getProximityBuilder(); proximityBuilder.setRadius(10.0).setRadiusUnits(ProximityRadiusUnits.MILES); AddressInfo.Builder addressBuilder = proximityBuilder.getAddressBuilder(); addressBuilder .setStreetAddress("38 avenue de l'Opéra") .setCityName("Paris") .setPostalCode("75002") .setCountryCode("FR"); return builder.build(); }
C#
private CampaignCriterion buildProximityCriterion(string campaignResourceName) { ProximityInfo proximity = new ProximityInfo() { Address = new AddressInfo() { StreetAddress = "38 avenue de l'Opéra", CityName = "Paris", PostalCode = "75002", CountryCode = "FR" }, Radius = 10d, // Default is kilometers. RadiusUnits = ProximityRadiusUnits.Miles }; return new CampaignCriterion() { Campaign = campaignResourceName, Proximity = proximity }; }
PHP
private static function createProximityCampaignCriterionOperation(string $campaignResourceName) { // Constructs a campaign criterion as a proximity. $campaignCriterion = new CampaignCriterion([ 'proximity' => new ProximityInfo([ 'address' => new AddressInfo([ 'street_address' => '38 avenue de l\'Opéra', 'city_name' => 'Paris', 'postal_code' => '75002', 'country_code' => 'FR', ]), 'radius' => 10.0, // Default is kilometers. 'radius_units' => ProximityRadiusUnits::MILES ]), 'campaign' => $campaignResourceName ]); return new CampaignCriterionOperation(['create' => $campaignCriterion]); }
Python
def create_proximity_op( client: GoogleAdsClient, customer_id: str, campaign_id: str ) -> CampaignCriterionOperation: campaign_service: CampaignServiceClient = client.get_service( "CampaignService" ) # Create the campaign criterion. campaign_criterion_operation: CampaignCriterionOperation = client.get_type( "CampaignCriterionOperation" ) campaign_criterion: CampaignCriterion = campaign_criterion_operation.create campaign_criterion.campaign = campaign_service.campaign_path( customer_id, campaign_id ) campaign_criterion.proximity.address.street_address = "38 avenue de l'Opera" campaign_criterion.proximity.address.city_name = "Paris" campaign_criterion.proximity.address.postal_code = "75002" campaign_criterion.proximity.address.country_code = "FR" campaign_criterion.proximity.radius = 10 # Default is kilometers. campaign_criterion.proximity.radius_units = ( client.enums.ProximityRadiusUnitsEnum.MILES ) return campaign_criterion_operation
Руби
def create_proximity(client, customer_id, campaign_id) client.operation.create_resource.campaign_criterion do |criterion| criterion.campaign = client.path.campaign(customer_id, campaign_id) criterion.proximity = client.resource.proximity_info do |proximity| proximity.address = client.resource.address_info do |address| address.street_address = "38 avenue de l'Opéra" address.city_name = "Paris" address.postal_code = "75002" address.country_code = "FR" end proximity.radius = 10 proximity.radius_units = :MILES end end end
Perl
sub create_proximity_campaign_criterion_operation { my ($campaign_resource_name) = @_; # Construct a campaign criterion as a proximity. my $campaign_criterion = Google::Ads::GoogleAds::V22::Resources::CampaignCriterion->new({ proximity => Google::Ads::GoogleAds::V22::Common::ProximityInfo->new({ address => Google::Ads::GoogleAds::V22::Common::AddressInfo->new({ streetAddress => "38 avenue de l'Opéra", cityName => "cityName", postalCode => "75002", countryCode => "FR" } ), radius => 10.0, # Default is kilometers. radiusUnits => MILES } ), campaign => $campaign_resource_name }); return Google::Ads::GoogleAds::V22::Services::CampaignCriterionService::CampaignCriterionOperation ->new({ create => $campaign_criterion }); }
Получение географических целей
Получить географические целевые данные для кампании можно с помощью GoogleAdsService.SearchStream . Фильтровать результаты можно в условии WHERE .
SELECT
campaign_criterion.campaign,
campaign_criterion.location.geo_target_constant,
campaign_criterion.proximity.geo_point.longitude_in_micro_degrees,
campaign_criterion.proximity.geo_point.latitude_in_micro_degrees,
campaign_criterion.proximity.radius,
campaign_criterion.negative
FROM campaign_criterion
WHERE
campaign_criterion.campaign = 'customers/{customer_id}/campaigns/{campaign_id}'
AND campaign_criterion.type IN (LOCATION, PROXIMITY)
Обновить географические цели
Для обновления целевых местоположений для кампании необходимо получить список существующих географических целей и сравнить его со списком новых целей. Затем можно использовать операцию remove для удаления ненужных целей и операцию create для добавления новых необходимых географических целей (которые отсутствуют в существующей кампании).
Исключить географические цели
Вы также можете исключить LocationInfo , но не ProximityInfo . Эта функция наиболее полезна, если вы хотите нацелиться на регион, но исключить подрегион (например, чтобы нацелиться на все Соединенные Штаты, за исключением Нью-Йорка). Чтобы исключить регион, установите negative поле в CampaignCriterion в значение true .
Целевая аудитория: несколько географических регионов
С помощью LocationGroupInfo можно настроить кампанию на таргетирование нескольких географических регионов. Регион центрируется на местоположениях, определенных расширениями местоположения кампании.
Радиус, заданный в LocationGroupInfo определяет круговую область вокруг каждого местоположения и состоит из объекта radius , параметра length и radius_units , который может быть метрами или милями ( LocationGroupRadiusUnitsEnum ).
Местоположение в LocationGroupInfo можно фильтровать по списку идентификаторов критериев геотаргетинга, заданных в поле geo_target_constant . Если этот параметр задан, то никакие местоположения, не соответствующие указанным критериям, не будут учитываться.
Расширенные параметры определения местоположения с помощью GeoTargetTypeSetting
Помимо указания местоположений для таргетирования или исключения, вы можете уточнить, как Google Ads сопоставляет пользователей с этими местоположениями, используя расширенные параметры местоположения. Эти настройки управляются через Campaign.GeoTargetTypeSetting .
Этот параметр состоит из двух полей:
-
positive_geo_target_type: Определяет, как пользователи сопоставляются с целевыми местоположениями. -
negative_geo_target_type: Определяет, как пользователи сопоставляются с местоположениями, которые вы исключаете .
Положительные параметры таргетинга ( positive_geo_target_type )
Для таргетирования по местоположению вы можете выбрать один из следующих вариантов, используя значения из набора данных PositiveGeoTargetTypeEnum :
PRESENCE_OR_INTEREST(Рекомендуемое значение по умолчанию) :- Охватывает людей, которые, вероятно, находятся или регулярно находятся в целевых районах, а также людей, проявивших интерес к этим районам.
- Интерес может проявляться в поисковых запросах, предыдущих посещениях или просмотренном контенте, связанном с данным местоположением.
- Этот вариант обеспечивает наиболее широкий охват.
PRESENCE:- Охватывает только тех людей, которые, вероятно, физически находятся или регулярно посещают целевые регионы.
- Этот подход более ограничительный и полезный, если ваши услуги или товары предназначены исключительно для людей, физически присутствующих в данном месте.
Примечание: Другие значения, такие как SEARCH_INTEREST , устарели и больше не могут быть установлены для большинства типов кампаний.
Настройки отрицательного таргетинга ( negative_geo_target_type )
Для исключений из списка мест используйте NegativeGeoTargetTypeEnum :
-
PRESENCE(Рекомендуемое значение по умолчанию) :- Исключаются лица, которые, вероятно, физически находятся в исключенных вами местах.
- Люди, находящиеся за пределами исключенных зон, даже если они ими интересуются, все равно могут увидеть вашу рекламу, при условии, что она соответствует вашим параметрам таргетинга.
Примечание: значение PRESENCE_OR_INTEREST , как правило, не поддерживается для отрицательного геотаргетинга в большинстве типов кампаний.
Управление расширенными параметрами местоположения
Вы можете управлять этими настройками, обновив объект Campaign.geo_target_type_setting .
Пример: Настройка таргетинга кампании только по PRESENCE .
Вот концептуальный пример того, как можно структурировать вызов API для изменения параметра positive_geo_target_type . Точный код будет различаться в зависимости от языка клиентской библиотеки.
// Conceptual structure for a Campaign update operation
operations {
update {
resource_name: "customers/{customer_id}/campaigns/{campaign_id}"
geo_target_type_setting {
positive_geo_target_type: PRESENCE
// negative_geo_target_type remains at its default PRESENCE if not specified
}
}
update_mask {
paths: "geo_target_type_setting.positive_geo_target_type"
}
}
Чтобы получить текущие настройки, включите в поисковый запрос GoogleAdsService поля campaign.geo_target_type_setting.positive_geo_target_type и campaign.geo_target_type_setting.negative_geo_target_type .
Настроив эти параметры, вы получаете более детальный контроль над тем, кто видит вашу рекламу, в зависимости от их географического местоположения, что в большей степени соответствует целям вашего бизнеса.