Как проверить корректность своего аккаунта AdWords

28 Мая 2016

Проверяем корректность своего аккаунта AdWords

Статья Дениэла Гилберта (Daniel Gilbert)

Мы все делаем это. В нашей спешке покорять мир PPC, мы пренебрегли, тем чтобы проверить свою собственную работу или забыли проверить вещи, которые мы наивно думали, что мы вспомним год спустя.

Даже я совершил это, хотя многие люди думают, что я легенда PPC (отказ от ответственности: может быть, я на самом деле единственный, кто сохраняет такое мнение).

Так что ниже я показываю сценарий для AdWords, построенный командой из Brainlabs (мой работодатель), который будет проверять наличие некоторых распространенных ошибок AdWords. Я надеюсь, что это поможет вам сэкономить время в следующий раз, когда ваш босс или клиент решит осмотреться в вашем аккаунте AdWords. Это особенно полезно, если у них есть, раздражающая привычка найти единственную ошибку, которую вы когда-либо сделали!

Сценарий будет автоматически проверять наличие ряда ошибок новичков, таких как ключевые слова с точным соответствием со знаком плюс или широким соответствием ключевых слов недостающих знаков плюс. (Вы до сих пор не используете чистый широкий матч?)

Он будет искать как эти чрезвычайно неудобные рекламные предложения прошлых лет, которые вы забыли обновить с 2013 года,- так и те, которые, появились при проведении аудита счета только вчера. Для некоторых более поверхностных проверок, он будет сканировать ваш рекламный текст на наличие распространенных ошибок и опечаток.

Кроме того, мы сделали и расширенный вариант - misspellingsSheetUrl который является Google Sheet, в котором мы написали некоторые из общих опечаток и наиболее распространенных английских слов (на основе удивительно полезного списка в Википедии). Если вы хотите использовать другой список - для отражения опечаток в терминах вашей отрасли или для других языков - вы можете заменить URL с вашей собственной таблицы. Просто убедитесь, что он отформатирован тот же: опечатками в колонке А и возможные корректировки в столбце B.

Пишите на Twitter, если вы можете сообщить о каких-либо других ошибках AdWords, которые мы могли бы внести в автоматическое сканирование в v 2.0 этого сценария ... Я знаю, что вы все сделали их!

А вот сценарий:

	/**
*
* AdWords Script for keyword and ad checking.
* Checks keyword text for punctuation suggesting the wrong match type, checks
* broad match keywords for missing BMM. Checks ad text for text that suggests 
* ads are out-of-date (like previous years) and for common English spelling
* mistakes.
*
* Version: 1.0
* Google AdWords Script maintained by brainlabsdigital.com
*
**/

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

var spreadsheetUrl = "https://docs.google.com/YOUR-SPREADSHEET-URL-HERE";
// The URL of the Google Doc the results will be put into.

var campaignNameDoesNotContain = [];
// Use this if you want to exclude some campaigns.
// For example ["Display"] would ignore any campaigns with 'Display' in the name,
// while ["Display","Shopping"] would ignore any campaigns with 'Display' or
// 'Shopping' in the name.
// Leave as [] to not exclude any campaigns.

var campaignNameContains = [];
// Use this if you only want to look at some campaigns.
// For example ["Brand"] would only look at campaigns with 'Brand' in the name,
// while ["Brand","Generic"] would only look at campaigns with 'Brand' or 'Generic'
// in the name.
// Leave as [] to include all campaigns.

var ignorePausedCampaigns = true;
// Set this to true to only look at currently active campaigns.
// Set to false to include campaigns that had impressions but are currently paused.

var checkKeywords = true;
// Set this to true to look at keyword text for errors like missing BMM.

var checkAdText = true;
// Set this to true to look at ad text for errors like previous years.

var checkSpelling = true;
// Set this to true to check ad text for some common spelling errors.

var checkAdsFor = ["2013", "2014", "2015", "Easter"];
// This is the text that the script will look for in ad copy. Feel free to add more!


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
// Advanced Options
var misspellingsSheetUrl = "https://docs.google.com/spreadsheets/d/1Z2Fg_F8WhmY8Ey5Bv4Zuk8vcTW7A2EoVwMbGVz7TNms/edit#gid=0";
// This spreadsheet has the list of English spelling errors, used if checkSpelling
// is true.


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

function main() {
  var spreadsheet = checkSpreadsheet(spreadsheetUrl, "the spreadsheet");
  var sheet = spreadsheet.getSheets()[0];
  var campaignIds = getCampaignIds();
  
  if (checkKeywords) {
    keywordChecking(campaignIds, sheet);
    Logger.log("Finished keyword checks.");
  }
  
  if (checkAdText) {
    adTextChecking(campaignIds, sheet);
    Logger.log("Finished ad text checks.");
  }
  
  if (checkSpelling) {
    adSpellingChecking(campaignIds, sheet); 
    Logger.log("Finished common misspelling checks.");
  }
}


// Check the spreadsheet URL has been entered, and that it works
function checkSpreadsheet(spreadsheetUrl, spreadsheetName) {
  if (spreadsheetUrl.replace(/[AEIOU]/g,"X") == "https://docs.google.com/YXXR-SPRXXDSHXXT-XRL-HXRX") {
    throw("Problem with " + spreadsheetName + " URL: make sure you've replaced the default with a valid spreadsheet URL.");
  }
  try {
    var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
    return spreadsheet;
  } catch (e) {
    throw("Problem with " + spreadsheetName + " URL: '" + e + "'");
  }
}

// Get the IDs of campaigns which match the given options
function getCampaignIds() {
  var whereStatement = "WHERE ";
  var whereStatementsArray = [];
  var campaignIds = [];
  
  
  if (ignorePausedCampaigns) {
    whereStatement += "CampaignStatus = ENABLED ";
  } else {
    whereStatement += "CampaignStatus IN ['ENABLED','PAUSED'] ";
  }
  
  for (var i=0; i -1) {
          nonBroadWithPlusses.push([keywordMatchRow["CampaignName"],keywordMatchRow["AdGroupName"],"'"+keywordMatchRow["Criteria"],keywordMatchRow["KeywordMatchType"]]);
        } 
      }
      
      if (keywordMatchRow["KeywordMatchType"].toLowerCase() != "exact") {
        if(keywordMatchRow["Criteria"].indexOf("[") > -1 || keywordMatchRow["Criteria"].indexOf("]") > -1) {
          nonExactWithBrackets.push([keywordMatchRow["CampaignName"],keywordMatchRow["AdGroupName"],"'"+keywordMatchRow["Criteria"],keywordMatchRow["KeywordMatchType"]]);
        }
      }
      
      if (keywordMatchRow["KeywordMatchType"].toLowerCase() != "phrase") {
        if(keywordMatchRow["Criteria"].indexOf('"') > -1) {
          nonPhraseWithQuotes.push([keywordMatchRow["CampaignName"],keywordMatchRow["AdGroupName"],"'"+keywordMatchRow["Criteria"],keywordMatchRow["KeywordMatchType"]]);
        }
      }
      
    }//end while
    
    var headers = ["Campaign", "Ad Group", "Keyword", "Match"];
    printRows(sheet, "Broad Match Keywords Missing +s", headers, broadMissingPlusses);
    printRows(sheet, "Non-Broad Match Keywords With +s", headers, nonBroadWithPlusses);
    printRows(sheet, "Non-Exact Match Keywords With [ or ]", headers, nonExactWithBrackets);
    printRows(sheet, 'Non-Phrase Match Keywords With "s', headers, nonPhraseWithQuotes);
    
  } catch (e) {
    Logger.log("Keyword checking failed: " + e); 
  }
} // end function keywordChecking


function adTextChecking(campaignIds, sheet) {
  try {
    var adLines = ['Headline', 'Description1', 'Description2', 'DisplayUrl'];
    var adsWithBadText = [];
    var patterns = [];
    var charactersToEscape = ["\\", "/", ".", "?", "+", "*", "^", "$", "[", "]", "(", ")", "{", "}"];
    for (var k=0; k 0) {
        adsWithBadText.push([row["CampaignName"], row["AdGroupName"], row['Headline'],
                             row['Description1'], row['Description2'], row['DisplayUrl'],
                             textFound.join(", ")]);
      }
      
    } // end while
    
    var headers = ["Campaign", "Ad Group", 'Headline', 'Description 1', 'Description 2',
                   'Display Url', 'Problematic Text'];
    printRows(sheet, "Ad Copy With Problematic Text", headers, adsWithBadText);
    
  } catch (e) {
    Logger.log("Ad text checking failed: " + e); 
  }
  
} // function adTextChecking


function adSpellingChecking(campaignIds, sheet) {
  try {
    var misspellingsSpreadsheet = checkSpreadsheet(misspellingsSheetUrl, "the misspelling spreadsheet");
    var misspellingsSheet = misspellingsSpreadsheet.getSheets()[0];
    var misspellings = misspellingsSheet.getRange(2, 1, misspellingsSheet.getLastRow()-1, 2).getValues()
    
    for (var k=0; k -1) {
          textFound.push(misspellings[k][0].trim());
          didYouMean.push(misspellings[k][1]);
        }
      }
      
      if (textFound.length > 0) {
        adsWithBadText.push([row["CampaignName"], row["AdGroupName"], row['Headline'],
                             row['Description1'], row['Description2'], row['DisplayUrl'],
                             textFound.join(", "), didYouMean.join(", ")]);
      }
      
    } // end while
    
    var headers = ["Campaign", "Ad Group", 'Headline', 'Description 1', 'Description 2',
                   'Display Url', 'Possible Misspelling', 'Possible Corrections'];
    printRows(sheet, "Ad Copy With Possible Misspellings", headers, adsWithBadText);
    
  } catch (e) {
    Logger.log("Ad spell checking failed: " + e); 
  }
  
} // function adSpellingChecking

Источник: Search Engine Land


Вернуться к списку