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

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 広告の管理画面では、下書きのステータスが [適用中...] になります。ただし、このメソッドは処理が完了したときに通知しません

  3. 変更を最初にテストする場合は、下書きを使用してテストを作成できます。

テスト

テストを作成する

experiment はドラフトに似ており、ベース キャンペーンから作成されます。experimentExperimentBuilder で作成します。これにより、テストのさまざまな部分を表す 2 つの「群」を持つテストが自動的に作成されます。一方の群(対照群)には基本キャンペーンを、もう一方の群(介入群)には新しい下書きキャンペーンを設定します。テストのスケジュールを設定する前に、上記の下書きのステップに沿ってこの下書きキャンペーンをカスタマイズします。

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

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
  • 開始日
  • 終了日
  • 予算
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()

これらのオペレーションが成功したかどうかを確認するまで待つ必要があります。Google 広告の管理画面では、startApplying()startScheduling() が正常に完了すると、それぞれ [適用済み] または [有効] のステータスが表示されます。エラーが発生すると、[適用できません] または [作成できません] と表示され、クリックするとエラーが表示されます。

一部のメソッドがプレビュー ステージで失敗し、実行後に成功することもあります(下書きの作成後など)。

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

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

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

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