1.1K anunciantes en línea
1.1K anunciantes en línea
Bienvenidos a la Comunidad Oficial de Google AdWords
favorite_border

Secuencias de comandos (scripts): Parte 3 - Multiplicando las palabras claves

Una de las prácticas más recomendadas dentro de AdWords es estar siempre atentos al informe de términos de búsqueda. En el mismo, podemos encontrar muchas sorpresas: desde nuevas palabras que activan nuestros anuncios y no nos conviene aparecer, para poder colocar como negativas, hasta nuevas palabras clave útiles para agregar a nuestra cuenta.

 

Sin embargo, resulta tedioso revisar todos los días los resultados del reporte, cuando a veces suelen ser miles los términos de búsqueda diferentes que han activado nuestros anuncios, lo cual puede generarnos muchísimo trabajo y no llegar a realizarlo, generando respuestas indeseables por algunos clientes exigentes...

 

 

Aquí veremos una manera simple de utilizar secuencias de comandos (scripts) para analizar automáticamente nuestros términos de búsqueda, agregar las palabras que sean necesarias (tanto positivas como negativas) y poder seguir simplificando nuestro trabajo.

 

Primer paso: entendiendo lo que hacemos

 

Lo mejor para empezar es tomarnos 10 minutos, tranquilos, para pensar qué trabajo estamos haciendo hoy en día y tener bien en claro entonces qué es lo que vamos a querer que los scripts hagan por nosotros. En ese sentido, podremos partir de un enunciado general. Trabajaremos con el siguiente como ejemplo "yo todos los meses (para dejar que se acumule suficiente información estadística) reviso los términos de búsqueda. Si un término generó una conversión, quizás estaría bueno probar agregarlo a mi cuenta. Por el contrario, si un término no convirtió, ponerlo como palabra negativa sería una buena idea".

 

Suena simple cuando tu cliente te lo explica así, ¿no?

 

cliente explicando todo

 

Paso 2: pensando qué podría salir mal

 

Claramente, suena muy simple porque justamente él no es quien lo va a realizar. Lo principal ahora es comenzar a pensar contraindicaciones y excepciones a la regla con respecto al enunciado: ¿es 100% correcto el planteo? ¿En qué caso no se cumpliría mi enunciado? Nosotros, a la hora de analizar algo, muchas veces realizamos más supuestos de los que nos damos cuenta y que ahora es importante que explicitemos lo mejor posible.

 

Por ejemplo: acabamos de decir que agregamos todos los términos de búsqueda que hayan tenido al menos una conversión. Ahora, si el costo promedio por conversión de la cuenta está en $2 y un término de búsqueda tuvo una conversión pero nos costó $200, ¿está bien agregarlo? Quizás para nosotros es obvio que no, pero al script necesitamos explicárselo.

 

Y con respecto a los términos negativos: si un término de búsqueda tuvo un solo click y ninguna conversión, ¿está bien suponer que este término es perjudicial para nuestra cuenta y ponerlo como negativo? Claro que no, pero esto tampoco lo sabe el script (a menos que "se lo expliquemos"). Si nuestra tasa de conversión promedio está, digamos, en 2% (1 conversión cada 50 clicks), para dar margen estadístico, podemos suponer que vamos a negativar una palabra clave cuando alcance al menos unos 100 clicks.

 

Hay más reglas que se nos pueden ocurrir. Para este ejemplo, trabajaremos con estas dos.

 

Paso 3: pasando a limpio


Resumamos lo que queremos hacer en nuestra cuenta:

 

- Revisar el reporte de términos de búsqueda del mes pasado el día 3 de cada mes.

 

- Buscar términos que hayan obtenido al menos una conversión y cuyo costo por conversión sea menor a $2 (con 100 clicks como mínimo)

 

- Agregar estos términos a sus respectivos grupos de anuncios con concordancia exacta.

 

Buscar también términos que no hayan obtenido ninguna conversiónmás de 100 clicks

 

Agregar estos términos como palabra clave negativa al grupo de anuncios que los activó.

 

¿Queremos algo más? Bueno, visto que pedir es gratis y no lo hacemos nosotros...

 

Enviar un e-mail a nuestra casilla avisando que se han realizado estos cambios.

 

Paso 4: explicándole todo esto a AdWords

 

 

Para la confección de la función, tomo de base este script de ejemplo realizado por Google Developers 

 

Si has llegado hasta aquí sin saber nada sobre secuencias de comandos, te recomiendo que te pases por mi artículo con el paso 1 sobre cómo crear scripts.

 

Comenzaremos creando una nueva secuencia de comandos. Lo primero que hay que hacer es definir las variables que utilizaremos como límites a la selección de términos de búsqueda. En este caso, serían la cantidad de conversiones (0 para las palabras clave negativas, mayor que 0 para las positivas), el costo por conversión (menor a $2) y la cantidad de clicks (mayor a 100). *Adicionalmente, si quieres ir probando variar regularmente estos límites, podrías pedirle a AdWords que tome los datos de una hoja de cálculo de Google Drive (ver este artículo mío).

 

// Cantidad mínima de clicks para considerar estadísticamente probado un término de búsqueda
var CLICKS_MINIMOS =100;
// Costo por conversión máximo que toleramos de un término de búsqueda (en moneda local de la cuenta)
var COSTO_POR_CONVERSION_MAXIMO = 2; // 2 pesos, 2 euros, 2 dólares, en lo que esté la cuenta...

 

Luego, realizaremos el pedido de reporte filtrado con estas variables y damos la orden de incluir en la lista de "PalabrasPositivas" y "PalabrasNegativas" a las que cumplan con nuestros criterios.

function main(){
  var report =AdWordsApp.report(
// en SELECT enumeramos el listado de datos sobre cada término de búsqueda que vamos a necesitar.
      "SELECT Query,Clicks,Cost,CostPerConversion,Conversions,CampaignId,AdGroupId "+
      " FROM SEARCH_QUERY_PERFORMANCE_REPORT "+
      " WHERE "+
          " Clicks >"+ CLICKS_MINIMOS +
          "AND CostPerConversion < "+ COSTO_POR_CONVERSION_MAXIMO +
" DURING LAST_MONTH"); // podemos poner el período que queramos var rows = report.rows(); // creamos las variables para las palabras negativas y positivas var PalabrasNegativas ={}; var PalabrasPositivas ={}; var allAdGroupIds ={} // Evaluamos cada uno de los términos de búsqueda para decidir // cuáles ignorar o agregar a nuestras listas. while(rows.hasNext()){ var row = rows.next(); // comenzamos evaluando si una palabra se agrega como negativa. if(parseFloat(row['Conversions'])= 0){ addToMultiMap(negativeKeywords, row['AdGroupId'], row['Query']); allAdGroupIds[row['AdGroupId']]=true;
// ahora, evaluamos si una palabra se agrega como positiva. }elseif(parseFloat(row['CostPerConversion'])< COST_PER_CONVERSION_THRESHOLD){ addToMultiMap(positiveKeywords, row['AdGroupId'], row['Query']); allAdGroupIds[row['AdGroupId']]=true; } }

 

La última parte del script por fin nos agrega a cada campaña las palabras positivas y negativas de las listas que acabamos de crear:

 

// Toma los nombres de los grupos de anuncios de nuestra campaña y los convierte en un "array", es decir, en una lista ordenada de valores (para ir agregando palabras clave a cada uno)
  var adGroupIdList = [];
  for (var adGroupId in allAdGroupIds) {
    adGroupIdList.push(adGroupId);
  }

// ¡Lo que todos estábamos esperando! Copiar a los grupos todas las palabras claves positivas y negativas:
  var adGroups = AdWordsApp.adGroups().withIds(adGroupIdList).get();
  while (adGroups.hasNext()) {
    var adGroup = adGroups.next();
    if (negativeKeywords[adGroup.getId()]) {
      for (var i = 0; i < negativeKeywords[adGroup.getId()].length; i++) {
// ¡Atención con la línea que viene! Agrega la palabra negativa con concordancia exacta. Más abajo, explicaremos cómo modificar esto. adGroup.createNegativeKeyword('[' + negativeKeywords[adGroup.getId()][i] + ']'); } } if (positiveKeywords[adGroup.getId()]) { for (var i = 0; i < positiveKeywords[adGroup.getId()].length; i++) {
// Aquí se agregan las palabras positivas. En este ejemplo, la palabra clave se agrega con concordancia exacta. Sin embargo, podemos no solamente agregar la palabra con otro tipo de concordancia (reemplazando los corchetes por comillas para concordancia de frase o borrándolos para tener concordancia amplia) sino que también podemos copiar esta línea y pegarla abajo modificada para agregar la misma palabra clave con varias concordancias distintas. adGroup.createKeyword('[' + positiveKeywords[adGroup.getId()][i] + ']'); } } } } function addToMultiMap(map, key, value) { if (!map[key]) { map[key] = []; } map[key].push(value); }

Luego de haber realizado estos pasos, ¡felicitaciones! Ya tienes tu script que automatiza la campaña en base a los términos de búsquedan.

 

Paso 5: revisando y estabilizando los resultados

 


Recuerda que la gracia de agregar nuevas palabras clave a tu cuenta es también realizar un seguimiento sobre las mismas. En ese sentido, resulta muy útil ahora que comiences a pensar nuevas reglas de automatización o secuencias de comando enfocadas a detectar automáticamente palabras clave que se encuentren rindiendo mal, ya que cada vez te será más complicado revisar una por una a mano a medida que tu cuenta vaya creciendo y creciendo. Un ejemplo de qué tipos de reglas se podrían combinar con este tipo de scripts para poder dar un control sobre muchas palabras claves lo di en un artículo sobre optimización masiva de cuentas en Analytics.

 

Espero que este nuevo tutorial les haya servido y sean bienvenidos de dejar aquí sus críticas, comentarios, dudas y propuestas. ¡Saludos!

Acerca de Alan Daitch

Fundador de la consultora Digodat Analytics y la agencia TictAds. Google Regional Trainer. Estamos certificados en toda la suite de Google Analytics: Optimize, Data Studio y Tag Manager. Contacto: alan@digodat.com Skype: alan.daitch

Comentarios
por Dany_del_Valle Colaborador Principal
junio 2013

Hola Alan

 

Al igual que el resto de la saga buenisimo!!

 

Pero yo automatizar que me añadan las palabras para campañas de la red de busqueda no me termina de cuadrar, aqui veo muy importante el toque humano, aveces nos tenemos que fijar en algo mas que los datos.

 

Pero si esto mismo nos lo llevamos a display,y lo usamos para excluir las ubicaciones que no van bien, seria la perfecccion, ya que muchas veces lanzamos campañas con presupuestos altos que en pocas horas nos generan muchisimas impresiones en ubicaciones que nos dan un pesimo rendimiento y nos estropean los niveles de calidad.

 

Un saludo

por AlanDaitch Colaborador Principal
junio 2013

Buenas! 3 cosas:

 

1- gracias por interesarte en el tema

 

2- si bien puse este script para seguir introduciendo al mundo de las secuencias de comandos, la idea es que el mismo se pueda mejorar para agregarle el toque humano. Personalmente, creo que el toque humano es lo mejor siempre y cuando se le pueda dar. A mí me pasa que con cuenta muy grandes ya resulta impensable revisar uno a uno los términos de búsqueda con conversiones, por eso utilizo este tipo de scripts y los estabilizo con otros que ameritarían más posts (que es un poco lo que introduzco en el paso 5). También hay variantes muy buenas de este script que se pueden hacer y mencionaré en artículos posteriores para poder combinar el "toque humano" con la automatización.

 

3- con respecto a las ubicaciones de display, creo que esa idea es muy buena. Actualmente, con las funciones que existen en el sistema es imposible hacer lo que propones, pero seguramente se podrá en el mediano plazo ya que cada pocos meses se están lanzando novedades.

 

Saludos!

por JorgeGeotelecom Colaborador Principal
abril 2014

Hola Alan:

 

Una de las cuentas que estamoas gestionando es muy grande y me he acordado de este fantástico post que publicaste. 

 

He modificado los parámetros tal y como comentabas pero al ejecutar la vista previa del scrip me da un error "Missing; Before statement (línea 4)"

 

¿Me puedes ayudar ? Muchísimas Gracias 

 

Te paso captura:

 

Script IB.JPG

por AlanDaitch Colaborador Principal
abril 2014

Hola, no veo la captura, será porque hay líneas de comentarios que no tienen la doble barra? // esta tiene que estar siempre, si ponés doble renglón para leerlos mejor hay que agregarlas

por JorgeGeotelecom Colaborador Principal
abril 2014

Te paso el script:

 

// Cantidad mínima de clicks para considerar estadísticamente probado un término de búsqueda
var CLICKS_MINIMOS =100;
// Costo por conversión máximo que toleramos de un término de búsqueda (en moneda local de la cuenta)
var COSTO_POR_CONVERSION_MAXIMO = 50 euros;
function main(){
  var report =AdWordsApp.report(
// en SELECT enumeramos el listado de datos sobre cada término de búsqueda que vamos a necesitar.
      "SELECT Query,Clicks,Cost,CostPerConversion,Conversions,CampaignId,AdGroupId "+
      " FROM SEARCH_QUERY_PERFORMANCE_REPORT "+
      " WHERE "+
          " Clicks >"+ CLICKS_MINIMOS +
          "AND CostPerConversion < "+ COSTO_POR_CONVERSION_MAXIMO +
      " DURING LAST_MONTH"); // podemos poner el período que queramos
  var rows = report.rows();
// creamos las variables para las palabras negativas y positivas
var PalabrasNegativas ={};
  var PalabrasPositivas ={};
  var allAdGroupIds ={}
  // Evaluamos cada uno de los términos de búsqueda para decidir
  // cuáles ignorar o agregar a nuestras listas.
  while(rows.hasNext()){
    var row = rows.next();
// comenzamos evaluando si una palabra se agrega como negativa.
    if(parseFloat(row['Conversions'])= 0){
      addToMultiMap(negativeKeywords, row['AdGroupId'], row['Query']);
      allAdGroupIds[row['AdGroupId']]=true;
// ahora, evaluamos si una palabra se agrega como positiva.
    }elseif(parseFloat(row['CostPerConversion'])< COST_PER_CONVERSION_THRESHOLD){
      addToMultiMap(positiveKeywords, row['AdGroupId'], row['Query']);
      allAdGroupIds[row['AdGroupId']]=true;
    }
  }
// Toma los nombres de los grupos de anuncios de nuestra campaña y los convierte en un "array", es decir, en una lista ordenada de valores (para ir agregando palabras clave a cada uno)
  var adGroupIdList = [];
  for (var adGroupId in allAdGroupIds) {
    adGroupIdList.push(adGroupId);
  }
 
// ¡Lo que todos estábamos esperando! Copiar a los grupos todas las palabras claves positivas y negativas:
  var adGroups = AdWordsApp.adGroups().withIds(adGroupIdList).get();
  while (adGroups.hasNext()) {
    var adGroup = adGroups.next();
    if (negativeKeywords[adGroup.getId()]) {
      for (var i = 0; i < negativeKeywords[adGroup.getId()].length; i++) {
// ¡Atención con la línea que viene! Agrega la palabra negativa con concordancia exacta. Más abajo, explicaremos cómo modificar esto.        adGroup.createNegativeKeyword('[' + negativeKeywords[adGroup.getId()][i] + ']');
      }
    }
    if (positiveKeywords[adGroup.getId()]) {
      for (var i = 0; i < positiveKeywords[adGroup.getId()].length; i++) {
// Aquí se agregan las palabras positivas. En este ejemplo, la palabra clave se agrega con concordancia exacta. Sin embargo, podemos no solamente agregar la palabra con otro tipo de concordancia (reemplazando los corchetes por comillas para concordancia de frase o borrándolos para tener concordancia amplia) sino que también podemos copiar esta línea y pegarla abajo modificada para agregar la misma palabra clave con varias concordancias distintas.
        adGroup.createKeyword('[' + positiveKeywords[adGroup.getId()][i] + ']');
      }
    }
  }
}
 
function addToMultiMap(map, key, value) {
  if (!map[key]) {
    map[key] = [];
  }
  map[key].push(value);
}

 

 

por Colaborador Principal Alumni AnaEmma Colaborador Principal Alumni
mayo 2014

Hola Alan

 

Tengo una preguntita, el término de búsqueda se agregar en el grupo de anuncio que lo generó? por ejemplo, tengo dos grupos de anuncios

 

  • hoteles en cancun
  • hotel city express cancun

y en el grupo de anuncios de hoteles en cancún y el search term fue "hotel city express en cancun" al correr el script esta keyword se agregará en hoteles en cancun o en hotel city express cancun?

 

Gracias

 

por AlanDaitch Colaborador Principal
mayo 2014

Hola @JorgeGeo, el error está en esta línea:

 

var COSTO_POR_CONVERSION_MAXIMO = 50 euros;

 

 no se pone la moneda, adwords toma la moneda en la que está configurada la cuenta. Correctamente, te quedaría así:
 
var COSTO_POR_CONVERSION_MAXIMO = 50;

 

 @AnaEmma como está armado el script, el término de búsqueda se agrega en el grupo de anuncios que lo generó.
 
Saludos!
por DanielJurado Colaborador Principal
mayo 2014

Alan Genial!

 

Y las fotos, vaya recuerdos que me traen Emoticono muy feliz

por JorgeGeotelecom Colaborador Principal
mayo 2014

Muchas gracias Alan.

 

Eres un crack !!

por JorgeGeotelecom Colaborador Principal
mayo 2014

Hola Alan:

 

He probado el script haciendo unicamente las modificaciones de las variables que indicabas. Concretamente "clics míninos: 100" y "costo por conversión máximo= 50" pero al montar el script y probarlo me da un error que te reproduzco en la siguiente captura:

 

script error.png

 

Tú que eres el experto.... ¿Me puedes echar una mano para ver qué hago mal?

 

Muchísimas gracias. 

por AlanDaitch Colaborador Principal
mayo 2014

A ver...prueba reemplazar COST_PER_CONVERSION_THRESHOLD por COSTO_POR_CONVERSION_MAXIMO 

por JorgeGeotelecom Colaborador Principal
mayo 2014

Hola Alan:

 

Me sigue dando el mismo error. 

 

Espero tus instrucciones Hombre guiño

por Aitor U
julio 2016

Hola Alan, buenas tardes desde españa, tengo una gran duda.

Mi empresa quier realizar un script donde obtener el nombre, telefono y email del usuario que ha rellenador el formulario, la palabra clave que ha introducico o por las cuales a saltado el anuncio, la fecha ciudad, estado y pasi del usuario y si ha convertido o no, es decir si ha rellenado el usuario.

 

Para ello he estado mirando el tema del gclid de adwords, con ello he podido obtener tanto el gclid, fecha,palabra clave,ciudad,estado y pais, pero lo que no he podido es saber si ha convertido o no y no se que paso tomar ahora.

 

Saludos y espero que puedas ayudarme.

 

Gracias

por JONATHAN D
julio 2016

quisiera saber como puedo delimitar por palabras en vez de por caracteres en un formulario

por JONATHAN D
julio 2016

o que expresion regular puedo usar para limitar por palabras un respuesta de un campo de un formulario de google gracias de antemano