Questa guida descrive il targeting per località e come utilizzare l'API Google Ads per aggiungere, recuperare e aggiornare il targeting per località per le tue campagne.
Per informazioni sui limiti di targeting, consulta la sezione Limiti di targeting dell'articolo Informazioni sui limiti dell'account Google Ads.
Perché il targeting geografico è importante?
Il targeting per località ti consente di pubblicare annunci per gli utenti di una determinata regione geografica. Supponiamo, ad esempio, che tu stia facendo pubblicità per una catena di supermercati. Senza il targeting per località, i tuoi annunci verranno mostrati in tutte le regioni del mondo e potrebbero ricevere clic da utenti di regioni in cui non hai supermercati. Ciò genera costi senza possibilità di un ritorno sull'investimento. Con il targeting per località, le tue campagne mostrano annunci solo nelle regioni in cui hai supermercati aperti. Questo approccio ti consente anche di scegliere come target diretto i clienti che cercano supermercati a livello locale.
L'API Google Ads ti consente di scegliere come target dei tuoi annunci un paese, una regione o un'area di prossimità intorno a un punto geografico specifico.
Scopri di più sul targeting degli annunci per località geografiche.
Campagne con targeting geografico per una regione
Puoi scegliere come target delle campagne qualsiasi regione geografica per la quale Google Ads
supporta il targeting per località, ad esempio un paese, uno stato, una città o una regione
postale. Ogni località target è identificata in modo univoco da un ID criterio. Puoi
cercare un ID criterio utilizzando
GeoTargetConstantService.SuggestGeoTargetConstants.
Il resource_name di ogni
GeoTargetConstant ha la forma
geoTargetConstants/{Criterion ID}. Ad esempio, il valore resource_name dello stato di New York è geoTargetConstants/21167.
Puoi aggiungere target geografici alle tue campagne utilizzando
CampaignCriterionService. Il
seguente snippet di codice mostra come scegliere come target la campagna con un ID criterio.
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
Ruby
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 potrebbe ritirare alcuni criteri di località per vari motivi:
la località potrebbe essere ristrutturata in aree più piccole o più grandi, cambiamenti
geopolitici e così via. Fai riferimento al campo status di
un oggetto GeoTargetConstant per determinare se una località è
ENABLED
o
REMOVAL_PLANNED.
Cercare per nome della località
Puoi anche cercare l'ID criterio in base al nome della località utilizzando
GeoTargetConstantService.SuggestGeoTargetConstants.
Il seguente esempio di codice mostra come cercare un ID criterio di località in base al nome della località.
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})." )
Ruby
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; }
Scegliere il targeting delle campagne in base alla prossimità a una località
A volte potresti voler scegliere come target un'area ancora più precisa di una città o
un paese. Ad esempio, potresti voler pubblicizzare i tuoi supermercati entro 10
chilometri dalla sede del tuo negozio. In questi casi, puoi utilizzare il targeting
per prossimità. Il codice per
creare un target di prossimità è simile a quello per aggiungere un target di località, tranne per il fatto che
devi creare un oggetto ProximityInfo
anziché un oggetto 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
Ruby
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 }); }
Recupera i target geografici
Puoi recuperare i target geografici per una campagna utilizzando
GoogleAdsService.SearchStream.
Puoi filtrare i risultati nella clausola 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)
Aggiornare i target geografici
Per aggiornare le località target di una campagna, devi recuperare l'elenco dei
target geografici esistenti e confrontarlo con l'elenco dei nuovi target. Puoi quindi
utilizzare l'operazione remove per rimuovere i target che non ti servono e l'operazione
create per aggiungere i nuovi target geografici che ti servono (ma che non sono presenti nella
campagna esistente).
Escludere i target geografici
Puoi anche escludere LocationInfo, ma non
ProximityInfo. Questa funzionalità è più utile se
vuoi scegliere come target una regione, ma escludere una sottoregione (ad esempio, per scegliere come target
tutti gli Stati Uniti, ad eccezione di New York City). Per escludere una regione, imposta
il campo negative in
CampaignCriterion su true.
Scegliere come target più regioni geografiche
Utilizzando un LocationGroupInfo, puoi consentire a una campagna di scegliere come target più regioni geografiche. Una regione è centrata sulle
località definite dalle estensioni di località della campagna.
Il raggio definito in LocationGroupInfo descrive una regione circolare intorno
a ogni località ed è costituito da un oggetto radius, dalla lunghezza e dall'radius_units, che può essere in metri o
in miglia (LocationGroupRadiusUnitsEnum).
Le località in un LocationGroupInfo possono essere filtrate in base a un elenco di ID criteri di geotargeting prescritti nel campo geo_target_constant. Se definiti, non verranno scelte come target località al di fuori degli ID criteri forniti.
Opzioni avanzate di targeting per località con GeoTargetTypeSetting
Oltre a specificare le località target o escluse, puoi perfezionare il modo in cui Google Ads
associa gli utenti a queste località utilizzando le opzioni avanzate di targeting per località. Queste impostazioni
sono gestite tramite
Campaign.GeoTargetTypeSetting.
Questa impostazione è costituita da due campi:
positive_geo_target_type: determina la modalità di corrispondenza degli utenti per le località che targetizzi.negative_geo_target_type: determina la modalità di corrispondenza degli utenti per le località che escludi.
Impostazioni di targeting positivo (positive_geo_target_type)
Puoi scegliere tra le seguenti opzioni per il targeting per località positivo,
utilizzando i valori di
PositiveGeoTargetTypeEnum:
PRESENCE_OR_INTEREST(valore predefinito consigliato):- Raggiunge le persone che è probabile si trovino o che si trovano abitualmente nelle località target, PLUS le persone che hanno mostrato interesse per le località target.
- L'interesse può essere segnalato da termini di ricerca, visite precedenti o contenuti consumati correlati alla località.
- Questa opzione offre la copertura più ampia.
PRESENCE:- Raggiunge solo le persone che probabilmente si trovano fisicamente o regolarmente nelle località target.
- Questo tipo di targeting è più restrittivo e utile se i tuoi servizi o prodotti sono strettamente limitati alle persone fisicamente presenti in una zona.
Nota: altri valori come SEARCH_INTEREST sono ritirati e non sono più impostabili
per la maggior parte dei tipi di campagna.
Impostazioni del targeting per esclusione (negative_geo_target_type)
Per le località che vuoi escludere, utilizza
NegativeGeoTargetTypeEnum:
PRESENCE(impostazione predefinita consigliata):- Esclude le persone che è probabile si trovino fisicamente nelle località che hai escluso.
- Le persone al di fuori delle aree escluse, anche se interessate, potrebbero comunque visualizzare i tuoi annunci, a condizione che corrispondano al tuo targeting positivo.
Nota: il valore PRESENCE_OR_INTEREST in genere non è supportato per il geotargeting negativo nella maggior parte dei tipi di campagna.
Gestire le opzioni avanzate di targeting per località
Puoi controllare queste impostazioni aggiornando l'oggetto Campaign.geo_target_type_setting.
Esempio: impostazione di una campagna per il targeting solo in base a PRESENCE
Di seguito è riportato un esempio concettuale di come potresti strutturare una chiamata API per modificare
positive_geo_target_type. Il codice esatto varia in base al linguaggio della libreria client.
// 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"
}
}
Per recuperare le impostazioni correnti, includi
campaign.geo_target_type_setting.positive_geo_target_type e
campaign.geo_target_type_setting.negative_geo_target_type nella
query di ricerca GoogleAdsService.
Configurando queste impostazioni, ottieni un controllo più granulare su chi vede i tuoi annunci in base al rapporto con le località geografiche che hai specificato, allineandoti più strettamente ai tuoi obiettivi di business.