Controla el mal rendimiento de tus palabras clave con este Script de Adwords

En esta ocasión queremos compartir un script que desarrollamos hace unos años para poder identificar qué palabras clave están rindiendo por debajo de lo esperado . Una vez que el script identifica esas palabras genera una etiqueta a nivel de palabra clave que nos permite empezar a optimizar ahorrando mucho tiempo analizando por dónde empezar. Es relativamente sencillo a nivel de funcionamiento y código, pero puede darnos mucha luz para gestionar una cuenta.

 

¿Cómo configurar un script en Google Ads?

Primero veamos cómo se configura un script dentro de Adwords. Los pasos a seguir son:

1) Entrar dentro de la cuenta a la que se quiere aplicar.

2)  A nivel de campañas haz click sobre “ Automatizar ”  y “ Crear y administrar secuencias de comandos”

3) Haz click en el botón  “ +script

4) Copia el código del script (más abajo tienes los enalces) y pégalo.

5) Edita el nombre del Script para que sea fácilmente reconocible cuando se ejecute.

6) Haz click sobre “ Preview ” y  Autorizar .

7) Ya lo puedes guardar.

9) Cierra y configura para que  se ejecute con la periodicidad que desees .

 

Cómo configurar este script

1. Copiar y pegar este código en la cuenta en la que lo quieras utilizar :

function main() {
   
  function getConditionsFromSpreadsheet() {
    var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1momuCi2pNDVw_C7avIpxv56JDhQgt6fDY31mb-FXTik/edit?ts=564a3115#gid=0';
    var SHEET_NAME = 'Conditions'
    var ss = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
    var sheet = ss.getSheetByName(SHEET_NAME);
    var lastColumn = sheet.getLastColumn();
    var lastRow = sheet.getLastRow();
    var conditions = sheet.getRange(3,2,lastRow-2,lastColumn-1)
    return conditions.getValues();
  }
  
  function getAllPreviousLabels() {
    var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1momuCi2pNDVw_C7avIpxv56JDhQgt6fDY31mb-FXTik/edit?ts=564a3115#gid=0';
    var SHEET_NAME = 'PreviousLabel'
    var ss = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
    var sheet = ss.getSheetByName(SHEET_NAME);
    var lastColumn = sheet.getLastColumn();
    var lastRow = sheet.getLastRow();
    var previousLabels = sheet.getRange(2,1,lastRow-1,lastColumn);
    return previousLabels.getValues();
  }
  
  
  function removeOldLabels(){
     function arrayForClearing(rows) {
       var arr = [];
       for (var i=0;i<rows;i++) {
         arr[i] = [''];
       }
       Logger.log(arr)
       return arr;
     }
    var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1momuCi2pNDVw_C7avIpxv56JDhQgt6fDY31mb-FXTik/edit?ts=564a3115#gid=0';
    var SHEET_NAME = 'PreviousLabel'
    var ss = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
    var sheet = ss.getSheetByName(SHEET_NAME);
    var lastColumn = sheet.getLastColumn();
    var lastRow = sheet.getLastRow();
    var a = arrayForClearing(lastRow-1);
    sheet.getRange(2,1,lastRow-1,lastColumn).setValues(a);
    Logger.log('Previous labels were deleted from doc');
  }
  
  function saveCurrentLabels(label) {
    var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1momuCi2pNDVw_C7avIpxv56JDhQgt6fDY31mb-FXTik/edit?ts=564a3115#gid=0';
    var SHEET_NAME = 'PreviousLabel'
    var ss = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
    var sheet = ss.getSheetByName(SHEET_NAME);
    var lastRow = sheet.getLastRow();
    if (sheet.getRange(lastRow,1).getValue()!=label) {
      sheet.getRange(lastRow+1,1).setValue(label)
    }
    Logger.log('Label '+
               label+ 
               'saved to spreadsheet '+ 
               SPREADSHEET_URL+
               ' in '+
               SHEET_NAME+' tab');
  } 
  
  var previousLabelsIterator = getAllPreviousLabels()
  removeOldLabels()
  var conditionIterator = getConditionsFromSpreadsheet()
  
    for (var i = 0; i < previousLabelsIterator.length; i++) {
      var label=previousLabelsIterator[i];
      var li=AdWordsApp.labels().withCondition('Name = "'+label[0]+'"').get();
      if (li.hasNext())
      {
        var keywords = AdWordsApp.keywords().
        withCondition("LabelNames CONTAINS_ANY['"+label[0]+"']").
        forDateRange('LAST_7_DAYS').
        get();
        Logger.log('Label for clearing ' + label[0])
        while (keywords.hasNext()) {
          var keyword = keywords.next();
          Logger.log('   '+keyword.getText()+'-Cleared')
          keyword.removeLabel(label[0]);
        }  
      } 
    }  
    
    // Iterates all the conditions
    for (var i = 0; i < conditionIterator.length; i++) {
      var condition=conditionIterator[i];
      var conditionSelectors=condition[0].split("/")
      switch(conditionSelectors.length) {
        case 1:
          var keywords = AdWordsApp.keywords().
          withCondition('CampaignStatus = ENABLED').
          withCondition('AdGroupStatus = ENABLED').
          withCondition('Status = ENABLED').
          withCondition(conditionSelectors[0]+condition[1]).
          forDateRange('LAST_7_DAYS').
          get();
          break;
        case 2:
          var keywords = AdWordsApp.keywords().
          withCondition('CampaignStatus = ENABLED').
          withCondition('AdGroupStatus = ENABLED').
          withCondition('Status = ENABLED').
          withCondition(conditionSelectors[0]+condition[1]).
          withCondition(conditionSelectors[1]+condition[2]).
          forDateRange('LAST_7_DAYS').
          get();
          break;
        case 3:
           var keywords = AdWordsApp.keywords().
           withCondition('CampaignStatus = ENABLED').
           withCondition('AdGroupStatus = ENABLED').
           withCondition('Status = ENABLED').
           withCondition(conditionSelectors[0]+condition[1]).
           withCondition(conditionSelectors[1]+condition[2]).
           withCondition(conditionSelectors[2]+condition[3]).
           forDateRange('LAST_7_DAYS').
           get();
          break;  
        case 4:
           var keywords = AdWordsApp.keywords().
           withCondition('CampaignStatus = ENABLED').
           withCondition('AdGroupStatus = ENABLED').
           withCondition('Status = ENABLED').
           withCondition(conditionSelectors[0]+condition[1]).
           withCondition(conditionSelectors[1]+condition[2]).
           withCondition(conditionSelectors[2]+condition[3]).
           withCondition(conditionSelectors[3]+condition[4]).
           forDateRange('LAST_7_DAYS').
           get();
          break;  
      }   
      AdWordsApp.createLabel(condition[condition.length-1]);
      saveCurrentLabels(condition[condition.length-1])
      while (keywords.hasNext()) {
        var keyword = keywords.next();
        keyword.applyLabel(condition[condition.length-1]);
        Logger.log('   Added '+condition[condition.length-1]+
                   ' label to keyword:['+
                   keyword.getText()+']');
      }  
      
    } //Conditions iterations
  
  MailApp.sendEmail({
    to: 'tuemail@tuempresa.com',
    subject: "[CLIENTE] Script Adwords: Etiquetas actualizadas",
    htmlBody: "Las etiquetas que identifican las palabras clave con mal rendimiento se acaban de actualizar. Recuerda que se toman datos de los ultimos 7 dias. Este correo te avisa para que puedas realizar las tareas de Teamwork de la semana. Tiempo para optimizar!" }); 
  
}

2. Haz una copia de este spreadsheet   (si no puedes acceder, pide acceso) .   En él vas a tener unos criterios predefinidos para etiquetar las palabras clave. Sin embargo, puedes modificarlos a tu gusto según las necesidades. En las pestaña “Conditions” puedes editarlas a tu gusto.  Por cada etiqueta podrás colocar hasta 4 condiciones para que se ejecute.

Por ejemplo,puedes establecer que si la posición media es 3 o menor (está entre los 3 primeros),  pero el CTR está por debajo del 3% el anuncio que se muestra no está siendo relevante. Eso filtrado para que solamenete se etiquete en las palabras clave con más de 10 impresiones.  ¿Qué te parece?

 

3. Cambia la URL del spreadsheet por la tuya en la en el código en cada una de las ocasiones en la que aparece .

 

4. Al final del código cambiar el  email  al que se notifican los cambios y el  cliente  para identificar de quién se trata.

5. Establecer como nombre del script “ Monitorización Rendimiento Palabras Clave ” o similar.

6. Programar semanalmente el día que vamos a trabajar en esa cuenta. Por ejemplo, los  lunes .

El resultado es algo como esto a nivel de palabra clave:

 

 

No olvides…

-Cada semana te llegará una notificación cuando el script se haya ejecutado para que estés pendiente y empieces a optimizar.

-Refrescar el navegador para ver las etiquetas a nivel de palabra clave  cuando lo ejecutes.

-Poner un periodo de los últimos 7 días en el interfaz para que coincida con los datos que ha tomado el script para que los datos coincidan.

-En ocasiones puede fallar y por autorización. Vuelve a autorizar el script en la consola.

 

Ahora es tu momento…

Con las condiciones y las etiquetas es momento para que empieces  con tu prueba y error hasta que calibres el script a tu gusto . En las pestañas FAQ e Instructions tienes más información sobre el funcionamiento del Spreadsheet. Seguro te ahorrará muchos dolores de cabeza. Este script está abierto a muchas mejoras, si alguien quiere aportar o comentar  sería genial para que lo mejoremos entre todos!

 

Academia BlueCaribu

Comparte el contenido

05 sep., 2023
Notificación de Google (septiembre 2023)
24 ago., 2023
El futuro empieza ahora...
11 ago., 2023
Novedad en Meta Ads (agosto 2023)
09 ago., 2023
Novedad en ubicaciones de Google Ads (julio 2023)
Ver más artículos
Share by: