このドキュメントでは、フィードベースの拡張機能の移行と廃止のプロセスについて説明します。フィードベースの広告表示オプションは、新しいアセットベースの広告表示オプションに一括して移行され、2023 年に完全に廃止されます。
概要
既存のフィードベースの広告表示オプションはサポートが終了し、アセットベースの広告表示オプションに置き換えられました。アセットベースの拡張機能を使用すると、拡張機能の作成と管理の複雑さが軽減されます。広告表示オプションを確実に管理するには、ご対応が必要です。
「フィードベースの拡張機能」という用語は、次のサービスに関連するリソースまたは機能を指します。
AdGroupExtensionSettingService
AdGroupFeedService
CampaignExtensionSettingService
CampaignFeedService
CustomerExtensionSettingService
CustomerFeedService
ExtensionFeedItemService
FeedItemTargetService
FeedItemService
FeedMappingService
FeedService
特定のタイプのアセットベースとフィードベースの広告表示オプションの両方が同じ顧客、キャンペーン、または広告グループに適用されている場合は、アセットベースの広告表示オプションが配信されます。これは、同じレベルのエンティティにのみ適用されます。たとえば、アセットを広告グループにリンクすると、その広告グループのすべてのフィードが配信されなくなりますが、同じキャンペーンの他の広告グループでは引き続きフィードが配信される可能性があります。アセットベースの広告表示オプションは、Google 広告の管理画面にもデフォルトで表示されます。
どちらの種類の広告表示オプションも有効な場合は、以下のスクリーンショットのように、Google 広告の管理画面の [広告表示オプション] ページに通知が表示されることがあります。「従来版」の広告表示オプションはフィードベースの広告表示オプションで、「アップグレード版」の広告表示オプションはアセットベースです。
アセットベースの広告表示オプションを作成すると、デフォルトで [アップグレード済み] の広告表示オプションが表示されます。
移行の詳細
フィードは、既存の値を新しいアセットベースの拡張インスタンスにコピーして移行されます。既存のフィードベースの広告表示オプションは、特定の日付にアセットベースの広告表示オプションに自動的にコピーされます。アセットベースのすべての拡張機能で、新しい一意の ID 値が使用されます。
自動移行中に作成されたアセットと元のフィードとの間に接続はないため、Google Ads API を介して移行プロセスをご自身で行うことをおすすめします。
移行スケジュール
既存のフィードベースの広告表示オプションはすべて、アセットベースの広告表示オプションに一括で自動的に移行されます。移行されたアカウントは、フィードベースのエンティティに対する変更呼び出しを拒否します。
過去のフィード レポートは、2022 年 8 月まで引き続きご利用いただけます。 フィードベースの拡張機能では、移行後に新しいデータは生成されなくなります。
自動移行プロセスでは、現在のフィードベースの拡張機能と同等のアセットベースの拡張機能が作成され、AdGroupFeed
、CampaignFeed
、CustomerFeed
のすべてが同等の AdGroupAsset
、CampaignAsset
、CustomerAsset
に置き換えられます。広告グループ、キャンペーン、または顧客がすでにアセットに関連付けられている場合、対応するフィードは無視されます。
アセットベースの広告表示オプションの変更
アセットベースの広告表示オプションは既存のフィードベースの広告表示オプションと同じ機能を提供しますが、マッチング関数やほとんどのターゲティング フィールドなど、既存の機能の一部は削除されました。
ターゲティングでは、広告グループ、キャンペーン、キーワード、地域、モバイルの各フィールドは、アセットベースの広告表示オプションでは使用できません。
アセットベースの一部の広告表示オプションでは、特定の項目を使用できません。次のフィールドは削除され、自動的に移行されません。
- アプリ: 広告のスケジュール
- 通話: 開始時間、終了時間
- 価格: 開始時間、終了時間、広告のスケジュール
- 構造化スニペット: 開始時間、終了時間、広告のスケジュール
日付関連のすべてのフィールドが「yyyy-MM-dd」形式になりました。アセットベースの広告表示オプションの日付フィールドに時刻を指定することはできません。
今後、アセットベースの広告表示オプションを使用する場合は、キャンペーンと広告グループのレベルですでに利用できるターゲティング機能を使用することをおすすめします。モバイル設定の場合は、リンクにモバイル フレンドリーな URL を含めることを検討してください。
マッチング関数は、アセットベースの拡張機能では利用できません。自動移行では、次のマッチング関数のみが適用されます。
マッチング関数 | 移行メモ |
---|---|
EQUALS(FEED_ITEM_ID, 1234567)
|
そのまま移行 |
IN(FEED_ITEM_ID,{1234567,1234568,1234569})
|
そのまま移行 |
IDENTITY(false)
|
excluded_parent_asset_field_types として移行 |
IDENTITY(true)
|
下記の特殊なケースを除き、リンクされたすべてのフィード アイテムとともに移行しました。 |
AND(
|
IN(FEED_ITEM_ID,{1234567,1234568,1234569}) として移行 |
AND(
|
EQUALS(FEED_ITEM_ID,1234567) として移行 |
IDENTITY(true) 特殊なケース
IDENTITY(true)
マッチング関数は、拡張機能に関連付けられていて、20 個を超えるアクティブなフィード アイテムと一致する場合、自動移行中に無視されます。マッチング関数を IN(FEED_ITEM_ID, {1234567,1234568,1234569})
表記に更新する必要があります。
また、広告表示オプションを自分で移行し、アセットベースの広告表示オプションを他のエンティティにリンクすることもできます。それぞれの顧客、キャンペーン、広告グループは、同じ広告表示オプションの有効なアセットベースの広告表示オプション(最大 20 個)にリンクできます。移行方法と、アセットベースの拡張機能へのリンクについては、移行手順をご覧ください。
コール トラッキングに関する考慮事項
CallAsset
で call_tracking_enabled
フィールドと call_conversion_tracking_disabled
フィールドが削除されました。コール トラッキングは CallReportingSetting
を使用してアカウント単位で制御されるようになりました。電話番号表示オプションでコンバージョン トラッキングを有効にするには、CallAsset.call_conversion_reporting_state
フィールドを使用します。call_conversion_reporting_state
は次のいずれかの値に設定できます。
DISABLED
: 通話コンバージョン アクションは行われません。USE_ACCOUNT_LEVEL_CALL_CONVERSION_ACTION
。つまり、アカウント レベルで設定された通話コンバージョンの種類が広告表示オプションで使用されます。USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION
。これは、拡張機能がCallAsset.call_conversion_action
フィールドで指定されたコンバージョン アクションを使用することを意味します。その他のcall_conversion_reporting_state
値については、CallAsset.call_conversion_action
フィールドは無視されます。
フィードベースの電話番号表示オプションを移行する際、call_conversion_tracking_disabled
が true
の場合は、新しい CallAsset'
call_conversion_reporting_state
を DISABLED
に設定する必要があります。call_conversion_reporting_state
のデフォルト値は USE_RESOURCE_LEVEL_CALL_CONVERSION_ACTION
です。この拡張機能のコンバージョン トラッキングを引き続き無効にするには、明示的に DISABLED
に設定する必要があります。この変更は、2022 年 4 月 8 日以降の自動移行の一部として行われます。
独自のフィードベースの電話番号表示オプションを移行し、パソコンの電話専用広告でコンバージョン トラッキングを使用している場合は、すべての電話番号表示オプションのインスタンスを 1 つのアカウントのアセットベースの広告表示オプションに同時に移行する必要があります。これは、Google 広告専用転送電話番号の割り当てに関するものです。Google 広告専用転送電話番号は、アセットベースの電話番号表示オプションにアカウントのいずれかが設定されている場合にのみ付与されます。
URL で ValueTrack パラメータを使用してアセットベースの広告表示オプションをトラッキングする
アセットベースの広告表示オプションの URL で {feeditemid}
を除き、すべての ValueTrack パラメータは引き続き機能します。代わりに、{extensionid}
を使って最終ページ URL のトラッキングにリンクしてください。
テンプレート、またはアセットベースの広告表示オプションのカスタム パラメータ。フィードベースの広告表示オプションがアセットベースの広告表示オプションに移行されると、{feeditemid}
パラメータは値を返さなくなります。
自動移行の手順では、{feeditemid}
は {extensionid}
に変更されません。{feeditemid}
パラメータを使用する URL を更新し、{extensionid}
パラメータも含める必要があります。これにより、どちらのタイプの広告表示オプションのクリックも確実にトラッキングできます。ただし、クリックの発生時にデータが入力されるのは、いずれか 1 つのフィールドのみである点に注意してください。
アセットベースの広告表示オプションの配信
アセットベースの広告表示オプションは、さまざまなエンティティへのリンクを含むキャンペーンで配信されるようになります。
AdGroupAsset
- この広告グループで広告表示オプションが配信されるようになります。
CampaignAsset
- 広告表示オプションは、このキャンペーンとそのすべての広告グループで配信されます。
CustomerAsset
- 広告表示オプションは、対象となるすべてのキャンペーンで配信されます。
これは、従来の動作とは対照的です。
AdGroupFeed
- この広告グループで広告表示オプションが配信されるようになります。
CampaignFeed
- この広告グループでは、広告グループ フィードへのリンクがある広告グループを除き、広告表示オプションが配信されます。
CustomerFeed
- 広告表示オプションは、対象となるすべてのキャンペーンまたは広告グループで配信されます。ただし、それぞれ広告表示オプションがキャンパス フィードまたは広告グループ フィードにリンクされている場合、広告表示オプションは配信されません。
つまり、アセットの下位レベルの添付ファイルは過去の上位レベルよりも優先されます。ただし、今後ターゲティングは追加される予定です。
移行手順
フィードベースの広告表示オプションをアセットベースの広告表示オプションに移行するには、次の手順を行います。
- 引き続き使用する既存のフィードベースの拡張機能を特定します。
- フィードベースの拡張機能のコンテンツを、対応するアセットベースの拡張機能の新しいインスタンスにコピーします。たとえば、
Promotion
型のExtensionFeedItem
の内容は、新しいPromotionAsset
オブジェクトにコピーされます。 - 新しいアセットベースの広告表示オプションを、同じ広告グループとキャンペーンに関連付けます。
- アセットベースの拡張機能が正しく設定されていることを確認します。
- フィードベースの広告表示オプションをアカウントから削除してください。
フィードベースの広告表示オプションをアセットベースの広告表示オプションにコピーすると、上記のフィード関連のサービスでこの拡張機能を使用した操作はすぐに中止する必要があります。
フィードベースの広告表示オプションは、アセットベースの広告表示オプションに正確にコピーされたことを確認した後、削除する必要があります。
特定の PlaceholderType
を使用するフィード アイテムをすべて削除すると、広告表示オプションの種類は完全に移行されます。詳しくは、拡張機能の削除をご覧ください。
次の例では、上記の各ステップをプロモーション表示オプションとともに説明します。
フィードベースの広告表示オプションを特定する
影響を受けるフィード アイテムのリストを取得するには、アカウントで GAQL クエリを実行する必要があります。GAQL クエリについて以下で一般的なケースを説明します。
ネイティブ フィード
アカウントにネイティブ フィード(Feed
、FeedItem
、FeedMapping
など)がある場合は、次のクエリを使用して、移行する必要があるフィード アイテムを取得します。
まず、目的の広告表示オプション タイプの FeedMapping
を持つすべてのフィードを取得します。
SELECT
feed_mapping.feed,
feed_mapping.placeholder_type,
feed_mapping.attribute_field_mappings
FROM feed_mapping
WHERE feed_mapping.placeholder_type IN (
// Batch 1 extensions (auto-migrating October 2021).
'CALLOUT',
'PROMOTION',
'SITELINK',
'STRUCTURED_SNIPPET',
// Batch 2 extensions (auto-migrating April 2022).
'APP',
'CALL',
'PRICE'
)
これで、feed_mapping.feed
を使用して目的の FeedItem
オブジェクトを取得できるようになります。
SELECT feed_item.attribute_values
FROM feed_item
WHERE feed.resource_name = '<INSERT feed_mapping.feed>'
feed_item.attribute_values
は feed_mapping.attribute_field_mappings
プレースホルダに従って解釈されます。これらのフィールド マッピングでは、拡張フィールドが feed_item.attribute_values
にマッピングされていることがわかります。
広告表示オプションの設定サービス
広告表示オプションが広告表示オプション設定サービス(CustomerExtensionSettingService
、CampaignExtensionSettingService
、AdGroupExtensionSettingService
など)によって作成された場合、フィード アイテム ID を取得しやすくなります。
Google 広告のクエリ言語の次のクエリを使用して、特定の広告表示オプション タイプの有効な広告表示オプション フィード アイテム ID をリクエストします。
SELECT extension_feed_item.id
FROM extension_feed_item
WHERE extension_feed_item.status = 'ENABLED'
AND extension_feed_item.extension_type = 'PROMOTION'
返された ID は、拡張機能の詳細情報の取得に使用できます。
フィードベースの広告表示オプションの詳細を取得する
移行するフィードベースの広告表示オプションを特定したら、その ID を別の Google 広告クエリ言語クエリで使用して、その詳細情報をリクエストします。
SELECT
extension_feed_item.id,
extension_feed_item.ad_schedules,
extension_feed_item.device,
extension_feed_item.status,
extension_feed_item.start_date_time,
extension_feed_item.end_date_time,
extension_feed_item.targeted_campaign,
extension_feed_item.targeted_ad_group,
extension_feed_item.promotion_feed_item.discount_modifier,
extension_feed_item.promotion_feed_item.final_mobile_urls,
extension_feed_item.promotion_feed_item.final_url_suffix,
extension_feed_item.promotion_feed_item.final_urls,
extension_feed_item.promotion_feed_item.language_code,
extension_feed_item.promotion_feed_item.money_amount_off.amount_micros,
extension_feed_item.promotion_feed_item.money_amount_off.currency_code,
extension_feed_item.promotion_feed_item.occasion,
extension_feed_item.promotion_feed_item.orders_over_amount.amount_micros,
extension_feed_item.promotion_feed_item.orders_over_amount.currency_code,
extension_feed_item.promotion_feed_item.percent_off,
extension_feed_item.promotion_feed_item.promotion_code,
extension_feed_item.promotion_feed_item.promotion_end_date,
extension_feed_item.promotion_feed_item.promotion_start_date,
extension_feed_item.promotion_feed_item.promotion_target,
extension_feed_item.promotion_feed_item.tracking_url_template
FROM extension_feed_item
WHERE extension_feed_item.extension_type = 'PROMOTION'
AND extension_feed_item.id = 123456789012
LIMIT 1
返される ExtensionFeedItem
には、指定されたフィードベースの拡張機能に現在含まれているすべての値があり、アセットベースの拡張機能に適用できます。
URL カスタム パラメータを使用する場合は、追加の Google 広告クエリ言語クエリを使用して取得する必要があります。前のクエリで取得した ExtensionFeedItem
インスタンスに結果を追加します。このクエリ内のフィード アイテム ID は、前のクエリで使用した拡張フィード アイテム ID と同じです。
SELECT feed_item.url_custom_parameters
FROM feed_item
WHERE feed_item.id = 123456789012
アセットベースの広告表示オプションを作成する
前のステップで取得した値を、関連するアセットの新しいインスタンスに適用できます。
Java
private String createPromotionAssetFromFeed( GoogleAdsClient googleAdsClient, Long customerId, ExtensionFeedItem extensionFeedItem) { PromotionFeedItem promotionFeedItem = extensionFeedItem.getPromotionFeedItem(); // Creates the Promotion asset. Asset.Builder asset = Asset.newBuilder() .setName("Migrated from feed item " + extensionFeedItem.getId()) .setTrackingUrlTemplate(promotionFeedItem.getTrackingUrlTemplate()) .setFinalUrlSuffix(promotionFeedItem.getFinalUrlSuffix()) .setPromotionAsset( PromotionAsset.newBuilder() .setPromotionTarget(promotionFeedItem.getPromotionTarget()) .setDiscountModifier(promotionFeedItem.getDiscountModifier()) .setRedemptionEndDate(promotionFeedItem.getPromotionStartDate()) .setRedemptionEndDate(promotionFeedItem.getPromotionEndDate()) .setOccasion(promotionFeedItem.getOccasion()) .setLanguageCode(promotionFeedItem.getLanguageCode()) .addAllAdScheduleTargets(extensionFeedItem.getAdSchedulesList())) .addAllFinalUrls(promotionFeedItem.getFinalUrlsList()) .addAllFinalMobileUrls(promotionFeedItem.getFinalMobileUrlsList()) .addAllUrlCustomParameters(promotionFeedItem.getUrlCustomParametersList()); // Either PercentOff or MoneyAmountOff must be set. if (promotionFeedItem.getPercentOff() > 0) { // Adjusts the percent off scale when copying. asset.getPromotionAssetBuilder().setPercentOff(promotionFeedItem.getPercentOff() / 100); } else { asset.getPromotionAssetBuilder().setMoneyAmountOff(promotionFeedItem.getMoneyAmountOff()); } // Either PromotionCode or OrdersOverAmount must be set. if (promotionFeedItem.getPromotionCode() != null && promotionFeedItem.getPromotionCode().length() > 0) { asset.getPromotionAssetBuilder().setPromotionCode(promotionFeedItem.getPromotionCode()); } else { asset.getPromotionAssetBuilder().setOrdersOverAmount(promotionFeedItem.getOrdersOverAmount()); } // Sets the start and end dates if set in the existing extension. if (extensionFeedItem.hasStartDateTime()) { asset.getPromotionAssetBuilder().setStartDate(extensionFeedItem.getStartDateTime()); } if (extensionFeedItem.hasEndDateTime()) { asset.getPromotionAssetBuilder().setEndDate(extensionFeedItem.getEndDateTime()); } // Builds an operation to create the Promotion asset. AssetOperation operation = AssetOperation.newBuilder().setCreate(asset).build(); // Gets the Asset Service client. try (AssetServiceClient assetServiceClient = googleAdsClient.getLatestVersion().createAssetServiceClient()) { // Issues the request and returns the resource name of the new Promotion asset. MutateAssetsResponse response = assetServiceClient.mutateAssets(String.valueOf(customerId), ImmutableList.of(operation)); String resourceName = response.getResults(0).getResourceName(); System.out.println("Created Promotion asset with resource name " + resourceName); return resourceName; } }
C#
private string CreatePromotionAssetFromFeed(GoogleAdsClient client, long customerId, ExtensionFeedItem extensionFeedItem) { // Get the Asset Service client. AssetServiceClient assetServiceClient = client.GetService(Services.V13.AssetService); PromotionFeedItem promotionFeedItem = extensionFeedItem.PromotionFeedItem; // Create the Promotion asset. Asset asset = new Asset { // Name field is optional. Name = $"Migrated from feed item #{extensionFeedItem.Id}", PromotionAsset = new PromotionAsset { PromotionTarget = promotionFeedItem.PromotionTarget, DiscountModifier = promotionFeedItem.DiscountModifier, RedemptionStartDate = promotionFeedItem.PromotionStartDate, RedemptionEndDate = promotionFeedItem.PromotionEndDate, Occasion = promotionFeedItem.Occasion, LanguageCode = promotionFeedItem.LanguageCode, }, TrackingUrlTemplate = promotionFeedItem.TrackingUrlTemplate, FinalUrlSuffix = promotionFeedItem.FinalUrlSuffix }; // Either PercentOff or MoneyAmountOff must be set. if (promotionFeedItem.PercentOff > 0) { // Adjust the percent off scale when copying. asset.PromotionAsset.PercentOff = promotionFeedItem.PercentOff / 100; } else { asset.PromotionAsset.MoneyAmountOff = new Money { AmountMicros = promotionFeedItem.MoneyAmountOff.AmountMicros, CurrencyCode = promotionFeedItem.MoneyAmountOff.CurrencyCode }; } // Either PromotionCode or OrdersOverAmount must be set. if (!string.IsNullOrEmpty(promotionFeedItem.PromotionCode)) { asset.PromotionAsset.PromotionCode = promotionFeedItem.PromotionCode; } else { asset.PromotionAsset.OrdersOverAmount = new Money { AmountMicros = promotionFeedItem.OrdersOverAmount.AmountMicros, CurrencyCode = promotionFeedItem.OrdersOverAmount.CurrencyCode }; } // Set the start and end dates if set in the existing extension. if (extensionFeedItem.HasStartDateTime) { asset.PromotionAsset.StartDate = DateTime.Parse(extensionFeedItem.StartDateTime) .ToString("yyyy-MM-dd"); } if (extensionFeedItem.HasEndDateTime) { asset.PromotionAsset.EndDate = DateTime.Parse(extensionFeedItem.EndDateTime) .ToString("yyyy-MM-dd"); } asset.PromotionAsset.AdScheduleTargets.Add(extensionFeedItem.AdSchedules); asset.FinalUrls.Add(promotionFeedItem.FinalUrls); asset.FinalMobileUrls.Add(promotionFeedItem.FinalMobileUrls); asset.UrlCustomParameters.Add(promotionFeedItem.UrlCustomParameters); // Build an operation to create the Promotion asset. AssetOperation operation = new AssetOperation { Create = asset }; // Issue the request and return the resource name of the new Promotion asset. MutateAssetsResponse response = assetServiceClient.MutateAssets( customerId.ToString(), new[] { operation }); Console.WriteLine("Created Promotion asset with resource name " + $"{response.Results.First().ResourceName}"); return response.Results.First().ResourceName; }
PHP
private static function createPromotionAssetFromFeed( GoogleAdsClient $googleAdsClient, int $customerId, ExtensionFeedItem $extensionFeedItem ): string { $promotionFeedItem = $extensionFeedItem->getPromotionFeedItem(); // Creates the Promotion asset. $asset = new Asset([ // Name field is optional. 'name' => 'Migrated from feed item #' . $extensionFeedItem->getId(), 'promotion_asset' => new PromotionAsset([ 'promotion_target' => $promotionFeedItem->getPromotionTarget(), 'discount_modifier' => $promotionFeedItem->getDiscountModifier(), 'redemption_start_date' => $promotionFeedItem->getPromotionStartDate(), 'redemption_end_date' => $promotionFeedItem->getPromotionEndDate(), 'occasion' => $promotionFeedItem->getOccasion(), 'language_code' => $promotionFeedItem->getLanguageCode(), 'ad_schedule_targets' => $extensionFeedItem->getAdSchedules() ]), 'tracking_url_template' => $promotionFeedItem->getTrackingUrlTemplate(), 'url_custom_parameters' => $promotionFeedItem->getUrlCustomParameters(), 'final_urls' => $promotionFeedItem->getFinalUrls(), 'final_mobile_urls' => $promotionFeedItem->getFinalMobileUrls(), 'final_url_suffix' => $promotionFeedItem->getFinalUrlSuffix(), ]); // Either percent off or money amount off must be set. if ($promotionFeedItem->getPercentOff() > 0) { // Adjust the percent off scale when copying. $asset->getPromotionAsset()->setPercentOff($promotionFeedItem->getPercentOff() / 100); } else { $money = new Money([ 'amount_micros' => $promotionFeedItem->getMoneyAmountOff()->getAmountMicros(), 'currency_code' => $promotionFeedItem->getMoneyAmountOff()->getCurrencyCode() ]); $asset->getPromotionAsset()->setMoneyAmountOff($money); } // Either promotion code or orders over amount must be set. if (!empty($promotionFeedItem->getPromotionCode())) { $asset->getPromotionAsset()->setPromotionCode($promotionFeedItem->getPromotionCode()); } else { $money = new Money([ 'amount_micros' => $promotionFeedItem->getOrdersOverAmount()->getAmountMicros(), 'currency_code' => $promotionFeedItem->getOrdersOverAmount()->getCurrencyCode() ]); $asset->getPromotionAsset()->setOrdersOverAmount($money); } if ($extensionFeedItem->hasStartDateTime()) { $startDateTime = new \DateTime($extensionFeedItem->getStartDateTime()); $asset->getPromotionAsset()->setStartDate($startDateTime->format('yyyy-MM-dd')); } if ($extensionFeedItem->hasEndDateTime()) { $endDateTime = new \DateTime($extensionFeedItem->getEndDateTime()); $asset->getPromotionAsset()->setEndDate($endDateTime->format('yyyy-MM-dd')); } // Creates an operation to add the Promotion asset. $assetOperation = new AssetOperation(); $assetOperation->setCreate($asset); // Issues a mutate request to add the Promotion asset and prints its information. $assetServiceClient = $googleAdsClient->getAssetServiceClient(); $response = $assetServiceClient->mutateAssets($customerId, [$assetOperation]); $assetResourceName = $response->getResults()[0]->getResourceName(); printf( "Created the Promotion asset with resource name: '%s'.%s", $assetResourceName, PHP_EOL ); return $assetResourceName; }
Python
def create_promotion_asset_from_feed(client, customer_id, extension_feed_item): """Retrieves all campaigns associated with the given FeedItem resource name. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. extension_feed_item: an extension feed item. Returns: the resource name of a newly created promotion asset. """ asset_service = client.get_service("AssetService") promotion_feed_item = extension_feed_item.promotion_feed_item # Create an asset operation to start building the new promotion asset using # data from the given extension feed item. asset_operation = client.get_type("AssetOperation") asset = asset_operation.create asset.name = f"Migrated from feed item ID '{extension_feed_item.id}'" asset.tracking_url_template = promotion_feed_item.tracking_url_template asset.final_url_suffix = promotion_feed_item.final_url_suffix asset.final_urls.extend(promotion_feed_item.final_urls) asset.final_mobile_urls.extend(promotion_feed_item.final_mobile_urls) promotion_asset = asset.promotion_asset promotion_asset.promotion_target = promotion_feed_item.promotion_target promotion_asset.discount_modifier = promotion_feed_item.discount_modifier promotion_asset.redemption_start_date = ( promotion_feed_item.promotion_start_date ) promotion_asset.redemption_end_date = promotion_feed_item.promotion_end_date promotion_asset.occasion = promotion_feed_item.occasion promotion_asset.language_code = promotion_feed_item.language_code promotion_asset.ad_schedule_targets.extend(extension_feed_item.ad_schedules) # Either percent_off or money_amount_off must be set. if promotion_feed_item.percent_off > 0: # Adjust the percent off scale after copying. Extension feed items # interpret 1,000,000 as 1% and assets interpret 1,000,000 as 100% so # to migrate the correct discount value we must divide it by 100. promotion_asset.percent_off = int(promotion_feed_item.percent_off / 100) else: # If percent_off is not set then copy money_amount_off. This field is # an instance of Money in both cases, so setting the field with # copy_from is possible. Using regular assignment is also valid here. client.copy_from( promotion_asset.money_amount_off, promotion_feed_item.money_amount_off, ) # Check if promotion_code field is set if promotion_feed_item.promotion_code: promotion_asset.promotion_code = promotion_feed_item.promotion_code else: # If promotion_code is not set then copy orders_over_amount. This field # is an instance of Money in both cases, so setting the field with # copy_from is possible. Using regular assignment is also valid here. client.copy_from( promotion_asset.orders_over_amount, promotion_feed_item.orders_over_amount, ) # Set the start and end dates if set in the existing extension. if promotion_feed_item.promotion_start_date: promotion_asset.start_date = promotion_feed_item.promotion_start_date if promotion_feed_item.promotion_end_date: promotion_asset.end_date = promotion_feed_item.promotion_end_date response = asset_service.mutate_assets( customer_id=customer_id, operations=[asset_operation] ) resource_name = response.results[0].resource_name print(f"Created promotion asset with resource name: '{resource_name}'") return resource_name
Ruby
def create_promotion_asset_from_feed(client, customer_id, extension_feed_item) # Create a Promotion asset that copies values from the specified extension feed item. asset_service = client.service.asset promotion_feed_item = extension_feed_item.promotion_feed_item # Create an asset operation to start building the new promotion asset using # data from the given extension feed item. asset_operation = client.operation.create_resource.asset do |asset| asset.name = "Migrated from feed item ID '#{extension_feed_item.id}'" asset.tracking_url_template = promotion_feed_item.tracking_url_template asset.final_url_suffix = promotion_feed_item.final_url_suffix asset.final_urls += promotion_feed_item.final_urls asset.final_mobile_urls += promotion_feed_item.final_mobile_urls # Create the Promotion asset. asset.promotion_asset = client.resource.promotion_asset do |pa| pa.promotion_target = promotion_feed_item.promotion_target pa.discount_modifier = promotion_feed_item.discount_modifier pa.redemption_start_date = promotion_feed_item.promotion_start_date pa.redemption_end_date = promotion_feed_item.promotion_end_date pa.occasion = promotion_feed_item.occasion pa.language_code = promotion_feed_item.language_code pa.ad_schedule_targets += extension_feed_item.ad_schedules # Either percent_off or money_amount_off must be set. if promotion_feed_item.percent_off.positive? # Adjust the percent off scale after copying. pa.percent_off = int(promotion_feed_item.percent_off / 100) else # If percent_off is not set then copy money_amount_off. This field is # an instance of Money in both cases, so setting the field with # copy_from is possible. Using regular assignment is also valid here. pa.money_amount_off = promotion_feed_item.money_amount_off end # Either promotion_code or orders_over_amount must be set. if promotion_feed_item.promotion_code.empty? pa.orders_over_amount = promotion_feed_item.orders_over_amount else pa.promotion_code = promotion_feed_item.promotion_code end # Set the start and end dates if set in the existing extension. unless promotion_feed_item.promotion_start_date.empty? pa.start_date = promotion_feed_item.promotion_start_date end unless promotion_feed_item.promotion_end_date.empty? pa.end_date = promotion_feed_item.promotion_end_date end end end response = asset_service.mutate_assets(customer_id: customer_id, operations: [asset_operation]) resource_name = response.results.first.resource_name puts "Created promotion asset with resource name: '#{resource_name}'" resource_name end
Perl
sub create_promotion_asset_from_feed { my ($api_client, $customer_id, $extension_feed_item) = @_; my $promotion_feed_item = $extension_feed_item->{promotionFeedItem}; # Create the Promotion asset. my $asset = Google::Ads::GoogleAds::V13::Resources::Asset->new({ name => "Migrated from feed item #" . $extension_feed_item->{id}, trackingUrlTemplate => $promotion_feed_item->{trackingUrlTemplate}, finalUrlSuffix => $promotion_feed_item->{finalUrlSuffix}, promotionAsset => Google::Ads::GoogleAds::V13::Common::PromotionAsset->new({ promotionTarget => $promotion_feed_item->{promotionTarget}, discountModifier => $promotion_feed_item->{discountModifier}, redemptionStartDate => $promotion_feed_item->{promotionStartDate}, redemptionEndDate => $promotion_feed_item->{promotionEndDate}, occasion => $promotion_feed_item->{occasion}, languageCode => $promotion_feed_item->{languageCode}})}); push @{$asset->{finalUrls}}, @{$promotion_feed_item->{finalUrls}}; # Copy optional fields if present in the existing extension. if (defined($extension_feed_item->{adSchedules})) { push @{$asset->{promotionAsset}{adScheduleTargets}}, @{$extension_feed_item->{adSchedules}}; } if (defined($promotion_feed_item->{finalMobileUrls})) { push @{$asset->{finalMobileUrls}}, @{$promotion_feed_item->{finalMobileUrls}}; } if (defined($promotion_feed_item->{urlCustomParameters})) { push @{$asset->{urlCustomParameters}}, @{$promotion_feed_item->{urlCustomParameters}}; } # Either percentOff or moneyAmountOff must be set. if (defined($promotion_feed_item->{percentOff})) { # Adjust the percent off scale when copying. $asset->{promotionAsset}{percentOff} = $promotion_feed_item->{percentOff} / 100; } else { $asset->{promotionAsset}{moneyAmountOff} = Google::Ads::GoogleAds::V13::Common::Money->new({ amountMicros => $promotion_feed_item->{moneyAmountOff}{amountMicros}, currencyCode => $promotion_feed_item->{moneyAmountOff}{currencyCode}}); } # Either promotionCode or ordersOverAmount must be set. if (defined($promotion_feed_item->{promotionCode})) { $asset->{promotionAsset}{promotionCode} = $promotion_feed_item->{promotionCode}; } else { $asset->{promotionAsset}{ordersOverAmount} = Google::Ads::GoogleAds::V13::Common::Money->new({ amountMicros => $promotion_feed_item->{ordersOverAmount}{amountMicros}, currencyCode => $promotion_feed_item->{ordersOverAmount}{currencyCode}} ); } # Set the start and end dates if set in the existing extension. if (defined($extension_feed_item->{startDateTime})) { $asset->{promotionAsset}{startDate} = substr($extension_feed_item->{startDateTime}, 0, index($extension_feed_item->{startDateTime}, ' ')); } if (defined($extension_feed_item->{endDateTime})) { $asset->{promotionAsset}{endDate} = substr($extension_feed_item->{endDateTime}, 0, index($extension_feed_item->{endDateTime}, ' ')); } # Build an operation to create the Promotion asset. my $operation = Google::Ads::GoogleAds::V13::Services::AssetService::AssetOperation->new({ create => $asset }); # Issue the request and return the resource name of the new Promotion asset. my $response = $api_client->AssetService()->mutate({ customerId => $customer_id, operations => [$operation]}); printf "Created Promotion asset with resource name '%s'.\n", $response->{results}[0]{resourceName}; return $response->{results}[0]{resourceName}; }
アセットをキャンペーンと広告グループに関連付ける
これで、新しいアセットを元のフィードベースの広告表示オプションと同じ顧客、キャンペーン、広告グループに関連付けることができるようになりました。まず、拡張機能の設定に現在関連付けられているリソース ID を取得します。
Java
private List<Long> getTargetedCampaignIds( GoogleAdsServiceClient client, Long customerId, String extensionFeedItemResourceName) { String query = "SELECT campaign.id, campaign_extension_setting.extension_feed_items " + "FROM campaign_extension_setting " + "WHERE campaign_extension_setting.extension_type = 'PROMOTION' " + " AND campaign.status != 'REMOVED'"; ServerStream<SearchGoogleAdsStreamResponse> serverStream = client .searchStreamCallable() .call( SearchGoogleAdsStreamRequest.newBuilder() .setCustomerId(String.valueOf(customerId)) .setQuery(query) .build()); List<Long> campaignIds = new ArrayList<>(); for (SearchGoogleAdsStreamResponse response : serverStream) { for (GoogleAdsRow row : response.getResultsList()) { Campaign campaign = row.getCampaign(); CampaignExtensionSetting extensionSetting = row.getCampaignExtensionSetting(); // Adds the campaign ID to the list of IDs if the extension feed item is // associated with this extension setting. if (extensionSetting.getExtensionFeedItemsList().contains(extensionFeedItemResourceName)) { campaignIds.add(campaign.getId()); System.out.println("Found matching campaign with ID " + campaign.getId()); } } } return campaignIds; }
C#
private List<long> GetTargetedCampaignIds(GoogleAdsServiceClient googleAdsServiceClient, long customerId, string extensionFeedResourceName) { List<long> campaignIds = new List<long>(); string query = @" SELECT campaign.id, campaign_extension_setting.extension_feed_items FROM campaign_extension_setting WHERE campaign_extension_setting.extension_type = 'PROMOTION' AND campaign.status != 'REMOVED'"; googleAdsServiceClient.SearchStream(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse response) { foreach (GoogleAdsRow googleAdsRow in response.Results) { // Add the campaign ID to the list of IDs if the extension feed item is // associated with this extension setting. if (googleAdsRow.CampaignExtensionSetting.ExtensionFeedItems.Contains( extensionFeedResourceName)) { Console.WriteLine( $"Found matching campaign with ID {googleAdsRow.Campaign.Id}."); campaignIds.Add(googleAdsRow.Campaign.Id); } } } ); return campaignIds; }
PHP
private static function getTargetedCampaignIds( GoogleAdsClient $googleAdsClient, int $customerId, string $extensionFeedItemResourceName ): array { $campaignIds = []; $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); // Create a query that will retrieve the campaign extension settings. $query = "SELECT campaign.id, campaign_extension_setting.extension_feed_items " . "FROM campaign_extension_setting " . "WHERE campaign_extension_setting.extension_type = 'PROMOTION' " . "AND campaign.status != 'REMOVED'"; // Issue a search request to get the campaign extension settings. /** @var GoogleAdsServerStreamDecorator $stream */ $stream = $googleAdsServiceClient->searchStream($customerId, $query); foreach ($stream->iterateAllElements() as $googleAdsRow) { /** @var GoogleAdsRow $googleAdsRow */ // Add the campaign ID to the list of IDs if the extension feed item is // associated with this extension setting. if ( in_array( $extensionFeedItemResourceName, iterator_to_array( $googleAdsRow->getCampaignExtensionSetting()->getExtensionFeedItems() ) ) ) { printf( "Found matching campaign with ID %d.%s", $googleAdsRow->getCampaign()->getId(), PHP_EOL ); $campaignIds[] = $googleAdsRow->getCampaign()->getId(); } } return $campaignIds; }
Python
def get_targeted_campaign_ids(client, customer_id, resource_name): """Retrieves all campaigns associated with the given FeedItem resource name. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. resource_name: an extension feed item resource name. Returns: a list of campaign IDs. """ ga_service = client.get_service("GoogleAdsService") query = """ SELECT campaign.id, campaign_extension_setting.extension_feed_items FROM campaign_extension_setting WHERE campaign_extension_setting.extension_type = 'PROMOTION' AND campaign.status != 'REMOVED'""" stream = ga_service.search_stream(customer_id=customer_id, query=query) campaign_ids = [] for batch in stream: for row in batch.results: feed_items = row.campaign_extension_setting.extension_feed_items if resource_name in feed_items: print(f"Found matching campaign with ID: '{row.campaign.id}'") campaign_ids.append(row.campaign.id) return campaign_ids
Ruby
def get_targeted_campaign_ids(client, customer_id, resource_name) # Finds and returns all of the campaigns that are associated with the specified # Promotion extension feed item. query = <<~QUERY SELECT campaign.id, campaign_extension_setting.extension_feed_items FROM campaign_extension_setting WHERE campaign_extension_setting.extension_type = 'PROMOTION' AND campaign.status != 'REMOVED' QUERY responses = client.service.google_ads.search_stream(customer_id: customer_id, query: query) campaign_ids = [] responses.each do |response| response.results.each do |row| feed_items = row.campaign_extension_setting.extension_feed_items if feed_items.include?(resource_name) puts "Found matching campaign with ID '#{row.campaign.id}'." campaign_ids << row.campaign.id end end end campaign_ids end
Perl
sub get_targeted_campaign_ids { my ($google_ads_service, $customer_id, $extension_feed_item_resource_name) = @_; my @campaign_ids; my $query = " SELECT campaign.id, campaign_extension_setting.extension_feed_items FROM campaign_extension_setting WHERE campaign_extension_setting.extension_type = 'PROMOTION' AND campaign.status != 'REMOVED'"; my $search_stream_request = Google::Ads::GoogleAds::V13::Services::GoogleAdsService::SearchGoogleAdsStreamRequest ->new({ customerId => $customer_id, query => $query }); my $search_stream_handler = Google::Ads::GoogleAds::Utils::SearchStreamHandler->new({ service => $google_ads_service, request => $search_stream_request }); $search_stream_handler->process_contents( sub { my $google_ads_row = shift; # Add the campaign ID to the list of IDs if the extension feed item # is associated with this extension setting. if (grep { $_ eq $extension_feed_item_resource_name } @{$google_ads_row->{campaignExtensionSetting}{extensionFeedItems}}) { printf "Found matching campaign with ID $google_ads_row->{campaign}{id}.\n"; push @campaign_ids, $google_ads_row->{campaign}{id}; } }); return @campaign_ids; }
次に、新しい CampaignAsset
、AdGroupAsset
、CustomerAsset
を作成してアップロードし、アセットを各リソースにリンクします。
Java
private void associateAssetWithCampaigns( GoogleAdsClient googleAdsClient, Long customerId, String promotionAssetResourceName, List<Long> campaignIds) { if (campaignIds.isEmpty()) { System.out.println("Asset was not associated with any campaigns."); return; } // Constructs an operation to associate the asset with each campaign. List<CampaignAssetOperation> campaignAssetOperations = campaignIds.stream() .map( id -> CampaignAssetOperation.newBuilder() .setCreate( CampaignAsset.newBuilder() .setAsset(promotionAssetResourceName) .setFieldType(AssetFieldType.PROMOTION) .setCampaign(ResourceNames.campaign(customerId, id))) .build()) .collect(Collectors.toList()); // Creates a service client. try (CampaignAssetServiceClient campaignAssetServiceClient = googleAdsClient.getLatestVersion().createCampaignAssetServiceClient()) { // Issues the mutate request. MutateCampaignAssetsResponse response = campaignAssetServiceClient.mutateCampaignAssets( String.valueOf(customerId), campaignAssetOperations); // Prints some information about the result. for (MutateCampaignAssetResult result : response.getResultsList()) { System.out.println("Created campaign asset with resource name " + result.getResourceName()); } } }
C#
private void AssociateAssetWithCampaigns(GoogleAdsClient client, long customerId, string promotionAssetResourceName, List<long> campaignIds) { if (campaignIds.Count == 0) { Console.WriteLine("Asset was not associated with any campaigns."); return; } CampaignAssetServiceClient campaignAssetServiceClient = client.GetService(Services.V13 .CampaignAssetService); List<CampaignAssetOperation> operations = new List<CampaignAssetOperation>(); foreach (long campaignId in campaignIds) { operations.Add(new CampaignAssetOperation { Create = new CampaignAsset { Asset = promotionAssetResourceName, FieldType = AssetFieldTypeEnum.Types.AssetFieldType.Promotion, Campaign = ResourceNames.Campaign(customerId, campaignId), } }); } MutateCampaignAssetsResponse response = campaignAssetServiceClient.MutateCampaignAssets( customerId.ToString(), operations); foreach (MutateCampaignAssetResult result in response.Results) { Console.WriteLine($"Created campaign asset with resource name " + $"{result.ResourceName}."); } }
PHP
private static function associateAssetWithCampaigns( GoogleAdsClient $googleAdsClient, int $customerId, string $promotionAssetResourceName, array $campaignIds ) { if (empty($campaignIds)) { print 'Asset was not associated with any campaigns.' . PHP_EOL; return; } $operations = []; foreach ($campaignIds as $campaignId) { $operations[] = new CampaignAssetOperation([ 'create' => new CampaignAsset([ 'asset' => $promotionAssetResourceName, 'field_type' => AssetFieldType::PROMOTION, 'campaign' => ResourceNames::forCampaign($customerId, $campaignId) ]) ]); } // Issues a mutate request to add the campaign assets and prints their information. $campaignAssetServiceClient = $googleAdsClient->getCampaignAssetServiceClient(); $response = $campaignAssetServiceClient->mutateCampaignAssets($customerId, $operations); foreach ($response->getResults() as $addedCampaignAsset) { /** @var CampaignAsset $addedCampaignAsset */ printf( "Created campaign asset with resource name: '%s'.%s", $addedCampaignAsset->getResourceName(), PHP_EOL ); } }
Python
def associate_asset_with_campaigns( client, customer_id, promotion_asset_resource_name, campaign_ids ): """Associates the specified promotion asset with the specified campaigns. Args: client: an initialized GoogleAdsClient instance. customer_id: a client customer ID. promotion_asset_resource_name: the resource name for a promotion asset. campaign_ids: a list of campaign IDs. """ if len(campaign_ids) == 0: print(f"Asset was not associated with any campaigns.") return campaign_service = client.get_service("CampaignService") campaign_asset_service = client.get_service("CampaignAssetService") operations = [] for campaign_id in campaign_ids: operation = client.get_type("CampaignAssetOperation") campaign_asset = operation.create campaign_asset.asset = promotion_asset_resource_name campaign_asset.field_type = client.enums.AssetFieldTypeEnum.PROMOTION campaign_asset.campaign = campaign_service.campaign_path( customer_id, campaign_id ) operations.append(operation) response = campaign_asset_service.mutate_campaign_assets( customer_id=customer_id, operations=operations ) for result in response.results: print( "Created campaign asset with resource name: " f"'{result.resource_name}'" )
Ruby
def associate_asset_with_campaigns(client, customer_id, promotion_asset_resource_name, campaign_ids) # Associates the specified promotion asset with the specified campaigns. if campaign_ids.empty? puts 'Asset was not associated with any campaigns.' return end operations = campaign_ids.map do |campaign_id| client.operation.create_resource.campaign_asset do |ca| ca.asset = promotion_asset_resource_name ca.field_type = :PROMOTION ca.campaign = client.path.campaign(customer_id, campaign_id) end end response = client.service.campaign_asset.mutate_campaign_assets( customer_id: customer_id, operations: operations, ) response.results.each do |result| puts "Created campaign asset with resource name '#{result.resource_name}'." end end
Perl
sub associate_asset_with_campaigns { my ($api_client, $customer_id, $promotion_asset_resource_name, @campaign_ids) = @_; if (scalar(@campaign_ids) == 0) { printf "Asset was not associated with any campaigns.\n"; return (); } my $operations = []; foreach my $campaign_id (@campaign_ids) { my $campaign_asset = Google::Ads::GoogleAds::V13::Resources::CampaignAsset->new({ asset => $promotion_asset_resource_name, fieldType => PROMOTION, campaign => Google::Ads::GoogleAds::V13::Utils::ResourceNames::campaign( $customer_id, $campaign_id )}); my $operation = Google::Ads::GoogleAds::V13::Services::CampaignAssetService::CampaignAssetOperation ->new({ create => $campaign_asset }); push @$operations, $operation; } my $response = $api_client->CampaignAssetService()->mutate({ customerId => $customer_id, operations => $operations }); foreach my $result (@{$response->{results}}) { printf "Created campaign asset with resource name '%s'.\n", $result->{resourceName}; } }
アセットの内容を確認する
プロモーション アセットのコンテンツを取得するには、次の Google 広告クエリ言語クエリを使用します。 結果を検査して、すべての関連フィールドが正しくコピーされていることを確認します。
この時点で 2 つの同じ広告表示オプションは両方ともアクティブですが、フィードベースの広告表示オプションではなくアセットベースの広告表示オプションが配信されます。
SELECT
asset.id,
asset.name,
asset.type,
asset.final_urls,
asset.final_mobile_urls,
asset.final_url_suffix,
asset.tracking_url_template,
asset.promotion_asset.promotion_target,
asset.promotion_asset.discount_modifier,
asset.promotion_asset.redemption_start_date,
asset.promotion_asset.redemption_end_date,
asset.promotion_asset.occasion,
asset.promotion_asset.language_code,
asset.promotion_asset.percent_off,
asset.promotion_asset.money_amount_off.amount_micros,
asset.promotion_asset.money_amount_off.currency_code,
asset.promotion_asset.promotion_code,
asset.promotion_asset.orders_over_amount.amount_micros,
asset.promotion_asset.orders_over_amount.currency_code,
asset.promotion_asset.start_date,
asset.promotion_asset.end_date,
asset.promotion_asset.ad_schedule_targets
FROM asset
WHERE asset.resource_name = 'customers/123456789/assets/123456789012'
フィードベースの広告表示オプションを削除する
アセットベースの広告表示オプションが元のフィードベースの広告表示オプションを正確に反映していることを確認したら、フィードベースの広告表示オプションを削除します。
既存のフィードベースの広告表示オプションはすべて、自動移行日に自動的に移行されます。同じ拡張機能が複数回発生しないように、移行後にフィードベースの拡張機能を削除します。
自動的に移行されたアカウントの検出
すでに移行されたアカウントの拡張機能を変更しようとすると、API は FeedErrorEnum.FeedError.legacy_extension_type_read_only
を返します。このようなアカウントは、フィード サービスのいずれか(FeedItemService
など)に対して小規模な変更オペレーションを作成することで検出できます。
結果を適用せずに確認するだけの場合は、リクエストの validate_only
フィールドを設定します。レスポンスにはアカウントが自動移行されたかどうかが表示されます。
移行は段階的に行われるため、一部の拡張機能が移行され、他の拡張機能は移行されない可能性があります。具体的なタイミングについては、上記の移行スケジュールのガイダンスをご覧ください。
使用可能なフィード レポート
過去のフィード レポートは、2022 年 8 月まで引き続きご利用いただけます。 フィードベースの広告表示オプションでは、移行後に新しいデータは生成されなくなります。
アセットの内容をリクエストするには、Google 広告クエリ言語クエリを asset
レポートに送信します。このレポートタイプはフィードベースの広告表示オプションの extension_feed_item
レポートタイプに似ています。
アセットベースの広告表示オプションのパフォーマンス統計情報は、asset_field_type_view
レポートに Google 広告クエリ言語クエリを発行することでリクエストできます。このレポートタイプはフィードベースの広告表示オプションの feed_placeholder_view
レポートタイプに似ています。
よくある質問(FAQ)
アセットで完全にサポートされていない以前の広告表示オプションはどうなりますか?
サポートされていないフィールドなしでアセットが作成されます。たとえば、デバイス設定ではアセットを使用できなくなりました。デバイス設定を含む拡張機能は、デバイス設定なしでアセットに移行されます。
広告ポリシー審査に合格していない従来の広告表示オプションはどうなりますか?
不承認のステータスの広告表示オプションは移行を試みますが、場合によっては失敗することもあります。
ポリシー審査が同期的に不承認となった場合、アセットは移行されません。ポリシー違反のほとんどは、このバケットに該当します(長すぎるテキスト、わいせつな表現など)。
それ以外の場合は、非同期で行われる詳細なポリシー承認の場合、拡張機能を移行しますが、移行後に不承認となることがあります。
以前の広告表示オプションのレポート指標
アセットへの移行後に指標がリセットされます。従来の指標は、移行後すぐには利用できますが、ある時点で削除される予定です。
1 種類のアセット表示オプション(コールアウトなど)を追加しても、フィードなどから配信できる他のタイプの広告表示オプション(価格など)は引き続き使用できますか。
はい。このリンクは、リンクされている広告表示オプションの種類に対してのみアップグレードされます。特定のタイプのアセット広告表示オプションをリンクしていない場合、フィードベースの広告表示オプションはそのタイプに対して引き続き配信されます。
同様に、特定の種類の広告表示オプションをリンクすると、そのタイプの広告表示オプションはフィードの対象でなくなります。
同じキャンペーン内でフィードとアセットを組み合わせることもできます。ある広告グループにアセットがリンクされていて、別の広告グループにフィードがリンクされている場合は、どちらも配信対象となります。
フィード アイテムは Google の自動移行によって削除されますか?
いいえ。フィード アイテムのリンク(CampaignFeed
など)は削除されますが、元のフィード アイテムは削除されません。
Google の自動移行で配信フィード アイテムのみが移行されますか?
いいえ。フィード アイテム リンク(CampaignFeed
など)を介してフィード アイテムがアクティブに提供されているかどうかにかかわらず、すべてのフィード アイテムはアセットに移行されます。