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
자체는 캠페인이 아닙니다. 기본 캠페인, 임시 캠페인, 실험 캠페인을 연결합니다. 실험 캠페인의 필드는 다음 예외를 제외하고 수정할 수 있습니다.
- 이름
- 상태
- 시작일
- 종료일
- 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에 적용됨 또는 활성 상태가 표시됩니다. 또한 실패 시 적용할 수 없음 또는 만들 수 없음이 표시되므로 클릭하여 오류를 확인할 수 있습니다.
미리보기 단계에서 일부 메서드가 실패하지만 실행 후 성공할 수도 있습니다(예: 초안을 만든 후).
const draftCampaign = draft.getDraftCampaign();
draftCampaign.createNegativeKeyword("shoes"); // Will fail in preview.
초안 캠페인에 즉시 액세스할 수 없으므로 미리보기 모드에서는 실패합니다.
마찬가지로 실험을 만들고 즉시 임시 캠페인을 가져오려고 하면 임시 캠페인이 실제로 생성되지 않으므로 미리보기 모드에서 실패합니다.
따라서 스크립트를 실행한 후 스크립트 목록 아래의 로그를 확인하고, 원인이 미리보기 모드의 제한사항 때문이라고 생각되는 경우에만 미리보기에서 실패한 스크립트를 진행하세요.