低质量得分警报脚本

如果质量得分低的关键字正在浪费您的资金,此脚本将帮助您找出它们的位置,以便正面解决问题。

质量得分是决定广告评级的关键,它决定了您的广告在搜索引擎结果页面中的显示位置,也是 Google 如何确定您的每次点击费用的一个因素。它通过很少展示广告来惩罚那些以低质量得分出价的广告客户。

如果您使用的是 Google Grants 帐户,低质量得分可能会使您的整个帐户面临被暂停的风险,因此您需要尽快解决这个问题。

脚本是如何工作的?

此脚本可以为修复低质量得分关键字节省大量时间。您需要做的就是设置一个质量得分阈值,脚本将通过电子邮件发送给您,得分等于或低于该值的关键字所在的位置,因此您可以立即将它们分类。

它还可以为您标记关键字,使它们更容易找到。如果您有零容忍政策,它可以为您暂停关键字(确保在这种情况下您的阈值不会太高)。

在进行测试运行以检查是否一切正常后,我们建议您根据您希望脚本为您检查质量得分的频率设置定期计划。

我如何使用它?

在 Google Ads 中,转到批量操作,然后选择脚本以转到脚本页面。单击大“+”按钮创建一个新按钮,然后粘贴下面的脚本。

然后,编辑以下选项:

  1. EMAIL_ADDRESSES是将收到低质量得分关键字警报的电子邮件地址列表。这些应该是方括号内的逗号分隔列表。例如,[“[email protected]”和“[email protected]”]。
  2. QS_THRESHOLD是您定义的脚本将视为“低”的质量得分值。
  3. 如果您希望自动标记低质量得分关键字,则将LABEL_KEYWORDS设置为 true 并将标签名称放在LOW_QS_LABEL_NAME 中
  4. 如果您希望自动暂停低质量得分关键字,请将PAUSE_KEYWORDS设置为 true。

低质量得分警报脚本代码

// ID: 61daad0e8fb8188eb2257bc8ee01bc5b
/**
 *
 * Low Quality Score Alert
 *
 * This script finds the low QS keywords (determined by a user defined threshold)
 * and sends an email listing them. Optionally it also labels and/or pauses the
 * keywords.
 *
 * Version: 1.0
 * Google AdWords Script maintained on brainlabsdigital.com
 *
 **/


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//Options

var EMAIL_ADDRESSES = ["[email protected]", "[email protected]"];
// The address or addresses that will be emailed a list of low QS keywords
// eg ["[email protected]", "[email protected]"] or ["[email protected]"]

var QS_THRESHOLD = 3;
// Keywords with quality score less than or equal to this number are
// considered 'low QS'

var LABEL_KEYWORDS = true;
// If this is true, low QS keywords will be automatically labelled

var LOW_QS_LABEL_NAME = "Low QS Keyword";
// The name of the label applied to low QS keywords

var PAUSE_KEYWORDS = false;
// If this is true, low QS keywords will be automatically paused
// Set to false if you want them to stay active.



//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// Functions

function main() {
  Logger.log("Pause Keywords: " + PAUSE_KEYWORDS);
  Logger.log("Label Keywords: " + LABEL_KEYWORDS);

  var keywords = findKeywordsWithQSBelow(QS_THRESHOLD);
  Logger.log("Found " + keywords.length + " keywords with low quality score");

  if (!labelExists(LOW_QS_LABEL_NAME)) {
    Logger.log(Utilities.formatString('Creating label: "%s"', LOW_QS_LABEL_NAME));
    AdWordsApp.createLabel(LOW_QS_LABEL_NAME, 'Automatically created by QS Alert', 'red');
  }

  var mutations = [
    {
      enabled: PAUSE_KEYWORDS,
      callback: function (keyword) {
        keyword.pause();
      }
    },
    {
      enabled: LABEL_KEYWORDS,
      callback: function (keyword, currentLabels) {
        if (currentLabels.indexOf(LOW_QS_LABEL_NAME) === -1) {
          keyword.applyLabel(LOW_QS_LABEL_NAME);
        }
      }
    }
  ];

  var chunkSize = 10000;
  var chunkedKeywords = chunkList(keywords, chunkSize);

  Logger.log("Making changes to keywords..");
  chunkedKeywords.forEach(function (keywordChunk) {
    mutateKeywords(keywordChunk, mutations);
  });

  if (keywords.length > 0) {
    sendEmail(keywords);
    Logger.log("Email sent.");
  } else {
    Logger.log("No email to send.");
  }
}

function findKeywordsWithQSBelow(threshold) {
  var query = 'SELECT Id, AdGroupId, CampaignName, AdGroupName, Criteria, QualityScore, Labels'
    + ' FROM KEYWORDS_PERFORMANCE_REPORT WHERE Status = "ENABLED" AND CampaignStatus = "ENABLED" AND AdGroupStatus = "ENABLED"'
    + ' AND HasQualityScore = "TRUE" AND QualityScore <= ' + threshold;
  var report = AdWordsApp.report(query);
  var rows = report.rows();

  var lowQSKeywords = [];
  while (rows.hasNext()) {
    var row = rows.next();
    var lowQSKeyword = {
      campaignName: row['CampaignName'],
      adGroupName: row['AdGroupName'],
      keywordText: row['Criteria'],
      labels: (row['Labels'].trim() === '--') ? [] : JSON.parse(row['Labels']),
      uniqueId: [row['AdGroupId'], row['Id']],
      qualityScore: row['QualityScore']
    };
    lowQSKeywords.push(lowQSKeyword);
  }
  return lowQSKeywords;
}

function labelExists(labelName) {
  var condition = Utilities.formatString('LabelName = "%s"', labelName);
  return AdWordsApp.labels().withCondition(condition).get().hasNext();
}

function chunkList(list, chunkSize) {
  var chunks = [];
  for (var i = 0; i < list.length; i += chunkSize) {
    chunks.push(list.slice(i, i + chunkSize));
  }
  return chunks;
}

function mutateKeywords(keywords, mutations) {
  var keywordIds = keywords.map(function (keyword) {
    return keyword['uniqueId'];
  });

  var mutationsToApply = getMutationsToApply(mutations);
  var adwordsKeywords = AdWordsApp.keywords().withIds(keywordIds).get();

  var i = 0;
  while (adwordsKeywords.hasNext()) {
    var currentKeywordLabels = keywords[i]['labels'];
    var adwordsKeyword = adwordsKeywords.next();

    mutationsToApply.forEach(function (mutate) {
      mutate(adwordsKeyword, currentKeywordLabels);
    });
    i++;
  }
}

function getMutationsToApply(mutations) {
  var enabledMutations = mutations.filter(function (mutation) {
    return mutation['enabled'];
  });

  return enabledMutations.map(function (condition) {
    return condition['callback'];
  });
}

function sendEmail(keywords) {
  var subject = "Low Quality Keywords Paused";
  var htmlBody =
    "<p>Keywords with a quality score of less than " + QS_THRESHOLD + "found.<p>"
    + "<p>Actions Taken:<p>"
    + "<ul>"
    + "<li><b>Paused</b>: " + PAUSE_KEYWORDS + "</li>"
    + "<li><b>Labelled</b> with <code>" + LOW_QS_LABEL_NAME + "</code>: " + LABEL_KEYWORDS + "</li>"
    + "</ul>"
    + renderTable(keywords);

  MailApp.sendEmail({
    to: EMAIL_ADDRESSES.join(","),
    subject: subject,
    htmlBody: htmlBody
  });
}

function renderTable(keywords) {
  var header = '<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">'
    + '<thead><tr>'
    + '<th>Campaign Name</th>'
    + '<th>Ad Group Name</th>'
    + '<th>Keyword Text</th>'
    + '<th>Quality Score</th>'
    + '</tr></thead><tbody>';

  var rows = keywords.reduce(function (accumulator, keyword) {
    return accumulator
      + '<tr><td>' + [
        keyword['campaignName'],
        keyword['adGroupName'],
        keyword['keywordText'],
        keyword['qualityScore']
      ].join('</td><td>')
      + '</td></tr>';
  }, "");

  var footer = '</tbody></table>';

  var table = header + rows + footer;
  return table;
}

给TA打赏
共{{data.count}}人
人已打赏
广告投放

精确匹配脚本

2021-10-17 18:18:33

广告投放

相关短语脚本

2021-10-17 18:25:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索