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");
광고 정책 검사는 기본 캠페인과 마찬가지로 임시 캠페인에 대해 실행됩니다. 정책을 위반하는 광고가 있는 임시 캠페인에서는 실험을 실행할 수 없습니다.
임시 캠페인 실행
임시 캠페인을 프로비저닝한 후 다음 중 하나를 수행할 수 있습니다.
변경사항을 사용하지 않으려면 임시 캠페인을 삭제하면 됩니다. 임시 캠페인을 삭제하면 되돌릴 수 없지만 Google Ads UI의 임시 캠페인 탭에 있는 모든 임시 캠페인 에서 계속 볼 수 있습니다.
draft.remove();임시 캠페인에서 변경한 사항을 유지하기로 결정한 경우 변경사항을 적용할 수 있습니다.
draft.startApplying();이 메서드는 기본 캠페인에 업데이트를 적용하는 프로세스를 시작하므로 임시 캠페인의 상태가 Google Ads UI에서 적용 중... 으로 표시됩니다. 하지만 이 메서드는 프로세스가 완료될 때 알림을 보내지 않습니다.
변경사항을 먼저 테스트하려면 임시 캠페인을 사용하여 실험을 만들면 됩니다.
실험
실험 은 기존 캠페인과 동시에 맞춤설정 가능한 캠페인을 실행하며 지정된 비율의 트래픽에 광고를 게재합니다. 실험 결과를 바탕으로 변경사항을 기존 캠페인에 적용하거나, 실험을 독립적인 캠페인으로 분기하거나, 실험 캠페인을 포기할 수 있습니다.
실험 만들기
experiment는 임시 캠페인과 비슷하며 기본 캠페인에서 생성됩니다.
ExperimentBuilder를 사용하여 experiment를 만듭니다. 그러면 실험의 여러 부분을 나타내는 두 개의 '부문'이 있는 실험이 자동으로 생성됩니다. 한 부문 (대조 부문이라고 함)에는 기본 캠페인이 포함되고 다른 부문 (실험 부문이라고 함)에는 실험을 예약하기 전에 맞춤설정할 새 임시 캠페인이 포함됩니다 (앞서 설명한 임시 캠페인 단계에 따라).
실험을 빌드할 때는 빌더에서 다음을 모두 설정해야 합니다.
withCampaign- 실험의 기반으로 사용할 캠페인입니다.
withTrafficSplitPercent- 실험 부문으로 이동할 트래픽의 양입니다. 50%의 경우
50을 지정합니다. withStartDate및withEndDate- 캠페인의 시작일과 종료일을 지정합니다.
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 자체는 캠페인이 아닙니다. 오히려 기본 캠페인, 임시 캠페인, 실험 캠페인을 연결합니다. 실험 캠페인의 필드는 수정할 수 있지만 다음과 같은 예외가 있습니다.
- 이름
- 상태
- 시작일
- 종료일
- 예산
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();실험 결과에 만족하는 경우 두 가지 옵션이 있습니다.
변경사항 적용을 시작할 수 있으며, 임시 캠페인과 마찬가지로 프로세스가 완료될 때 알림을 받지 않습니다.
experiment.startApplying();기본 캠페인에 영향을 미치지 않고 실험 캠페인을 독립적인 완전 운영 캠페인으로 설정할 수 있습니다. 졸업이라고 하는 이 프로세스는 즉시 완료되며, 새 예산을 설정해야 합니다.
const budget = AdsApp.budgets() .withCondition(`campaign_budget.id = ${budgetId}`) .get() .next(); experiment.graduate(budget);새 캠페인은 더 이상 기본 캠페인과 예산을 공유할 수 없으므로 새 예산이 필요합니다. 졸업한 캠페인은 모든 필드를 수정할 수 있고 더 많은 임시 캠페인 및 실험의 기본 캠페인으로 사용할 수 있다는 점에서 일반 캠페인과 같습니다.
기타 고려사항
기본 항목
Google Ads 스크립트에 임시 캠페인 및 실험이 도입되면서 기본 항목의 개념도 도입되었습니다. 임시 캠페인 및 실험 캠페인과 그 안의 광고 그룹은 원래 기본 캠페인과 다르므로 이제 Campaign 및 AdGroup에는 기본 캠페인 및 광고 그룹에 액세스하는 메서드(getBaseCampaign() 및 getBaseAdGroup())가 있습니다.
이러한 메서드는 기본 캠페인 또는 광고 그룹에서 호출되는 경우 호출 항목을 반환합니다. 키워드 및 광고와 같은 캠페인 및 광고 그룹 내의 항목에도 이러한 메서드가 제공되었습니다.
기본 항목을 추적하는 데 도움이 되도록 캠페인에
isBaseCampaign(), isDraftCampaign(), 및
isExperimentCampaign() 메서드가 제공되었습니다.
새 Campaign.draftCampaigns() 및
Campaign.experimentCampaigns() 메서드를 사용하면 호출 캠페인을 기본 캠페인으로 사용하는 모든 임시 캠페인 및
실험 캠페인에 액세스할 수 있습니다.
하지만
CampaignSelector.withCondition()을 사용하여 임시 캠페인을 선택할 수는 없습니다. 대신 AdsApp.drafts()를 사용하세요.
오류 처리
임시 캠페인 및 실험과 관련된 다음 메서드는 스크립트가 실행될 때 진행되지만 비동기적으로 실패할 수 있습니다.
Draft.startApplying()Experiment.startApplying()Experiment.startScheduling()
이러한 작업이 성공하는지 확인하기 위해 기다려야 합니다. Google Ads UI에는 startApplying() 및 startScheduling()이 성공적으로 완료된 후 각각 적용됨 또는 활성 상태가 표시됩니다. 또한 실패 시 적용할 수 없음 또는 만들 수 없음 을 표시하여 클릭하여 오류를 확인할 수 있도록 합니다.
일부 메서드가 미리보기 단계에서 실패하지만 실행 후 성공할 수도 있습니다. 예를 들어 임시 캠페인을 만든 후 다음과 같이 할 수 있습니다.
const draftCampaign = draft.getDraftCampaign();
draftCampaign.createNegativeKeyword("shoes"); // Will fail in preview.
임시 캠페인에 즉시 액세스할 수 없으므로 미리보기 모드에서 실패합니다.
마찬가지로 실험을 만들고 즉시 임시 캠페인을 가져오려고 하면 임시 캠페인이 실제로 생성되지 않으므로 미리보기 모드에서 실패합니다.
따라서 스크립트를 실행한 후 스크립트 목록 아래의 로그를 확인하고, 미리보기 모드의 제한사항으로 인해 발생한다고 생각되는 경우에만 미리보기에서 실패한 스크립트를 진행하세요.