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
를 만듭니다.
그러면 실험의 서로 다른 부분을 나타내는 '부문' 2개로 실험이 자동으로 생성됩니다. 한 부문 (대조 부문이라고 함)에는 기본 캠페인이 포함되고 다른 부문 (전체 실험 대상 부문)에는 실험 일정을 예약하기 전에 위 초안의 단계에 따라 맞춤설정할 수 있는 새 임시 캠페인이 포함됩니다.
실험을 빌드할 때 빌더에서 다음 사항을 모두 설정해야 합니다.
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
자체는 캠페인이 아닙니다. 대신 기본 캠페인, 임시 캠페인, 실험 캠페인을 연결합니다. 실험 캠페인의 필드는 수정할 수 있지만 다음과 같은 예외가 있습니다.
- 이름
- 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();
실험 결과가 만족스러우면 다음 두 가지 방법을 사용할 수 있습니다.
변경사항을 적용할 수 있으며 초안과 마찬가지로 프로세스가 완료되어도 알림이 전송되지 않습니다.
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()
이러한 작업이 성공할지 확인하려면 기다려야 합니다. startApplying()
및 startScheduling()
가
성공적으로 완료되면 Google Ads UI에
Applied(적용됨) 또는 Active(활성) 상태가
각각 표시됩니다. 또한 실패 시 적용할 수 없음 또는 생성할 수 없음을 나타내므로 클릭하여 오류를 확인할 수 있습니다.
일부 메서드는 미리보기 단계에서는 실패하지만 실행된 후에는 성공할 수도 있습니다(예: 초안 생성 후).
const draftCampaign = draft.getDraftCampaign();
draftCampaign.createNegativeKeyword("shoes"); // Will fail in preview.
이는 임시 캠페인에 즉시 액세스할 수 없으므로 미리보기 모드에서 실패합니다.
마찬가지로 실험을 만들고 초안 캠페인을 즉시 가져오려고 시도하면 초안이 실제로 생성되지 않으므로 미리보기 모드에서 실패합니다.
따라서 스크립트를 실행한 후 아래 로그를 확인하고 미리보기 모드의 제한 때문이라고 생각되는 경우에만 미리보기 실패 스크립트를 진행하세요.