آیا تا به حال صبح دوشنبه کار خود را شروع کرده اید و وقتی صورت حساب ها را بررسی می کنید متوجه شده اید که بیش از حد خرج کرده اید؟
آیا تا به حال به این فکر کرده اید که بهترین راه حل برای خرج کردن بیش از حد در حساب Google Ads چیست؟
شاید در نظر داشته باشید که قوانینی را برای توقف کمپین های فردی در زمانی که بیش از حد خرج می کنند، تنظیم کنید، یا حتی تصمیم گرفته اید در آخر هفته کار کنید تا مطمئن شوید هیچ مشکلی پیش نمی آید؟
با در نظر گرفتن این موضوع، من یک اسکریپت اضافه هزینه تبلیغاتی گوگل به نام Hard Stop Script نوشتهام که به شما این امکان را میدهد که نگران هزینههای زیاد در تعطیلات آخر هفته یا تعطیلات نباشید و مطمئن باشید که بودجه شما یا مشتریانتان تحت الشعاع قرار نمیگیرد. از هزینه ها
ابتدا، بیایید بررسی کنیم چرا و چگونه تبلیغات گوگل بیش از حد خرج می کند:
چرا تبلیغات گوگل در کمپین بیش از حد خرج می کند؟
الگوریتمها و بهینهسازیهای مناقصه Google Ads تعیین میکنند که چه روزهایی از ماه باید هزینهها را برای دریافت کلیکها و تبدیلهای بیشتر تنظیم کنند، مانند زمانی که افزایش حجم جستجو یا نرخ تبدیل بالاتر است. این بدان معناست که برخی از روزها ممکن است بیشتر یا کمتر از بودجه کمپین روزانه خود را خرج کنید – به اندازه دو برابر میانگین بودجه روزانه. به همین دلیل است که یافتن راههایی برای به حداقل رساندن خطر دو برابر کردن بودجه مشتریانتان بسیار مهم است، و این دقیقاً همان چیزی است که این اسکریپت سخت در مورد آن است.
معرفی اسکریپت به تبلیغات گوگل
توقف سخت از هر گونه هزینه های اضافی وحشتناک جلوگیری می کند، که می تواند به طور کلی برای قرار دادن بسیار مهم باشد، اما مهمتر از آن، در زمان های خارج از قبض مانند تعطیلات آخر هفته بانکی یا زمان های بالاتر مانند جمعه سیاه.
برخی از حسابها میتوانند از محدودیتهای هزینه ماهانه در تنظیمات خود استفاده کنند، اما این فقط برای حسابهایی در دسترس است که از روش صورتحساب استفاده نمیکنند.
اسکریپت زمانی که به صورت ساعتی اجرا میشود بهترین عملکرد را دارد تا در بودجهها تا حد امکان سختگیر باشد. هزینههای جاری حساب را برای یک ماه میخواند و آن را با بودجهای که میتوانید در بالای اسکریپت وارد کنید مقایسه میکند. اگر از مقدار آن بیشتر شد، در تمام کمپینهای فعال فعلی چرخه میزند، تگ «PAUSED FROM HS» را اضافه میکند (اگر قبلاً برچسب را در حساب خود ندارید، آن را ایجاد کنید)، و سپس همه کمپینهای فعال را متوقف میکند. سپس اسکریپت ایمیلی حاوی یادداشتی درباره اتفاقی که اخیراً رخ داده است برای شما ارسال میکند و میتوانید آدرس ایمیل (یا آدرسهای ایمیل) را که میخواهید به شما اطلاع داده شود در بالای اسکریپت وارد کنید. در ابتدای ماه آینده، اسکریپت تمام کمپینهایی را که متوقف شده و برچسبگذاری شدهاند را میگیرد، دوباره فعال میکند و برچسب آنها را لغو میکند.
برای اسکریپت زیر را ببینید، در صورت تمایل کپی و جایگذاری کنید و در حساب های خود آپلود کنید. فقط بودجه و آدرس ایمیل را تنظیم کنید و آماده هستید.
// HARD STOP SCRIPT
// اگر می خواهید از نقل و انتقالات انبوه اجتناب کنید، بودجه ماهانه خود را وارد کنید،
// و اگر بگذرید، این اسکریپت همه چیز را متوقف می کند. سپس دوباره فعال می شود
// کمپین ها و حذف برچسب در روز اول ماه آینده.
// نوشته شده توسط Aaron Digby، Honchō Search، 2022/05/24 \
تابع main() {
// بودجه ماهانه خود را وارد کنید \
بودجه متغیر = 1000;
// آدرس ایمیل دلخواه خود را برای ایمیل اضطراری وارد کنید \
var emailAddress = ‘example@example.com’;
// نام برچسب ترجیحی را وارد کنید
var campaignLabel = “شکست از HS”;
// برداشت هزینه ها از حساب
var query = “SELECT metrics.cost_micros, customer.id” +
“از مشتری” +
” WHERE segments.date DURING THIS_MONTH”;
var report = AdsApp.report(query);
var rows = report.rows();
if (rows.hasNext()) {
var row = rows.next();
var صرف = (ردیف[“metrics.cost_micros”] / 1000000).toFixed(2);
حساب var = ردیف[“customer.id”];
اگر (هزینه > بودجه){
Logger.log (هزینه ها)
Logger.log(“OVER BUDGET – PAUSE ALL CAMPAIGNS”);
}
}
// پیدا می کند اگر حساب دارای برچسب است، اگر نه، آن را ایجاد کنید
تابع labelMaker() {
تلاش كردن {
var labelSelector = AdsApp.labels();
var labelIterator = labelSelector.get();
var createCampaignLabel = true;
while (labelIterator.hasNext()) {
var label = labelIterator.next();
var labelName = label.getName();
if (labelName == campaignLabel) {
createCampaignLabel = false;
}
}
if (createCampaignLabel) {
AdsApp.createLabel(campaignLabel);
Logger.log (“ایجاد برچسب کمپین ‘” + برچسب کمپین Label + “‘.”)
}
} گرفتن (ه) {
Logger.log(
“خطا در ایجاد برچسب – از قبل در حساب وجود دارد”
)
}
}
labelMaker();
/* چرخه از طریق جستجو، نمایش، خرید و کمپین های ویدیویی و
پخش زنده را متوقف می کند و آنها را تگ می کند */
if (هزینه > بودجه){
var campaignSelector = AdsApp
.campaigns()
.withCondition (“campaign.status = ENABLED”)
var campaignIterator = campaignSelector.get();
while (campaignIterator.hasNext()){
var Camp = campaignIterator.next();
Logger.log(campaign.getName())
Campaign.applyLabel(campaignLabel);
Campaign.pause();
}
var shoppingCampaignSelector = AdsApp
.shoppingCampaigns()
.withCondition (“campaign.status = ENABLED”)
var shoppingCampaignIterator = shoppingCampaignSelector.get();
while (shoppingCampaignIterator.hasNext()){
var shoppingCampaign = shoppingCampaignIterator.next();
Logger.log(shoppingCampaign.getName())
appaignLabel(campaignLabel);
shoppingCampaign.pause();
}
var videoCampaignSelector = AdsApp
.videoCampaigns()
.withCondition (“campaign.status = ENABLED”)
var videoCampaignIterator = videoCampaignSelector.get();
while (videoCampaignIterator.hasNext()){
var videoCampaign = videoCampaignIterator.next();
Logger.log(videoCampaign.getName())
کمپین ویدیویی applicationLabel(campaignLabel);
videoCampaign.pause();
}
}
/* کمپین های موقتاً متوقف شده را فعال کنید و برچسب را بردارید
ابتدای ماه آینده */
var d = new Date();
d.toUTCString();
Logger.log(d.toUTCString())
Logger.log(d.getUTCDate())
Logger.log(d.getUTCHours())
Logger.log (“اکنون کمپین هایی که قبلاً توسط اسکریپت HS متوقف شده بودند فعال می شوند”)
var labelSelector = AdsApp.labels()
.withCondition(“label.name = ‘” + campaignLabel + “‘”)
var labelIterator = labelSelector.get();
var labelID;
if (labelIterator.hasNext()) {
var label = labelIterator.next();
labelID = label.getId()
}
Logger.log (حساب)
Logger.log(labelID)
if (labelID != null){
var campaignSelector = AdsApp
.campaigns()
.withCondition(“campaign.status = MAUSE”)
.withCondition(“campaign.labels حاوی همه (“مشتریان/” + حساب + “/labels/” + labelID + “‘)”)
var campaignIterator = campaignSelector.get();
while (campaignIterator.hasNext()){
var Camp = campaignIterator.next();
Logger.log(campaign.getName())
var utcDate = d.getUTCDate();
var utcHours = d.getUTCHHours();
if(utcDate == 1 && utcHours == 1) {
camp.resolve();
Campaign.removeLabel(campaignLabel);
}
}
var shoppingCampaignSelector = AdsApp
.shoppingCampaigns()
.withCondition(“campaign.status = MAUSE”)
.withCondition(“campaign.labels حاوی همه (“مشتریان/” + حساب + “/labels/” + labelID + “‘)”)
var shoppingCampaignIterator = shoppingCampaignSelector.get();
while (shoppingCampaignIterator.hasNext()){
var shoppingCampaign = shoppingCampaignIterator.next();
Logger.log(shoppingCampaign.getName())
var utcDate = d.getUTCDate();
var utcHours = d.getUTCHHours();
if(utcDate == 1 && utcHours == 1) {
shoppingCampaign.enable();
shoppingCampaign.removeLabel(campaignLabel);
}
}
var videoCampaignSelector = AdsApp
.videoCampaigns()
.withCondition(“campaign.status = MAUSE”)
.withCondition(“campaign.labels حاوی همه (“مشتریان/” + حساب + “/labels/” + labelID + “‘)”)
var videoCampaignIterator = videoCampaignSelector.get();
while (videoCampaignIterator.hasNext()){
var videoCampaign = videoCampaignIterator.next();
Logger.log(videoCampaign.getName())
var utcDate = d.getUTCDate();
var utcHours = d.getUTCHHours();
if(utcDate == 1 && utcHours == 1) {
videoCampaign.enable();
videoCampaign.removeLabel(campaignLabel);
}
}
}
// ایجاد و ارسال ایمیل هشدار \
var accountName = AdsApp.currentAccount().getName()
var subject = ‘ایمیل فوری با جلسه بودجه برای’ + accountName.toUpperCase();
var message = ‘اسکریپت توقف سخت همه کمپین ها را متوقف کرده است’;
اگر (هزینه > بودجه){
MailApp.sendEmail(
آدرس ایمیل،
موضوع،
پیام)
}
}
چند نکته مهم قابل ذکر است:
با توجه به این واقعیت که API گوگل در حال حاضر قدیمی است، این مورد با کمپین های حداکثر عملکرد کار نخواهد کرد. اسکریپت کل هزینههای حساب را میخواند، همه کمپینهای دیگر را متوقف میکند و یک ایمیل فوری برای شما ارسال میکند، اما آنها همچنان اجرا میشوند. هنگامی که برای اولین بار از یک اسکریپت استفاده می کنید، باید دو بار آن را تأیید کنید. هنگام پیشنمایش اسکریپت میگوید شکست خورده است زیرا نمیتواند برچسب را پیدا کند. این به طور پیشفرض است زیرا پیشنمایش در واقع تگ را ایجاد نمیکند، به این معنی که وقتی از تگهای حساب شما عبور میکند، در آنجا وجود نخواهد داشت. اما وقتی اجرا شد تگ ایجاد می شود.
زمانی که Google Ads API خود را بهروزرسانی کرد، این اسکریپت را بهروزرسانی میکنم تا Performance Max را نیز شامل شود.
امیدوارم این مورد برای شما مفید واقع شده باشد و در صورت تمایل به من پیام دهید تا هر گونه پیشنهاد یا پیشرفتی داشته باشید.
سوالات متداول تبلیغات گوگل
هر چند وقت یکبار باید هزینه کمپین تبلیغات گوگل خود را بررسی کنید؟
بستگی دارد. بررسی های روزانه می تواند بسیار مفید باشد تا مطمئن شوید هیچ مشکلی پیش نمی آید، اما می تواند زمان بر باشد. نگاهی گذرا هر چند روز یکبار بهترین استفاده از زمان شماست، اما زمانی که برای اولین بار کمپین جدیدی را آپلود می کنید یا بودجه را تنظیم می کنید، ممکن است بخواهید این کار را به طور منظم تری انجام دهید.
هر چند وقت یکبار گوگل برای یک کمپین بیش از حد خرج می کند؟
بهینهسازی داخلی Google به این معنی است که بودجه روزانهای که برای یک کمپین تعیین میکنید، میتواند هر روز بر اساس روزهایی از ماه که بیشترین احتمال کلیکها و/یا تبدیلها را دریافت میکنید، بیش از حد یا کمتر مصرف شود. این بدان معناست که هزینه کمپین روزانه شما می تواند تا دو برابر بودجه روزانه شما باشد. توجه به این نکته بسیار مهم است زیرا بسیاری از مردم تصور می کنند که بودجه روزانه تمام آن چیزی است که در یک روز خرج می شود.
چقدر باید برای کمپین گوگل ادز هزینه کنم؟
بستگی به کمپین داره میتوانید از Google Keyword and Performance Planner برای پیشبینی حجم جستجو و میانگین CPC برای پیشبینی میزان مصرف روزانهتان استفاده کنید. پس از اجرای کمپین شما برای چند روز، میتوانید از سهم نمایشهای از دست رفته در مقابل بودجه استفاده کنید تا بفهمید به دلیل کمبود بودجه چه تعداد بازدید را از دست دادهاید و هزینههای روزانه خود را از آنجا تنظیم کنید.
آرون دیگبی، تحلیلگر جستجوی پولی
اگر به پشتیبانی از تیم Paid Media Honcho نیاز دارید، همین امروز با ما تماس بگیرید.