キャンペーンの下書きとウェブテスト

Google 広告 スクリプトはキャンペーンの下書きとテストに対応しており、検索ネットワーク キャンペーンとディスプレイ ネットワーク キャンペーンへの変更の準備とテストに使用できます。

下書きとは、独自の広告を配信しない既存のキャンペーンの複製です。元のキャンペーンを変更せずに変更をステージングするために使用できます。その後、ステージングされた変更を基本のキャンペーンに適用できます。

テストでは、元のキャンペーンと並行してカスタマイズ可能なキャンペーンを 実施し、指定した割合のトラフィックに対して広告を表示します。テストの結果に応じて、変更を元のキャンペーンに適用するか、テストを独立したキャンペーンに分岐させるか、テスト キャンペーンを放棄することができます。

このガイドでは、スクリプトで下書きとテストを操作するための基本的なワークフローについて説明します。

回答案

下書きの作成

下書きは、DraftBuilder を使用し、一意の名前を指定して、既存のベース キャンペーンから作成します。基本のキャンペーンは、検索、検索ネットワーク(ディスプレイ ネットワーク対応)キャンペーン、ディスプレイ キャンペーン(ディスプレイ ネットワーク向けのモバイルアプリ キャンペーンは除く)のいずれかである必要があります。また、共有予算は設定できません。

const campaign = AdsApp.campaigns()
    .withCondition(`campaign.name = "${campaignName}"`)
    .get()
    .next();

const draftBuilder = campaign.newDraftBuilder()
    .withName("INSERT_DRAFT_NAME_HERE")
    .build();

const draft = draftBuilder.getResult();

DraftBuilder.build() は、DraftOperation を返します。これは、スクリプトでの一般的なオペレーションです。詳しくは、ビルダーガイドをご覧ください。

draft は、ベース キャンペーン ID と下書き ID の組み合わせで一意に識別されます。詳細については、DraftSelector.withIds() をご覧ください。

下書き用キャンペーンをプロビジョニングする

draft オブジェクトは、基本のキャンペーンと下書き用キャンペーンを関連付けます。基本のキャンペーンへの更新をステージングするには、下書き用キャンペーンを通じて変更を伝播します。

下書き用キャンペーンには、他のキャンペーンと同様に、条件、広告グループ、入札単価、広告などのさまざまな属性を取得して設定するメソッドがあります。

const draftCampaign = draft.getDraftCampaign();

draftCampaign.setAdRotationType("CONVERSION_OPTIMIZE");
draftCampaign.createNegativeKeyword("shoes");

広告のポリシー チェックは、下書き用キャンペーンでも基本のキャンペーンと同様に行われます。ポリシーに違反している広告を含む下書き用キャンペーンでは、テストを実施できません。

下書きを実行する

下書き用キャンペーンをプロビジョニングしたら、次のいずれかを行います。

  1. 変更を使用しない場合は、下書きを削除します。 下書きを削除すると元に戻せませんが、Google 広告管理画面の [下書き] タブの [すべての下書き] で表示できます。

    draft.remove();
    
  2. 下書きに加えた変更を保持する場合は、続行して適用できます。

    draft.startApplying();
    

    このメソッドは、更新を基本のキャンペーンに適用する処理を開始するため、Google 広告 UI 上で下書きのステータスが「適用中...」になります。ただし、このメソッドはプロセスの完了を通知しません

  3. 変更内容を先にテストしたい場合は、下書きを使用してテストを作成できます。

Experiments

テストを作成する

experiment は下書きに似ており、基本のキャンペーンから作成されます。ExperimentBuilder を使用して experiment を作成します。これにより、テストの各部分を表す 2 つの「テスト群」からなるテストが自動的に作成されます。1 つの群(コントロール群)には基本のキャンペーンが含まれ、もう 1 つの群(トリートメント群)には新しい下書き用キャンペーンが含まれます。これらのキャンペーンは、テストのスケジュールを設定する前に、上記の下書きの手順でカスタマイズします。

テストを作成する際は、ビルダーで次のすべてを設定してください。

withCampaign
テストのベースにするキャンペーンです。
withTrafficSplitPercent
テスト群に送るトラフィックの量。50% の場合は 50 を指定します。
withStartDatewithEndDate
キャンペーンの開始日と終了日を指定します。YYYYMMdd 形式で指定します。
withType
使用しているネットワークに応じて、SEARCH_CUSTOM または DISPLAY_CUSTOM
withSuffix
作成時にトリートメント キャンペーンの名前に追加される接尾辞を指定します。
withGoals
このテストの目標を指定します。これは、作成時の目標を振り返るためのものです。適切なデフォルト値は [{metric: 'CLICKS', direction: 'INCREASE'}] です。

トラフィック分割の割合によって、基本のキャンペーンではなくテスト キャンペーンの広告が表示されるトラフィックの割合が決まります。そのため、各基本キャンペーンで一度に実施できるテストは 1 つのみです。

const experiment = AdsApp.newExperimentBuilder()
  .withCampaign(campaign)
  .withTrafficSplitPercent(50)
  .withStartDate("20230501")
  .withEndDate("20230601")
  .withType("SEARCH_CUSTOM")
  .withSuffix("experiment")
  .withGoals([{metric: 'CLICKS', direction: 'INCREASE'}])
  .build();

// The experimentCampaign represents the customizeable draft.
const experimentCampaign = experiment.getExperimentCampaign();

下書きとは異なり、テストは 1 つの ID で一意に識別されます。詳しくは、ExperimentSelector.withIds() をご覧ください。

テスト キャンペーンをプロビジョニングする

draft と同様に、experiment 自体はキャンペーンではありません。基本のキャンペーン、下書き、テスト キャンペーンが関連付けられます。テスト キャンペーンのフィールドは変更できますが、以下の例外があります。

  • name
  • status
  • 開始日
  • 終了日
  • budget
const experimentCampaign = experiment.getExperimentCampaign();

// Will succeed.
experimentCampaign.setAdRotationType("ROTATE_FOREVER");
experimentCampaign.createNegativeKeyword("sneakers");

// Will fail.
experimentCampaign.setName("INSERT_EXPERIMENT_NAME_HERE");

テストの名前、開始日、終了日は、変更後にテスト キャンペーンに反映されます。

// Will succeed.
experiment.setName("INSERT_EXPERIMENT_NAME_HERE");

// Will succeed if date is acceptable.
const date = "20220601";
experiment.setStartDate(date);

テストを開始するには、experiment.startScheduling() を呼び出します。これは非同期プロセスであり、基本のキャンペーンからすべての設定をコピーする必要があるためです。

テスト終了後

テストが完了したら、テストは完全に終了して、広告の配信が停止しても操作は継続できるようにすることをおすすめします。[終了] のテストでも、削除、適用、終了は可能です。また、キャンペーンの掲載結果データにも引き続きアクセスできます。

experiment.finish();
const stats = experimentCampaign.getStatsFor("INSERT_TIME_PERIOD_HERE");
  • 統計からテストで満足のいく結果が得られない場合は、テストを削除することができます。これにより、テスト キャンペーンも削除されます。テストを削除すると元に戻せませんが、Google 広告管理画面の [テスト] タブの [すべてのテスト] で引き続き確認できます。

    experiment.remove();
    
  • 満足のいくテスト結果が得られた場合は、次の 2 つの方法があります。

    1. 変更を適用でき、下書きと同様に、プロセスの完了時に通知を受け取りません。

      experiment.startApplying();
      
    2. 基本のキャンペーンに影響を与えることなく、独立した完全に機能するキャンペーンとしてテスト キャンペーンを確立できます。このプロセスは移行と呼ばれ、すぐに完了し、新しい予算を設定する必要があります。

      const budget = AdsApp.budgets()
          .withCondition(`campaign_budget.id = ${budgetId}`)
          .get()
          .next();
      
      experiment.graduate(budget);
      

      新しいキャンペーンは基本のキャンペーンと予算を共有できなくなり、新しい予算が必要になります。段階的なキャンペーンは通常のキャンペーンとまったく同じで、すべてのフィールドを変更可能で、より多くの下書きとテストの基礎となるキャンペーンとして使用できます。

その他の考慮事項

基本エンティティ

Google 広告スクリプトに下書きとテストが導入されると、基本エンティティの概念も導入されます。下書きとテストのキャンペーンおよびその中の広告グループは、元の基本のキャンペーンとは異なるため、CampaignAdGroup が、基本のキャンペーンと広告グループにアクセスするメソッド getBaseCampaign()getBaseAdGroup() が追加されました。

これらのメソッドは、基本のキャンペーンまたは広告グループから呼び出された場合、呼び出し元のエンティティを返します。キーワードや広告など、キャンペーンや広告グループ内のエンティティにも、このようなメソッドが用意されています。

基本エンティティをトラッキングできるように、キャンペーンには isBaseCampaign()isDraftCampaign()isExperimentCampaign() メソッドが用意されています。

新しい Campaign.draftCampaigns() メソッドと Campaign.experimentCampaigns() メソッドを使用すると、呼び出し元のキャンペーンをベース キャンペーンとするすべての下書き用キャンペーンとテスト キャンペーンにアクセスできます。ただし、CampaignSelector.withCondition() を使って下書き用キャンペーンを選択することはできません。代わりに AdsApp.drafts() を使用してください。

エラー処理

下書きとテストに関する次のメソッドは、スクリプトの実行時に続行されますが、非同期に失敗する可能性があります。

  • Draft.startApplying()
  • Experiment.startApplying()
  • Experiment.startScheduling()

しばらく待ってから、これらのオペレーションが成功したかどうかを確認する必要があります。startApplying()startScheduling() が正常に完了すると、Google 広告の管理画面に「適用済み」または「有効」というステータスが表示されます。また、失敗すると「Unable to apply」または「Unable to create」と表示され、クリックするとエラーを確認できます。

また、一部のメソッドがプレビュー ステージでは失敗しても、実行後に成功する場合もあります(たとえば、ドラフトの作成後)。

const draftCampaign = draft.getDraftCampaign();
draftCampaign.createNegativeKeyword("shoes"); // Will fail in preview.

下書き用キャンペーンにはすぐにアクセスできないため、プレビュー モードでは失敗します。

同様に、テストを作成してすぐに下書き用キャンペーンを取得しようとしても、プレビュー モードでは下書きが実際には作成されないため、失敗します。

このため、実行後にスクリプトのリストの下にあるログを確認し、原因がプレビュー モードの制限によると思われる場合にのみ、プレビューで失敗したスクリプトを使用してください。