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");
広告ポリシーのチェックは、ベース キャンペーンと同様に、下書きキャンペーンに対しても行われます。ポリシーに違反している広告が含まれている下書き用キャンペーンでは、テストを実行できません。
下書きを実行する
下書きキャンペーンをプロビジョニングした後、次のいずれかを行うことができます。
変更を使用しない場合は、下書きを削除するだけです。下書きの削除は元に戻せませんが、Google 広告の管理画面の [下書き] タブの [すべての下書き] で引き続き確認できます。
draft.remove();
下書きで行った変更を保持する場合は、変更を適用します。
draft.startApplying();
このメソッドは、基本キャンペーンに更新を適用するプロセスを開始します。そのため、Google 広告の管理画面で下書きのステータスが [適用中...] になります。ただし、このメソッドでは、処理が完了したときに通知されません。
変更をテストする場合は、下書きを使用してテストを作成できます。
テスト
テストを作成する
experiment
は下書きに似ており、ベース キャンペーンから作成されます。ExperimentBuilder
を使用して experiment
を作成します。これにより、テストのさまざまな部分を表す 2 つの「アーム」を含むテストが自動的に作成されます。一方のアーム(対照群)には基本のキャンペーンが含まれ、もう一方のアーム(介入群)には新しい下書きキャンペーンが含まれます。この下書きキャンペーンは、テストをスケジュールする前に(前述の下書きの手順に沿って)カスタマイズします。
テストを構築する際は、ビルダーで次のすべてを設定してください。
withCampaign
- テストのベースにするキャンペーン。
withTrafficSplitPercent
- トラフィックのどのくらいの割合がテスト群に割り当てられるか。50% の場合は、
50
を指定します。 withStartDate
、withEndDate
- キャンペーンの開始日と終了日を指定します。
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();
下書きとは異なり、テストは単一の ID で一意に識別されます。詳しくは、ExperimentSelector.withIds()
をご覧ください。
テスト キャンペーンをプロビジョニングする
draft
と同様に、experiment
自体はキャンペーンではありません。基本のキャンペーン、下書き、テスト キャンペーンを関連付けます。テストキャンペーンのフィールドは変更できますが、次の例外があります。
- name
- ステータス
- 開始日
- 終了日
- 予算
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 広告の UI の [テスト] タブの [すべてのテスト] で引き続き確認できます。
experiment.remove();
テストの結果に満足している場合は、次の 2 つのオプションがあります。
変更の適用を開始できます。下書きと同様に、処理が完了しても通知は届きません。
experiment.startApplying();
テスト キャンペーンを、基本のキャンペーンに影響を与えることなく、完全に独立したキャンペーンとして確立できます。このプロセスは「卒業」と呼ばれ、すぐに完了し、新しい予算を設定する必要があります。
const budget = AdsApp.budgets() .withCondition(`campaign_budget.id = ${budgetId}`) .get() .next(); experiment.graduate(budget);
新しいキャンペーンはベース キャンペーンと予算を共有できなくなるため、新しい予算が必要になります。卒業したキャンペーンは、すべてのフィールドを変更でき、より多くの下書きやテストのベース キャンペーンとして使用できるという点で、通常のキャンペーンと同じです。
その他の考慮事項
基本エンティティ
Google 広告スクリプトに下書きとテストが導入されたことで、基本エンティティという概念も導入されました。下書きキャンペーンとテストキャンペーン、およびそれらの広告グループは、元のベース キャンペーンとは異なります。そのため、Campaign
と AdGroup
に、ベース キャンペーンと広告グループにアクセスするためのメソッド(getBaseCampaign()
と getBaseAdGroup()
)が追加されました。
これらのメソッドは、ベース キャンペーンまたは広告グループから呼び出された場合、呼び出し元エンティティを返します。キャンペーンや広告グループ内のエンティティ(キーワードや広告など)にも、このようなメソッドが用意されています。
ベースエンティティを追跡できるように、キャンペーンには isBaseCampaign()
メソッド、isDraftCampaign()
メソッド、isExperimentCampaign()
メソッドが用意されています。
新しい Campaign.draftCampaigns()
メソッドと Campaign.experimentCampaigns()
メソッドを使用すると、呼び出し元キャンペーンを基本キャンペーンとするすべての下書きキャンペーンとテスト キャンペーンにアクセスできます。ただし、CampaignSelector.withCondition()
を使用して下書きキャンペーンを選択することはできません。代わりに AdsApp.drafts()
を使用してください。
エラー処理
下書きとテストに関連する次のメソッドは、スクリプトの実行時に処理されますが、非同期で失敗する可能性があります。
Draft.startApplying()
Experiment.startApplying()
Experiment.startScheduling()
これらのオペレーションが成功するかどうかを確認する必要があります。Google 広告の UI には、startApplying()
と startScheduling()
がそれぞれ正常に完了した後、ステータスが [適用済み] または [有効] と表示されます。また、失敗した場合は [適用できません] または [作成できません] と表示され、クリックしてエラーを確認できます。
プレビュー ステージで失敗したメソッドが、実行後に成功することもあります(下書きの作成後など)。
const draftCampaign = draft.getDraftCampaign();
draftCampaign.createNegativeKeyword("shoes"); // Will fail in preview.
下書きキャンペーンにすぐにアクセスできないため、プレビュー モードでは失敗します。
同様に、テストを作成してすぐに下書きキャンペーンを取得しようとすると、下書きが実際に作成されていないため、プレビュー モードで失敗します。
そのため、スクリプトを実行したら、スクリプトのリストの下にあるログを確認し、プレビュー モードの制限が原因であると思われる場合にのみ、プレビューで失敗したスクリプトを続行してください。