캠페인 초안 및 실험

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 UI의 초안 탭에 있는 모든 초안에서 계속 볼 수 있습니다.

    draft.remove();
    
  2. 초안에서 변경한 내용을 유지하기로 한 경우 계속 진행할 수 있습니다.

    draft.startApplying();
    

    이 메서드는 기본 캠페인에 업데이트를 적용하는 프로세스를 시작하므로 Google Ads UI에서 초안의 상태가 적용 중...이 됩니다. 그러나 이 메서드는 프로세스가 완료되었을 때 알림을 보내지 않습니다.

  3. 변경사항을 먼저 테스트하려면 초안을 사용하여 실험을 만들면 됩니다.

실험

실험 만들기

experiment는 초안과 유사하며 기본 캠페인에서도 생성됩니다. ExperimentBuilder를 사용하여 experiment를 만듭니다. 그러면 실험의 서로 다른 부분을 나타내는 '부문' 2개로 실험이 자동으로 생성됩니다. 한 부문 (대조 부문이라고 함)에는 기본 캠페인이 포함되고 다른 부문 (전체 실험 대상 부문)에는 실험 일정을 예약하기 전에 위 초안의 단계에 따라 맞춤설정할 수 있는 새 임시 캠페인이 포함됩니다.

실험을 빌드할 때 빌더에서 다음 사항을 모두 설정해야 합니다.

withCampaign
실험의 기반이 될 캠페인입니다.
withTrafficSplitPercent
실험 부문으로 유입될 트래픽의 양 50%의 경우 50를 지정합니다.
withStartDatewithEndDate
캠페인의 시작일과 종료일을 지정합니다. YYYYMMdd 형식으로 지정합니다.
withType
사용 중인 네트워크에 따라 SEARCH_CUSTOM 또는 DISPLAY_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 자체는 캠페인이 아닙니다. 대신 기본 캠페인, 임시 캠페인, 실험 캠페인을 연결합니다. 실험 캠페인의 필드는 수정할 수 있지만 다음과 같은 예외가 있습니다.

  • 이름
  • 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 Ads UI의 실험 탭에 있는 모든 실험에서 계속 볼 수 있습니다.

    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 UI에 Applied(적용됨) 또는 Active(활성) 상태가 각각 표시됩니다. 또한 실패 시 적용할 수 없음 또는 생성할 수 없음을 나타내므로 클릭하여 오류를 확인할 수 있습니다.

일부 메서드는 미리보기 단계에서는 실패하지만 실행된 후에는 성공할 수도 있습니다(예: 초안 생성 후).

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

이는 임시 캠페인에 즉시 액세스할 수 없으므로 미리보기 모드에서 실패합니다.

마찬가지로 실험을 만들고 초안 캠페인을 즉시 가져오려고 시도하면 초안이 실제로 생성되지 않으므로 미리보기 모드에서 실패합니다.

따라서 스크립트를 실행한 후 아래 로그를 확인하고 미리보기 모드의 제한 때문이라고 생각되는 경우에만 미리보기 실패 스크립트를 진행하세요.