住所表示オプション

住所表示オプションは店舗や会社の住所、電話番号、地図上のマーカーを広告文と一緒に表示する機能です。この機能は導入以降、これまでに何度か大きなアップデートがありました。2014 年の中頃まで、ビジネス情報は従来版の住所表示オプションや CampaignAdExtensionService を使用して管理していました。それ以降は、Google マイビジネスで管理し AdWords にリンクするか、アップグレード版の手動の住所表示オプション フィードを使って作成するようになりました。現在、手動の住所表示オプション フィードは既に使わなくなっており、ビジネス情報はすべて Google マイビジネス ロケーション マネージャGoogle My Business API を使って Google マイビジネスで管理する必要があります。

このガイドでは Google My Business API を使ってビジネス情報を作成する方法や、AdWords API を使用して広告とリンクする方法を詳細な例を使って解説します。

Google マイビジネスによる住所表示オプション

Google マイビジネスは Google のすべてのサービスで利用するビジネス情報の一元的なレポジトリです。Google マイビジネスのビジネス情報と AdWords の住所表示オプションの同期を取る必要はありません。必要なフィード オブジェクトを 1 回設定すれば、AdWords の住所表示オプションの情報と Google マイビジネスの最新のデータは自動的に同期することができます。

このセクションでは Google My Business API を使ってビジネス情報をプログラムで作成し、必要なフィード オブジェクトを作成して AdWords とリンクする方法を解説します。ビジネス情報の作成に Google マイビジネス ロケーション マネージャを使用したい場合は、次以降の説明をスキップしてステップ 3 から作業を進めてください。

手続き

AdWords で使用するフィードのコンセプトに馴染みがない場合は、サイトリンクのフィードに関するガイドをご覧ください。以下の手順はそのガイドを参考にしています。

ビジネス情報の作成とリンクは次の手順で行います。

  1. Google My Business API と AdWords API の呼び出しの認証を行います(OAuth 2.0)。

  2. Google My Business API を使って新しいビジネス情報を作成します。

    1. accounts.list を使用して、所有しているか管理権限を持っている Google マイビジネス アカウントを取得します。
    2. 使用するアカウントを選択します(例: AccountType = BUSINESS)。
    3. ビジネス情報を作成して、ラベル住所, 営業時間などを指定します。
  3. Google マイビジネス アカウントにリンクした新しい住所表示オプション フィードを作成します。

    1. systemFeedGenerationData の値に、Google マイビジネス アカウントの情報を含む PlacesLocationFeedData オブジェクトを設定します。
    2. origin を ADWORDS に設定します。
    3. feedAttribute は指定しません。これはシステムが生成するフィードであるため、そうした属性は AdWords で自動的に作成されます。
    4. FeedService.mutate ADD オペレーションを実行します。
  4. フィードとユーザーを関連付けます。

    1. 手順 3 の feedId を使用します。
    2. LOCATION ではプレースホルダ タイプ 7 を使用します。
    3. 適切な matchingFunction を使用します。
    4. CustomerFeedService.mutate ADD オペレーションを実行します。
  5. (任意)フィードと特定のキャンペーンまたは広告グループを関連付けます。

    1. 手順 3 の feedId を使用します。
    2. LOCATION ではプレースホルダ タイプ 7 を使用します。
    3. matchingFunction を使用して、手順 2 の 3 のラベルを基にフィルタを適用します。
    4. CampaignFeedService.mutate または AdGroupFeedService.mutate の ADD オペレーションを実行します。

他の広告表示オプションでフィードに慣れている方はお気付きかもしれませんが、上記の手順では FeedMapping を作成していません。このフィードはシステムが自動生成するもので、フィードの属性と住所表示オプションのプレースホルダ フィールドとの対応は AdWords であらかじめ認識されているため、そうした情報を提供する必要はありません。次以降のセクションでは、新しいフィールドを作成する際の systemFeedGenerationData オブジェクトの設定方法を説明します(手順 3 の 1)。すべての要素をまとめるコードサンプルについては下記をご覧ください。

フィードで PlacesLocationFeedData オブジェクトを作成する

作成したフィードで systemFeedGenerationData 属性を設定すると、AdWords に次の指示を伝えることができます。

  • Google マイビジネス アカウントと AdWords アカウントをリンクする。
  • フィードのフィード属性を自動的に作成する。
  • フィードとターゲット地域の criterionType(77)FeedMapping を自動的に作成する。
  • (任意)Google マイビジネス アカウントで AdWords が同期を取るビジネス情報を制限する。

PlacesLocationFeedData オブジェクトの属性は次のように設定します。

属性 必須 説明
emailAddress はい Google マイビジネス アカウントの所有者または管理者のメールアドレス。これは oAuthInfo で指定したアドレスと同じものにしてください。
oAuthInfo はい AdWords アカウントに Google マイビジネス アカウントへのアクセス権を付与する OAuth2 情報。
businessAccountIdentifier いいえ ビジネス情報を利用する管理対象ビジネス アカウントの ID。Google My Business API を使用している場合は、Accountnameaccount_id 部分からこの ID を取得できます。フォームのビジネス用 URL から BUSINESS_ACCOUNT_ID 部分をコピーすることもできます。
https://business.google.com/b/BUSINESS_ACCOUNT_ID/...
businessNameFilter いいえ AdWords と同期を取るビジネスの名前。
categoryFilters いいえ AdWords と同期を取るリスティングのカテゴリ。
labelFilters いいえ AdWords と同期を取るリスティングのラベル。

PlacesLocationFeedData で OAuthInfo オブジェクトを作成する

AdWords アカウントでは PlacesLocationFeedDataoAuthInfo 属性の情報を利用して、Google マイビジネス アカウントからビジネス情報を読み取ります。

OAuthInfo オブジェクトの属性は次のように設定します。

属性 説明
httpMethod GET または PUT 認証情報を取得するための HTTP メソッド。
httpRequestUrl https://www.googleapis.com/auth/plus.business.manage Google マイビジネスの OAuth スコープ。Google マイビジネスのフィードを設定する際には、必ずここに表示された値を使用します。
httpAuthorizationHeader Bearer OAUTH_ACCESS_TOKEN Google マイビジネス アカウントの読み取りアクセス権を AdWords アカウントに付与する OAuth アクセス トークンを含む認証ヘッダーOAUTH_ACCESS_TOKEN を設定すると、PlacesLocationFeedDataemailAddresshttpRequestUrl に一致するスコープの代わりに、OAuth 認証情報から生成されたアクセス トークンが使用されます。

サンプルコードの全文

次のコードでは、Google My Business API と AdWords API の両方で Java クライアント ライブラリを使用します。ご利用の言語向けの設定については、それぞれの手順説明をご覧ください。

手順 1: Google My Business API と AdWords API の呼び出しの認証を行う(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();

手順 2: 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();

手順 3: Google マイビジネスにリンクした新しいフィードを作成する

// 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);

手順 4: フィードとユーザーを関連付ける

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);

手順 5: フィードを特定の広告グループ(またはキャンペーン)に関連付ける

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);

住所表示オプションにフィルタを適用する

住所表示オプションはアカウント内のすべてのキャンペーンと広告グループに自動的に適用されます。住所表示オプションを特定の広告グループまたはキャンペーンに適用する場合はフィルタを使用します。

フィルタの使用方法

住所表示オプションでは、アカウントの複数のレベルでさまざまな内容のフィルタを定義できます。キャンペーンや広告グループによって異なるビジネス情報を表示したい場合は、CampaignFeed または AdGroupFeedmatchingFunction を使用します。

フィルタは、限定する範囲の狭いものから優先的に適用されます。たとえば、次のようなフィードを設定しているとします。

  • CustomerFeed
  • キャンペーン ACampaignFeed
  • キャンペーン A の広告グループ GAdGroupFeed
  • CampaignFeedAdGroupFeed も設定していないキャンペーン B

上記の設定ではフィルタは次のように機能します(点線はどの広告でどのマッチング関数が使用されるのかを示します)。

  • 広告グループ G の広告には、AdGroupFeed のマッチング関数で一致したアイテムの住所表示オプションだけが表示されます。
  • キャンペーン A の他のすべての広告グループの広告には、CampaignFeed のマッチング関数で一致したアイテムの住所表示オプションだけが表示されます。
  • キャンペーン B の広告には、CustomerFeed のマッチング関数で一致したアイテムの住所表示オプションが表示されます。

属性を基にフィルタを適用する

フィード オブジェクトのフィルタは PlacesLocationFeedData オブジェクトの businessNameFiltercategoryFilters、または labelFilters 属性に基づいて同期を取るフィード アイテムを限定します。その他のオブジェクトのフィルタはユーザー、キャンペーン、広告グループの特定の組み合わせで、AdWords のどのフィード アイテムが住所表示オプションとして使われるのかを指定します。これらのフィルタは次のような場合に利用できます。

  • 複数の AdWords アカウントで同じ Google マイビジネス アカウントを使用しており、各 AdWords アカウントがビジネス情報の一部と論理的に関連付けられている。
  • 広告に絶対に表示したくないビジネス情報が Google マイビジネス アカウントに保存されている。

アカウント、キャンペーン、広告グループで matchingFunction を指定すると、住所表示オプション フィードのいずれかの属性に基づいてフィルタを適用できます。フィルタは以下の属性を基に適用することをおすすめします。

  • ラベル(プレースホルダ 14): Google マイビジネスでビジネス情報ごとにラベルを指定し、AdWords のフィルタでそうしたラベルを使用すると、フィルタを全体的にカスタマイズできます。たとえばお客様 ID か、アプリケーションで生成された固有の ID を使用できます。

    labelFilters を指定した場合は、指定したラベルが設定されているリスティングだけが、FeedItem と同期を取る対象となります。labelFilters にエントリがない場合は、すべてのリスティングが同期の対象となります。また、Google マイビジネスのリスティングのラベルはすべて、feedAttributeId = 14type = STRING_LIST のフィード属性と同期が取られます。マッチング関数の条件を次のように指定すれば、ラベルが設定されているフィード アイテムにフィルタをかけることができます。

    CONTAINS_ANY(FeedAttribute[FeedId,14],{"label1","label2","label3"})
    
  • ビジネス名(プレースホルダ 1): ビジネス情報のビジネス名を使用すると、きめ細かなフィルタを適用できます。

  • ビジネス カテゴリ(プレースホルダ 9): カテゴリに基づくフィルタでは、一致する範囲を広げたり、ビジネス名と AND で結合して精度を高めたりすることができます。

フィード属性 ID に基づくフィルタの詳細については、マッチング関数に関するガイドをご覧ください。CampaignFeed や AdGroupFeed の作成方法の例については、サイトリンク フィードに関するガイドをご覧ください。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。