แบบร่างและการทดสอบแคมเปญ

สคริปต์ Google Ads รองรับฉบับร่างและการทดสอบแคมเปญ ซึ่งใช้สําหรับเตรียมและทดสอบการเปลี่ยนแปลงในแคมเปญ Search และแคมเปญในเครือข่าย Display

ฉบับร่างคือแคมเปญที่โคลนมาจากแคมเปญที่มีอยู่ ซึ่งจะไม่แสดงโฆษณาของตนเอง แต่สามารถใช้เพื่อทําการเปลี่ยนแปลงโดยไม่ต้องแก้ไขแคมเปญต้นฉบับ จากนั้นนําการเปลี่ยนแปลงที่ทดสอบไปใช้กับแคมเปญพื้นฐานได้

การทดสอบจะทํางานกับแคมเปญที่ปรับแต่งได้ควบคู่ไปกับแคมเปญเดิม และแสดงโฆษณาต่อการเข้าชมตามเปอร์เซ็นต์ที่ระบุ คุณสามารถใช้การเปลี่ยนแปลงกับแคมเปญเดิม แยกการทดสอบเป็นแคมเปญอิสระ หรือยกเลิกแคมเปญทดสอบโดยอิงตามผลการทดสอบ

คู่มือนี้จะอธิบายเวิร์กโฟลว์พื้นฐานสำหรับการทำงานกับฉบับร่างและการทดสอบในสคริปต์

ฉบับร่าง

สร้างฉบับร่าง

ฉบับร่างสร้างขึ้นจากแคมเปญพื้นฐานที่มีอยู่โดยใช้ DraftBuilder และระบุชื่อที่ไม่ซ้ำ แคมเปญพื้นฐานต้องเป็นแคมเปญ Search, แคมเปญในเครือข่าย Search ที่มีส่วนขยายไปยังเครือข่าย Display หรือแคมเปญ Display (ยกเว้นแคมเปญแอปบนอุปกรณ์เคลื่อนที่สําหรับเครือข่าย Display) และไม่มีงบประมาณที่ใช้ร่วมกัน

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 จะระบุตัวตนได้โดยไม่ซ้ำกันด้วยชุดค่าผสมของรหัสแคมเปญพื้นฐานและรหัสฉบับร่าง ดูข้อมูลเพิ่มเติมได้ที่ DraftSelector.withIds()

จัดสรรแคมเปญร่าง

ออบเจ็กต์ draft จะเชื่อมโยงแคมเปญพื้นฐานกับแคมเปญฉบับร่าง หากต้องการอัปเดตแคมเปญฐาน ให้เผยแพร่การเปลี่ยนแปลงผ่านแคมเปญฉบับร่าง

แคมเปญฉบับร่างก็เหมือนกับแคมเปญอื่นๆ ที่มีวิธีการรับและตั้งค่าแอตทริบิวต์ต่างๆ เช่น เกณฑ์ กลุ่มโฆษณา ราคาเสนอ และโฆษณา

const draftCampaign = draft.getDraftCampaign();

draftCampaign.setAdRotationType("CONVERSION_OPTIMIZE");
draftCampaign.createNegativeKeyword("shoes");

โปรดทราบว่าระบบจะตรวจสอบนโยบายโฆษณาสําหรับแคมเปญฉบับร่างเช่นเดียวกับแคมเปญพื้นฐาน คุณจะทำการทดสอบจากแคมเปญร่างที่มีโฆษณาที่ละเมิดนโยบายไม่ได้

ดำเนินการตามฉบับร่าง

หลังจากจัดสรรแคมเปญฉบับร่างแล้ว คุณจะทำอย่างใดอย่างหนึ่งต่อไปนี้ได้

  1. หากไม่ต้องการใช้การเปลี่ยนแปลง คุณก็นําฉบับร่างออกได้ เมื่อนำฉบับร่างออกแล้ว คุณจะไม่สามารถดึงข้อมูลฉบับร่างกลับคืนมาได้ แต่ยังคงดูฉบับร่างได้ในส่วนฉบับร่างทั้งหมดในแท็บฉบับร่างของ UI ของ Google Ads

    draft.remove();
    
  2. หากตัดสินใจเก็บการเปลี่ยนแปลงที่ทำในแบบร่างไว้ ให้ทำดังนี้

    draft.startApplying();
    

    วิธีนี้จะเริ่มต้นกระบวนการใช้การอัปเดตกับแคมเปญพื้นฐาน ดังนั้นฉบับร่างจะมีสถานะเป็นกำลังใช้... ใน UI ของ Google Ads อย่างไรก็ตาม วิธีการนี้จะไม่แจ้งให้คุณทราบเมื่อกระบวนการเสร็จสมบูรณ์

  3. หากต้องการทดสอบการเปลี่ยนแปลงก่อน ให้ใช้แบบร่างเพื่อสร้างการทดสอบ

การทดสอบ

สร้างการทดสอบ

experiment คล้ายกับฉบับร่าง และสร้างจากแคมเปญพื้นฐาน คุณสร้าง experiment ด้วย ExperimentBuilder ซึ่งจะสร้างการทดสอบโดยอัตโนมัติด้วย "กลุ่ม" 2 กลุ่มที่แสดงถึงส่วนต่างๆ ของการทดสอบ กลุ่มหนึ่ง (เรียกว่ากลุ่มควบคุม) จะมีแคมเปญพื้นฐาน และอีกกลุ่มหนึ่ง (เรียกว่ากลุ่มทดสอบ) จะมีแคมเปญฉบับร่างใหม่ซึ่งคุณจะปรับแต่งตามขั้นตอนสําหรับฉบับร่างด้านบนก่อนกําหนดเวลาการทดสอบ

เมื่อสร้างการทดสอบ โปรดตั้งค่ารายการต่อไปนี้ทั้งหมดในเครื่องมือสร้าง

withCampaign
แคมเปญที่ต้องการใช้ทดสอบ
withTrafficSplitPercent
ปริมาณการเข้าชมที่จะไปยังกลุ่มทดสอบ ระบุ 50 สำหรับ 50%
withStartDate และ withEndDate
ระบุวันที่เริ่มต้นและวันที่สิ้นสุดของแคมเปญ ระบุในรูปแบบ YYYYMMdd
withType
SEARCH_CUSTOM หรือ DISPLAY_CUSTOM โดยขึ้นอยู่กับเครือข่ายที่คุณใช้
withSuffix
ระบุคำต่อท้ายที่จะเพิ่มลงในชื่อของแคมเปญทดสอบเมื่อสร้าง
withGoals
ระบุเป้าหมายสําหรับการทดสอบนี้ ข้อมูลนี้เป็นเพียงการช่วยเตือนคุณเกี่ยวกับเป้าหมายของคุณเมื่อสร้าง ค่าเริ่มต้นที่ดีคือ [{metric: 'CLICKS', direction: 'INCREASE'}]

เปอร์เซ็นต์การแยกการเข้าชมจะกําหนดว่าการเข้าชมส่วนใดที่จะแสดงโฆษณาจากแคมเปญทดสอบแทนแคมเปญหลัก ด้วยเหตุนี้ แคมเปญฐานแต่ละแคมเปญจึงมีการทดสอบที่ทํางานได้ครั้งละ 1 รายการเท่านั้น

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();

การทดสอบจะระบุด้วยรหัสเดียวที่ไม่ซ้ำกัน ซึ่งแตกต่างจากฉบับร่าง ดูข้อมูลเพิ่มเติมได้ที่ ExperimentSelector.withIds()

จัดสรรแคมเปญการทดสอบ

experiment ไม่ใช่แคมเปญ เช่นเดียวกับdraft แต่เป็นการเชื่อมโยงแคมเปญพื้นฐาน แบบร่าง และแคมเปญทดสอบ ช่องของแคมเปญทดสอบจะแก้ไขได้ โดยมีข้อยกเว้นต่อไปนี้

  • ชื่อ
  • สถานะ
  • วันที่เริ่มต้น
  • วันที่สิ้นสุด
  • งบประมาณ
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() การดำเนินการนี้เป็นกระบวนการแบบไม่สอดคล้องกัน เนื่องจากต้องคัดลอกการตั้งค่าทั้งหมดจากแคมเปญฐาน

หลังจากการทดสอบสิ้นสุด

เมื่อการทดสอบเสร็จสิ้นแล้ว คุณจะมีตัวเลือก 2-3 รายการ เราขอแนะนําให้ปล่อยให้การทดสอบเสร็จสมบูรณ์เพื่อให้หยุดแสดงโฆษณา แต่คุณยังคงโต้ตอบกับโฆษณาได้ การทดสอบที่เสร็จสิ้นแล้วจะยังคงนําออก ใช้ หรือเลื่อนขั้นได้ และคุณยังเข้าถึงสถิติประสิทธิภาพของแคมเปญได้

experiment.finish();
const stats = experimentCampaign.getStatsFor("INSERT_TIME_PERIOD_HERE");
  • หากไม่พอใจกับการทดสอบตามสถิติ คุณสามารถนําการทดสอบออก ซึ่งจะเป็นการนําแคมเปญทดสอบออกด้วย การนําการทดสอบออกจะไม่สามารถย้อนกลับได้ แต่คุณจะยังดูการทดสอบดังกล่าวได้ในส่วนการทดสอบทั้งหมดในแท็บการทดสอบของ UI ของ Google Ads

    experiment.remove();
    
  • หากพอใจกับผลการทดสอบ คุณมี 2 ตัวเลือกดังนี้

    1. คุณสามารถเริ่มใช้การเปลี่ยนแปลงได้ และเช่นเดียวกับฉบับร่าง คุณจะไม่ได้รับแจ้งเมื่อกระบวนการเสร็จสมบูรณ์

      experiment.startApplying();
      
    2. คุณสร้างแคมเปญทดสอบเป็นแคมเปญที่ทำงานอย่างเต็มรูปแบบและอิสระได้โดยไม่ส่งผลต่อแคมเปญฐาน กระบวนการนี้เรียกว่าการเปลี่ยนสถานะจะเสร็จสมบูรณ์ทันทีและต้องมีการตั้งงบประมาณใหม่

      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()

คุณควรรอตรวจสอบว่าการดำเนินการเหล่านี้สำเร็จหรือไม่ UI ของ Google Ads จะแสดงสถานะใช้แล้วหรือใช้งานอยู่หลังจากstartApplying()และstartScheduling()เสร็จสมบูรณ์แล้วตามลำดับ และระบบจะระบุว่าใช้ไม่ได้หรือสร้างไม่ได้เมื่อดำเนินการไม่สำเร็จ ซึ่งจะช่วยให้คุณคลิกเพื่อดูข้อผิดพลาดได้

นอกจากนี้ วิธีการบางอย่างอาจไม่ทำงานในขั้นตอนการแสดงตัวอย่าง แต่ทำงานได้หลังจากเรียกใช้แล้ว เช่น หลังจากสร้างฉบับร่าง

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

การดำเนินการนี้จะดำเนินการไม่สำเร็จในโหมดพรีวิวเนื่องจากเข้าถึงแคมเปญฉบับร่างไม่ได้ในทันที

ในทํานองเดียวกัน การสร้างการทดสอบและพยายามดึงข้อมูลแคมเปญฉบับร่างทันทีในโหมดแสดงตัวอย่างจะไม่สําเร็จ เนื่องจากระบบไม่ได้สร้างฉบับร่างจริง

ด้วยเหตุนี้ โปรดตรวจสอบบันทึกด้านล่างรายการสคริปต์หลังจากเรียกใช้ และดำเนินการต่อกับสคริปต์ที่ดำเนินการในเวอร์ชันตัวอย่างไม่สำเร็จเฉพาะในกรณีที่คุณเชื่อว่าสาเหตุเกิดจากข้อจำกัดในโหมดเวอร์ชันตัวอย่าง