广告系列草稿和实验

Google Ads 脚本支持广告系列草稿和实验,这些功能用于准备和测试对搜索广告系列和展示广告网络广告系列的更改。

草稿是现有广告系列的克隆版本,不会自行投放广告,但可用于暂存更改,而不会修改原始广告系列。然后,可以将暂存的更改应用于基准广告系列。

实验会与原始广告系列并行投放可自定义的广告系列,并向指定百分比的流量展示广告。根据实验结果,您可以将更改应用到原始广告系列,将实验分支到独立广告系列,或放弃实验广告系列。

本指南介绍了在脚本中使用草稿和实验的基本工作流程。

草稿

创建草稿

通过使用 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 Ads 界面的“草稿”标签页中查看所有草稿

        draft.remove();
    
  2. 如果您决定保留在草稿中所做的更改,可以继续应用这些更改:

        draft.startApplying();
    

    此方法会启动将更新应用于基础广告系列的过程,因此草稿在 Google Ads 界面中将具有 Applying... 状态。不过,该方法在进程完成时不会通知您。

  3. 如果您想先测试更改,可以使用草稿创建实验。

实验

创建实验

experiment 类似于草稿,也是根据基础广告系列创建的。您可以使用 ExperimentBuilder 创建 experiment。 系统会自动创建一个包含两个“分支”的实验,这两个分支分别代表实验的不同部分。一个组(称为对照组)将包含基准广告系列,另一个组(称为实验组)将包含新的广告系列草稿,您将按照上述草稿步骤自定义该草稿,然后再安排实验。

构建实验时,请务必在构建器中设置以下所有内容:

withCampaign
您希望实验基于的广告系列。
withTrafficSplitPercent
有多少流量将用于实验组。对于 50%,请指定 50
withStartDatewithEndDate
指定广告系列的开始日期和结束日期。以 YYYYMMdd 格式指定。
withType
SEARCH_CUSTOMDISPLAY_CUSTOM,具体取决于您使用的网络。
withSuffix
指定在创建实验组广告系列时将添加到其名称中的后缀。
withGoals
指定相应实验的目标。这只是提醒您自己在创建该广告系列时的目标。一个不错的默认值是 [{metric: 'CLICKS', direction: 'INCREASE'}]

流量分配百分比决定了有多少流量会展示实验广告系列中的广告,而不是基本广告系列中的广告。因此,每个基础广告系列一次只能运行一个实验。

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 Ads 界面的“实验”标签页下的所有实验中查看该实验。

        experiment.remove();
    
  • 如果您对实验结果感到满意,可以选择以下两种做法:

    1. 您可以开始应用更改,与草稿一样,系统不会在流程完成后通知您。

          experiment.startApplying();
      
    2. 您可以将实验广告系列设置为独立且可正常运作的广告系列,而不会影响基本广告系列。此过程称为毕业,会立即完成,并且需要设置新的预算。

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

      新广告系列无法再与基础广告系列共享预算, 因此需要设置新预算。毕业后的广告系列与普通广告系列一样,所有字段均可修改,并且可以作为更多草稿和实验的基准广告系列。

其他注意事项

基础实体

将草稿和实验引入 Google Ads 脚本后,还引入了基础实体的概念。草稿广告系列和实验广告系列及其中的广告组与其原始的基础广告系列不同,因此 CampaignAdGroup 现在具有访问其基础广告系列和广告组的方法:getBaseCampaign()getBaseAdGroup()

如果由基本广告系列或广告组调用,这些方法会返回调用实体。广告系列和广告组中的实体(例如关键字和广告)也已获得此类方法。

为了帮助跟踪基本实体,我们为广告系列添加了 isBaseCampaign()isDraftCampaign()isExperimentCampaign() 方法。

借助新的 Campaign.draftCampaigns()Campaign.experimentCampaigns() 方法,您可以访问所有以调用广告系列作为其基准广告系列的草稿广告系列和实验广告系列。不过,您无法选择包含 CampaignSelector.withCondition() 的草稿广告系列;请改用 AdsApp.drafts()

错误处理

运行脚本时,以下涉及草稿和实验的方法会继续执行,但可能会异步失败:

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

您应等待,以检查这些操作是否成功。在成功完成 startApplying()startScheduling() 后,Google Ads 界面会分别显示“已应用”或“有效”状态。如果应用或创建失败,系统会显示无法应用无法创建,您可以点击查看错误。

此外,某些方法可能在预览阶段失败,但在运行后成功;例如,在创建草稿后:

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

在预览模式下,此操作会失败,因为无法立即访问草稿广告系列。

同样,在预览模式下,创建实验并立即尝试提取其草稿广告系列会失败,因为草稿实际上并未创建。

因此,请在运行脚本后查看脚本列表下方的日志,并且仅当您认为失败的原因是预览模式的限制时,才继续处理预览失败的脚本。