Standorterweiterungen

AdWords-Standorterweiterungen enthalten Ihre Geschäftsadresse, Telefonnummer und eine Kartenmarkierung mit Ihrem Anzeigentext. Seit ihrer Einführung wurden mehrere wichtige Änderungen an Standorterweiterungen vorgenommen. Until mid‒2014, business location information was managed by using the legacy location extensions and CampaignAdExtensionService. Danach wurden sie entweder über ein mit AdWords verknüpftes Google My Business-Konto verwaltet oder mithilfe aktualisierter manueller Standorterweiterungsfeeds erstellt. Manuelle Standorterweiterungsfeeds wurden inzwischen eingestellt und sämtliche Standorte sollten jetzt über Google My Business verwaltet werden, entweder mithilfe der Google My Business-Standortverwaltung oder der Google My Business API.

Im folgenden Leitfaden wird ein komplettes Beispiel präsentiert, wie Standorte mithilfe der Google My Business API erstellt und mithilfe der AdWords API mit Ihren Anzeigen verknüpft werden.

Standorterweiterungen mit Google My Business

Google My Business ist das zentrale Repository für Ihre Standorte für alle Google-Produkte. Sie müssen sich deshalb nicht mehr um die Synchronisierung Ihrer Standorte in Google My Business mit den Standorterweiterungen in AdWords kümmern. Es genügt, einmalig die erforderlichen Feedobjekte einzurichten. Von AdWords werden automatisch die eigenen Standorterweiterungen mit den neuesten Daten aus Ihrem Google My Business-Konto synchronisiert.

In diesem Abschnitt erhalten Sie eine Anleitung, wie Sie Standorte programmatisch mithilfe der Google My Business API erstellen und mit AdWords verknüpfen, indem Sie die erforderlichen Feedobjekte erstellen. Wenn Sie Standorte mit der Google My Business-Standortverwaltung erstellen möchten, können Sie die folgenden Abschnitte überspringen und direkt mit Schritt 3 fortfahren.

Ablauf

Wenn Sie mit dem Konzept von Feeds in AdWords nicht vertraut sind, lesen Sie zunächst den Leitfaden zu Feeds für Sitelinks. Die folgende Anleitung baut auf diesem Leitfaden auf.

Die Schritte zum Erstellen und Verknüpfen eines Google My Business-Kontos sind wie folgt:

  1. Authentifizieren Sie sich für Google My Business- und AdWords API-Aufrufe (OAuth 2.0).

  2. Erstellen Sie mithilfe der Google My Business API einen neuen Standort.

    1. Rufen Sie mit accounts.list die Google My Business-Konten ab, deren Inhaber Sie sind oder für die Sie Verwaltungsrecht haben.
    2. Wählen Sie das Konto aus, mit dem Sie arbeiten möchten (z. B. AccountType = BUSINESS).
    3. Erstellen Sie den Standort und geben Sie ein Label, eine Adresse, Öffnungszeiten usw. an.
  3. Erstellen Sie einen neuen Standorterweiterungsfeed, der mit Ihrem Google My Business-Konto verknüpft ist.

    1. Legen Sie systemFeedGenerationData auf ein PlacesLocationFeedData-Objekt fest, das Informationen zu Ihrem Google My Business-Konto enthält.
    2. Legen Sie origin auf ADWORDS fest.
    3. Geben Sie keine feedAttributes an. AdWords erstellt diese automatisch, da es sich um einen vom System generierten Feed handelt.
    4. Führen Sie einen FeedService.mutate-ADD-Vorgang aus.
  4. Verknüpfen Sie den Feed mit dem Kunden.

    1. Verwenden Sie dazu die feedId aus Schritt 3.
    2. Verwenden Sie für LOCATION den Platzhaltertyp 7.
    3. Verwenden Sie eine geeignete matchingFunction.
    4. Führen Sie einen CustomerFeedService.mutate-ADD-Vorgang aus.
  5. (Optional) Verknüpfen Sie den Feed mit bestimmten Kampagnen oder Anzeigengruppen.

    1. Verwenden Sie dazu die feedId aus Schritt 3.
    2. Verwenden Sie für LOCATION den Platzhaltertyp 7.
    3. Verwenden Sie eine matchingFunction, um nach dem Label aus Schritt 2.3 zu filtern.
    4. Führen Sie einen CampaignFeedService.mutate-ADD- oder AdGroupFeedService.mutate-ADD-Vorgang aus.

Wenn Sie Feeds bereits von anderen Erweiterungen her kennen, ist Ihnen vielleicht aufgefallen, dass in den oben aufgeführten Schritten kein FeedMapping erstellt wird. Da es sich bei diesem Feed um einen vom System generierten Feed handelt, sind in AdWords bereits Informationen darüber vorhanden, wie die Attribute des Feeds den Platzhalterfeldern für Standorterweiterungen zuzuordnen sind. Die Angabe dieser Informationen ist daher nicht erforderlich. In den folgenden Abschnitten wird erläutert, wie Sie das systemFeedGenerationData-Objekt beim Erstellen eines neuen Feeds (Schritt 3.1) konfigurieren. Weiter unten finden Sie ein Codebeispiel, in dem alle Teile kombiniert sind.

PlacesLocationFeedData-Objekt für den Feed erstellen

Durch Festlegen des systemFeedGenerationData-Attributs auf Ihren Feed wird AdWords angewiesen,

  • Google My Business- und AdWords-Konten miteinander verknüpfen,
  • automatisch Feedattribute für Ihren Feed zu erstellen,
  • ein FeedMapping für Ihren Feed und den criterionType zur geografischen Ausrichtung (77) zu erstellen,
  • (optional) die Standorte zu beschränken, die von AdWords mit Ihrem Google My Business-Konto synchronisiert werden.

Legen Sie die Attribute des PlacesLocationFeedData-Objekts wie folgt fest:

Attribut Erforderlich Beschreibung
emailAddress Ja E-Mail-Adresse des Inhabers oder Administrators Ihres Google My Business-Kontos. Muss mit der in oAuthInfo angegebenen E-Mail-Adresse übereinstimmen.
oAuthInfo Ja OAuth2-Informationen, die Ihrem AdWords-Konto Zugriff auf Ihr Google My Business-Konto gewähren.
businessAccountIdentifier Nein Konto-ID des verwalteten Unternehmens, dessen Standorte verwendet werden sollen. Wenn Sie die Google My Business API verwenden, können Sie die ID dem account_id-Teil von name von Account entnehmen. Alternativ können Sie den BUSINESS_ACCOUNT_ID-Teil aus der Unternehmens-URL dieses Formulars kopieren:
https://business.google.com/b/BUSINESS_ACCOUNT_ID/...
businessNameFilter Nein Name des Unternehmens, das mit AdWords synchronisiert werden soll
categoryFilters Nein Kategorien der Einträge, die mit AdWords synchronisiert werden sollen
labelFilters Nein Labels der Einträge, die mit AdWords synchronisiert werden sollen

OAuthInfo-Objekt für PlacesLocationFeedData erstellen

Das Attribut oAuthInfo für Ihre PlacesLocationFeedData enthält die Informationen, die erforderlich sind, damit Ihr AdWords-Konto Standorte aus Ihrem Google My Business-Konto lesen kann.

Legen Sie die Attribute des OAuthInfo-Objekts wie folgt fest:

Attribut Wert Beschreibung
httpMethod GET oder PUT HTTP-Methode zum Abrufen der Autorisierungsinformationen
httpRequestUrl https://www.googleapis.com/auth/plus.business.manage OAuth-Gültigkeitsbereich für Google My Business. Verwenden Sie immer den hier angegebenen Wert, wenn Sie einen Google My Business-Feed einrichten.
httpAuthorizationHeader Bearer OAUTH_ACCESS_TOKEN Der Autorisierungsheader mit dem OAuth-Zugriffstoken, das Ihrem AdWords-Konto das Recht erteilt, Daten aus Ihrem Google My Business-Konto zu lesen. Geben Sie für OAUTH_ACCESS_TOKEN ein Zugriffstoken an, das für die emailAddress der PlacesLocationFeedData und einen Gültigkeitsbereich, der mit httpRequestUrl übereinstimmt, aus OAuth-Anmeldedaten generiert wurde.

Vollständiges Codebeispiel

Der folgende Code verwendet die Java-Clientbibliotheken sowohl für die Google My Business API als auch für die AdWords API. Die Einrichtung für die von Ihnen verwendete Programmiersprache wird in der entsprechenden Anleitung beschrieben.

Schritt 1: Authentifizieren Sie sich für Google My Business und AdWords API-Aufrufe (OAuth 2.0).

// Creating the default factory and transport (used later)
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

// Load the credentials from the ads.properties file.
// Please note: This example assumes that your AdWords and MyBusiness accounts
// are linked to the same Google account, and that both scopes were used when
// generating the refresh token:
// - https://www.googleapis.com/auth/adwords
// - https://www.googleapis.com/auth/plus.business.manage
// If you are using different Google accounts, you must authenticate
// separately and maintain two credentials (see
// /my-business/content/set-up-java-client).
Credential credential =
    new OfflineCredentials.Builder()
        .forApi(Api.ADWORDS)
        .withHttpTransport(httpTransport)
        .fromFile()
        .build()
        .generateCredential();

Schritt 2: Erstellen Sie einen neuen Standort mithilfe der Google My Business API.

// Initialize GMB.
Mybusiness gmb =
    new Mybusiness.Builder(httpTransport, jsonFactory, credential)
        .setApplicationName(APPLICATION_NAME)
        .build();
// Get list of GMB accounts (2a).
Mybusiness.Accounts.List listAccounts = gmb.accounts().list();
ListAccountsResponse response = listAccounts.execute();
List<Account> accounts = response.getAccounts();

// Find the account to work with (2b). The first BUSINESS account is used
// here, but you can use any other account as well (e.g., PERSONAL).
Account mainAccount = null;
for (Account account : accounts) {
  if (account.getType().equalsIgnoreCase("BUSINESS")) {
    mainAccount = account;
    break;
  }
}
if (mainAccount == null) {
  throw new RuntimeException("Main GMB account not found");
}
// Create the location (2c).
Location location = new Location();
location.setLocationName("My Company");
location.setStoreCode("Company-1");
location.setPrimaryPhone("16505550001");
location.setPrimaryCategory(new Category().setCategoryId("gcid:software_company"));
location.setWebsiteUrl("https://www.example.com/");
// Create an address.
Address address = new Address();
List<String> addressLines = new ArrayList<String>();
addressLines.add("1600 Amphitheatre Pkwy");
address.setAddressLines(addressLines);
address.setLocality("Mountain View");
address.setAdministrativeArea("CA");
address.setCountry("US");
address.setPostalCode("94043");
location.setAddress(address);
// Create business hours (optional).
BusinessHours businessHours = new BusinessHours();
List<TimePeriod> periods = new ArrayList<TimePeriod>();
List<String> days =
    Arrays.asList("Monday", "Tuesday", "Wednesday", "Thursday", "Friday");
for (String day : days) {
  TimePeriod period = new TimePeriod();
  period.setOpenDay(day);
  period.setOpenTime("9:00");
  period.setCloseTime("17:00");
  period.setCloseDay(day);
  periods.add(period);
}
businessHours.setPeriods(periods);
location.setRegularHours(businessHours);

// Assign a label to the location (optional). This example uses the AdWords
// customer ID as a label to associate the location with an ad group in AdWords.
// You can use any label value to identify locations, or no label at all
// (e.g., filter by business name or category).
location.setLabels(Collections.singletonList(INSERT_CUSTOMER_ID_HERE));
CreateLocationRequest createLocationRequest = new CreateLocationRequest();
createLocationRequest.setLocation(location);
createLocationRequest.setLanguageCode("en-US");
// Use a random request ID.
createLocationRequest.setRequestId(UUID.randomUUID().toString());
Mybusiness.Accounts.Locations.Create createLocation =
    gmb.accounts().locations().create(mainAccount.getName(),
    createLocationRequest);
Location createdLocation = createLocation.execute();

Schritt 3: Erstellen Sie einen neuen Feed, der mit Ihrem Google My Business verknüpft ist.

// Initialize AdWords.
AdWordsSession session = new AdWordsSession.Builder()
    .fromFile()
    .withOAuth2Credential(credential)
    .build();
session.setClientCustomerId(INSERT_CUSTOMER_ID_HERE);
AdWordsServices services = new AdWordsServices();
FeedServiceInterface feedService =
    services.get(session, FeedServiceInterface.class);
// Create the feed object.
Feed gmbFeed = new Feed();
gmbFeed.setName("GMB feed #" + System.currentTimeMillis());
// Create the PlacesLocationFeedData object (3a).
PlacesLocationFeedData feedData = new PlacesLocationFeedData();
feedData.setEmailAddress(GMB_ACCOUNT_EMAIL);
OAuthInfo oAuthInfo = new OAuthInfo();
oAuthInfo.setHttpMethod("GET");
oAuthInfo.setHttpRequestUrl(
    "https://www.googleapis.com/auth/plus.business.manage");
oAuthInfo.setHttpAuthorizationHeader(
    String.format("Bearer %s", credential.getAccessToken()));
feedData.setOAuthInfo(oAuthInfo);
gmbFeed.setSystemFeedGenerationData(feedData);
// Since this feed's feed items will be managed by AdWords,
// you must set its origin to ADWORDS (3b).
gmbFeed.setOrigin(FeedOrigin.ADWORDS);
// Note: No feed attributes for the feed were specified, as this is a
// system-generated feed (3c).
// Create an operation to add the feed.
FeedOperation feedOperation = new FeedOperation();
feedOperation.setOperand(gmbFeed);
feedOperation.setOperator(Operator.ADD);
// Add the feed (3d).
FeedReturnValue addFeedResult = feedService.mutate(
    new FeedOperation[] {feedOperation});
Feed createdFeed = addFeedResult.getValue(0);

Schritt 4: Feed mit dem Kunden verknüpfen

CustomerFeedServiceInterface customerFeedService =
    services.get(session, CustomerFeedServiceInterface.class);
CustomerFeed customerFeed = new CustomerFeed();
// Set feedId and placeholder type (4a + 4b).
customerFeed.setFeedId(createdFeed.getId());
customerFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_LOCATION});
// Create a matching function that will always evaluate to true (4c).
Function customerMatchingFunction = new Function();
ConstantOperand constOperand = new ConstantOperand();
constOperand.setType(ConstantOperandConstantType.BOOLEAN);
constOperand.setBooleanValue(true);
customerMatchingFunction.setLhsOperand(
    new FunctionArgumentOperand[] {constOperand});
customerMatchingFunction.setOperator(FunctionOperator.IDENTITY);
customerFeed.setMatchingFunction(customerMatchingFunction);
// Create an operation to add the customer feed.
CustomerFeedOperation customerFeedOperation = new CustomerFeedOperation();
customerFeedOperation.setOperand(customerFeed);
customerFeedOperation.setOperator(Operator.ADD);
// Add the feed (4d).
CustomerFeedReturnValue customerFeedResult = customerFeedService.mutate(
    new CustomerFeedOperation[] {customerFeedOperation});
CustomerFeed createdCustomerFeed = customerFeedResult.getValue(0);

Schritt 5: Feed mit bestimmten Anzeigengruppen verknüpfen (analog für Kampagnen)

AdGroupFeedServiceInterface adgroupFeedService =
    services.get(session, AdGroupFeedServiceInterface.class);
// Create the ad group feed.
AdGroupFeed adgroupFeed = new AdGroupFeed();
adgroupFeed.setAdGroupId(AD_GROUP_ID);
// Set feedId and placeholder type (5a + 5b).
adgroupFeed.setFeedId(createdFeed.getId());
adgroupFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_LOCATION});
// Define matching function based on the label (5c).
Function matchingFunction = new Function();
String matchingFunctionString = String.format(
    "EQUALS(FeedAttribute[%d, 14], \"%s\")",
    createdFeed.getId(),
    createdLocation.getLabels().get(0));
matchingFunction.setFunctionString(matchingFunctionString);
adgroupFeed.setMatchingFunction(matchingFunction);
// Create an operation to add the ad group feed.
AdGroupFeedOperation operation = new AdGroupFeedOperation();
operation.setOperand(adgroupFeed);
operation.setOperator(Operator.ADD);
// Add the feed (5d).
AdGroupFeedReturnValue result = adgroupFeedService.mutate(
    new AdGroupFeedOperation[]{operation});
AdGroupFeed createdAdGroupFeed = result.getValue(0);

Standorterweiterungen filtern

Standorterweiterungen werden automatisch auf jede Kampagne und Anzeigengruppe im Konto angewendet. Mithilfe von Filtern können Standorterweiterungen aber auch auf ausgewählte Anzeigengruppen oder Kampagnen angewendet werden.

Filterstrategien

Mit Standorterweiterungen können Sie mithilfe verschiedener Mechanismen auf mehreren Ebenen Ihres Kontos Standortfilter festlegen. Verwenden Sie die matchingFunction eines CampaignFeed oder AdGroupFeed, wenn in unterschiedlichen Kampagnen oder Anzeigengruppen andere Standorte zu sehen sein sollen.

Der spezifischste Filter hat Vorrang. Angenommen, Sie verfügen über

  • einen CustomerFeed,
  • einen CampaignFeed für Kampagne A,
  • einen AdGroupFeed für Anzeigengruppe G in Kampagne A und
  • eine Kampagne B, die weder über einen CampaignFeed noch einen AdGroupFeed verfügt.

Mit dieser Konfiguration ergibt sich das folgende Verhalten (die gepunkteten Linien zeigen, welche Abgleichfunktion für welche Anzeige verwendet wird):

  • Anzeigen, die für Anzeigengruppe G geschaltet werden, enthalten Standorterweiterungen ausschließlich bei Objekten, die der Abgleichfunktion des AdGroupFeed entsprechen.
  • Anzeigen, die für die verbleibenden Anzeigengruppen in Kampagne A ausgeliefert werden, zeigen Standorterweiterungen ausschließlich für Objekte, die der Abgleichfunktion des CampaignFeed entsprechen.
  • Anzeigen, die für die Kampagne B geschaltet werden, zeigen Standorterweiterungen für Objekte, die der Abgleichfunktion des CustomerFeed entsprechen.

Attribute zum Filtern verwenden

Filter in Feedobjekten schränken die Feedobjekte ein, die über die Attribute businessNameFilter, categoryFilters oder labelFilters des PlacesLocationFeedData-Objekts synchronisiert werden. Filter in den anderen Objekten bestimmen, welche Feedobjekte in AdWords als Standorterweiterungen für eine bestimmte Kombination aus Kunde, Kampagne und Anzeigengruppe verwendet werden. Sie könnten diese Filter verwenden, wenn

  • Sie dasselbe Google My Business-Konto mit mehreren AdWords-Konten verwenden und jedes AdWords-Konto mit einer Untergruppe von Standorten logisch verknüpft ist.
  • Wenn es in Ihrem Google My Business-Konto Standorte gibt, die niemals in Anzeigen zu sehen sein sollen.

Für ein Konto, eine Kampagne oder eine Anzeigengruppe können Sie Abgleichfunktionen zum Filtern angeben, die auf einem der im Standorterweiterungsfeed verfügbaren Attribute basieren. Wir empfehlen, die folgenden Attribute zum Filtern zu verwenden:

  • Labels (Platzhalter 14): Durch die Angabe von Labels für jeden Standort in Google My Business und Verwendung dieser Labels zum Filtern in AdWords können Sie Ihre Filter vollständig anpassen. Zum Beispiel können Sie die Kundennummer oder eine eindeutige ID, die von Ihrer Anwendung generiert wird, verwenden.

    Ist labelFilters angegeben, sind nur Einträge, die eines der angegebenen Labels aufweisen, Kandidaten für eine Synchronisierung mit Feedelementen. Wenn labelFilters keine Elemente enthält, sind alle Einträge Kandidaten für die Synchronisierung. Außerdem werden alle Labels eines Google My Business-Eintrags, die ein Feedattribut mit feedAttributeId = 14 und type = STRING_LIST aufweisen, synchronisiert. Sie können nach Feedelementen filtern, die mindestens ein Label aufweisen, indem Sie in Ihrer Abgleichfunktion wie folgt eine Bedingung angeben:

    CONTAINS_ANY(FeedAttribute[FeedId,14],{"label1","label2","label3"})
    
  • Name des Unternehmens (Platzhalter 1): Für eine noch feinere Filterung können Sie den standortspezifischen Namen des Unternehmens verwenden.

  • Unternehmenskategorie (Platzhalter 9): Wenn Sie nach Kategorien filtern, können Sie weniger eingeschränkte Übereinstimmungen definieren oder Zweideutigkeiten vermeiden, indem Sie die Unternehmenskategorie mit AND mit dem Namen des Unternehmens kombinieren.

Weitere Informationen zum Filtern nach Feedattribut-ID finden Sie im Leitfaden für Abgleichfunktionen. Im Leitfaden für Sitelinks mit Feeddiensten finden Sie Beispiele zum Erstellen von CampaignFeeds und AdGroupFeeds.

Feedback geben zu...