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

Secuencias de comandos (scripts): Parte 6 - Palabras negativas cruzadas...Automáticamente!

Uno de los consejos que se ha vuelta habitual en esta Comunidad es el de la utilización de una técnica llamada "palabras clave negativas cruzadas", que sirven para mantener el control de qué anuncio se muestra ante cada búsqueda del usuario, debido a que a veces tenemos grupos de anuncios con términos muy parecidos y AdWords puede comenzar a mostrarle al usuario el anuncio equivocado. Más información al respecto en este artículo que ha escrito enriquedelvalle.

 

 

Ahora, ¿qué sucede si descubrimos esta técnica, nos damos cuenta de que es buenísima y la queremos aplicar a toda nuestra cuenta con decenas de grupos de anuncios? Habría que entrar a cada grupo de anuncios, extraer todas las palabras clave, copiarlas y pegarlas en cada uno de los otros grupos de anuncios. Por ejemplo, si tenemos una campaña de 20 grupos de anuncios, habría que hacer esto:

 

- Ingresar al grupo de anuncios 1

- Copiar todas las palabras clave como negativas en los grupos 2,3,4,5,6,7,8,9...hasta el 20.

- Ingresar al grupo de anuncios 2

 

Y así sucesivamente...

 

¿Suena un poco repetitivo? Por suerte sí, y gracias a eso es que ¡podemos realizar un código que haga todo esto por nosotros y en poco tiempo!

 

Paso 1: Ingresar a Google AdWords y crear una nueva secuencia de comandos.

 

Para crear un script, debes ingresar a tu cuenta de AdWords, hacer click en "Operaciones masivas" (en la columna izquierda), ir a "Secuencias de comandos" y presionar el botón verde: Crear secuencia de comandos.

 

En cualquier momento, haciendo click en "vista previa" podremos observar qué cambios le realizaría el script a nuestra cuenta antes de ejecutarlo por primera vez. Es fundamental SIEMPRE ver la vista previa de lo que el script hará, porque no hay manera de deshacer esos cambios una vez ejecutados.

 

Para poder usar el script, primero debemos hacer click en "Autorizar ahora" para autorizar el script a tener acceso a nuestra cuenta:

 

 

 

Paso 2: copiar este código:

 

 

// Van los créditos Guiño
// Nombre: Generador de Palabras Negativas Cruzadas
// Creador: AlanDaitch
// Sitio web: TictAds.com
// Exclusivo para la Comunidad de AdWords en Español

function main() {
// le pedimos a AdWords que nos dé la lista de todos nuestros grupos de anuncios

var adGroupIterator = AdWordsApp.adGroups().get(); while (adGroupIterator.hasNext()){

// Comenzamos a iterar uno a uno por los grupos de anuncios

var adGroup = adGroupIterator.next();

// le pedimos a AdWords todas las palabras clave del grupo de anuncios en el que se encuentra

var keywordIterator = adGroup.keywords().get(); while (keywordIterator.hasNext()) { var keyword2 = keywordIterator.next();

// por cada palabra clave, le pedimos a AdWords que recorra todos los grupos de anuncios excepto el de la palabra clave

var adGroupIterator2 = AdWordsApp.adGroups() .withCondition("Name != '" + adGroup.getName() + "'") .withCondition("CampaignName != '"+ adGroup.getCampaign().getName()+"'") .get(); while (adGroupIterator2.hasNext()) { var adGroup2 = adGroupIterator2.next();

// primero, revisamos si este grupo de anuncios contiene la palabra clave

var KeywordChecker = AdWordsApp.keywords() .withCondition("AdGroupName = '"+adGroup2.getName()+"'") .withCondition("CampaignName = '"+adGroup2.getCampaign().getName()+"'") .withCondition("Text = '"+ keyword2.getText()+"'") .get();

// si no contiene la palabra clave, se agrega como negativa

if (!(KeywordChecker.hasNext())) { adGroup2.createNegativeKeyword(keyword2.getText());

// automáticamente, el script irá rotando grupo por grupo y palabra por palabra realizando la misma tarea

}}}}}

 

Notas al pie: tengamos en cuenta que cada grupo de anuncios tiene un límite de 20.000 elementos de orientación distintos por grupo de anuncios (por ejemplo palabras clave, ubicaciones, listas de público y orientaciones de producto), lo cual corre el riesgo de ser superado si trabajamos con cuentas muy grandes. En ese caso, se puede readaptar este script para que cada grupo de anuncios tenga como palabras negativas cruzadas las de los grupos de anuncios de su misma campaña, agregando una sola línea de código acá:

 

var adGroupIterator2 = AdWordsApp.adGroups()
     .withCondition("Name != '" + adGroup.getName() + "'")
     .get();

Reemplazando por:

 

 

  var adGroupIterator2 = AdWordsApp.adGroups()
     .withCondition("Name != '" + adGroup.getName() + "'")
.withCondition ("CampaignName = '" + adGroup.getCampaign().getName() .get();

 

 

Otra excepción que se debería tener en cuenta es si tenemos grupos de anuncios orientados específicamente para Display. En ese caso, estos grupos deberían ser excluidos del iterador de grupos de anuncios. Esto se puede realizar etiquetando nuestros grupos de anuncios de display y agregando una condición de que los grupos de anuncios iterados no contengan esa etiqueta.

 

Esto se haría reemplazando:

 

  var adGroupIterator2 = AdWordsApp.adGroups()
     .withCondition("Name != '" + adGroup.getName() + "'")
     .get();

 

por:

 

  var adGroupIterator2 = AdWordsApp.adGroups()
     .withCondition("Name != '" + adGroup.getName() + "'")
.withCondition("LabelNames CONTAINS_ANY ['Display']") .get();

Suponiendo que la etiqueta creada por nosotros se llame "Display". ¡Que lo disfruten!

Acerca de Alan Daitch

Fundador de la consultora Digodat Analytics, con presencia local en Argentina, México y Portugal. Google Regional Trainer. Estamos certificados en toda la suite de Google Analytics 360: Optimize, Data Studio y Tag Manager. Contacto: alan@digodat.com

Comentarios
por JorgeGeotelecom Colaborador Principal
agosto 2013

Gracias por la aportación Alan.

 

Desde luego eres el rey de los scripts en la Comunidad. 

 

Un fuerte abrazo,

por enriquedelvalle Colaborador Principal
agosto 2013

Hola Alan

 

Muy bueno como siempre tus artículos sobre scripts , aunque he de reconocer que no me apasiona automatizar cosas , me gusta tener el control y tomar las decisiones porque en ocasiones hay que hacer excepciones que hacen que te tengas que saltar las reglas.

 

En este caso de las palabras negativas cruzadas entiendo que lo que hace el script es añadir como palabras negativas las palabras clave de otros grupos pero esto no sería lo ideal, te planteo algunos ejemplos:

 

- B1 Examen (Grupo de anuncio)

 

+b1 +examen

[examen b1 ingles]

[examenes b1 ingles]

[examen b1 ingles online]

 

-intensivo

 

A este trupo yo le añadiria la palabra negativa: -intensivo , pensando en otro grupo de anuncios llamado: B1 Intensivo que tienes mas abajo.

 

Porque si alguien buscara por el término: "examen b1 intensivo" , prefiero que salga un anuncio del grupo B1 intensivo. Entiendo que con el script esto no se consigue porque lo que hace es añadir como negativas en B1 Intensivo las palabras clave:

 

b1 examen

examen b1 ingles

examenes b1 ingles

examen b1 ingles online

 

- B1 Intensivo (Grupo de anuncio)

 

+b1 +intensivo

[ingles intensivo b1

[b1 intensivo]

 

Es decir que para mi la forma mejor de añadir palabras negativas cruzadas es la siguiente:

 

Imaginemos 3 grupos con la estructura de palabras clave:

 

Grupo1: palabra1 palabra2 palabra3

Grupo2: palabra1 palabra2 palabra4

Grupo3: palabra1 palabra2 palabra5

 

Yo lo que hago es

 

Grupo1: palabra1 palabra2 palabra3

Negativas:

palabra4

palabra5

 

Grupo2: palabra1 palabra2 palabra4

Negativas:

palabra3

palabra5

 

Grupo3: palabra1 palabra2 palabra5

Negativas:

palabra3

palabra4

 

Para mi un grupo de anuncio esta formado por palabras matrices , y dentro del grupo hay variaciones de esas palabras matrices , pero algunos grupos muy parecidos a otros lo único que cambia es que un elemento de la matriz es diferente , es decir una unica palabra. Esa palabra sería lo que deberiamos de utilizar como negativa cruzada y no todas las palabras de los grupos porque de hacerlo así realmente no estas utilizando la técnica correctamente o por lo menos como yo lo haría manualmente.

 

Lo malo que tiene este sistema es que es pesado y tienes que pensar en cada grupo por separado como quieres gestionarlo para ver si prefieres que se ejecute un grupo de anuncios u otro.

 

 

por AlanDaitch Colaborador Principal
agosto 2013 - última edición agosto 2013

Enrique: buenísimo tu aporte, mi idea con los scripts no es dar recetas cerradas sino sobre todo obtener un feedback sobre cómo mejorarlo.

 

Según tu esquema, entiendo 3 cosas:

 

1) Que SIEMPRE hay que revisar los cambios que uno haya automatizado en la cuenta, no solamente porque puede estar mal programado algo del script sino también porque siempre es probable que haya excepciones. Entiendo también que revisar los cambios genera menos trabajo que hacerlos a mano.

 

2) Según lo que tú planteas, de que haya palabras matrices repetidas en diferentes grupos de anuncios que no se deban negativar, puedo agregarle un par de líneas de código al script para que funcione de manera de, antes de colocar una palabra clave como negativa, primero revisar si esa palabra está como positiva en el grupo de anuncios. ¿Con ese cambio te parece que este script sería útil, teniendo en cuenta el punto (1) de que de todas maneras habría que revisar los cambios para asegurarse?

 

3) Otra opción es generar 2 scripts: uno que genere un googledoc que muestre los cambios que quiere hacer en la cuenta, y otro que tome el googledoc ya revisado y modificado y lo aplique.

 

Saludos!

por enriquedelvalle Colaborador Principal
agosto 2013

Punto 1 de acuerdo

 

Punto 2 puede que también Emoticono feliz pero vamos que yo la forma como tengo de utilizar las palabras negativas cruzadas es añadir solo palabras sueltas las partes únicas de otros grupos pero solo la parte de la matriz diferente no añadir todos los terminos de palabras clave de otros grupos. No se si me explico.

 

De esta forma para la forma que yo tengo de trabajar esta estrategia de palabras negativas cruzadas estaría pienso que perfecto.

 

Pero claro habrá que pensar que este script esta diseñado para ser utilizado siempre y cuando utilices una estrategia de grupos de anuncios creados de la forma descrita , sino pierde el sentido.

 

Muy bien alan por tus aportes Emoticono feliz

por AgusMontes1
septiembre 2013

Hola Alan, como estas?

 

Intente aplicar tu scrip, pero me tira un error:

 

Que puedo  hacer?

Gracias!

 

 

 

ReferenceError: "adGroupIterator" is not defined. (line 9)
por MarcusRB
septiembre 2013

Buen aporte, 

a pensar que hasta la fecha pensaba que las formulas de Excel eran las únicas maneras (el problema era la importación o copia/pega )....

 

muchas gracias!

por ooscarabad Colaborador Principal
octubre 2013

Hola Alan

 

a mi tambien me da un error al aplicarlo

 

ReferenceError: "adGroupIterator" is not defined. (line 9)
por AlanDaitch Colaborador Principal
octubre 2013

listo! Corregido lo que menciona enrique. Ahora, el script revisa si la palabra clave está en el grupo de anuncios antes de agregarla como negativa. Corregido también lo que menciona Oscar, Marco y Agus, ya no debería tirar ningún error.

 

Saludos!

por ooscarabad Colaborador Principal
octubre 2013

Hola Alan

He intentado probar el script a ver que tal funcionaba y no he podido porque me pilla por defecto grupos de anuncios que tengo detenidos o eliminados de hace tiempo,

 

Aparte de esto, ¿Se puede hacer el script  eligiendo la campaña o eligiendo los grupos de anuncio que te interesen?

 

Muchas gracias, un saludo

por AlanDaitch Colaborador Principal
diciembre 2013

Oscar: cómo estás? Sí se puede lo que estás pidiendo.

 

Debes reemplazar las primeras líneas:

 

var adGroupIterator = AdWordsApp.adGroups().get();

 

 

Agregando .withCondition :

 

 

var adGroupIterator = AdWordsApp.adGroups().
.withCondition("Status = ENABLED")
.get();

 En el ejemplo lo hice con Status, para grupos de anuncios activos, pero también puedes usar los parámetros "Name" y "CampaignName" para ser más específico.

 

Saludos!

 

 

 

por Lucas S
febrero 2014

Que excelente aporte Alan! Es increíble la cantidad de trabajo que podemos ahorrarnos con los scripts... Actualmente el script funciona correctamente para aplicar la técnica de las palabras negativas cruzadas? Agregaste todas las recomendaciones que se hicieron en los comentarios? Gracias por el aporte.

por AlanDaitch Colaborador Principal
febrero 2014

Hola Lucas, efectivamente está corregido lo que se planteó. Ante cualquier duda, utilizá el botón "vista previa" para ver cómo impactaría en tu cuenta. Saludos!

por Lucas S
marzo 2014

Hola Alan, recién hoy intenté implementarlo. Hay alguna "contraindicación" para este script? Porque tengo dos grupos de anuncios activos y no agrega las negativas cruzadas a ninguno de los dos. El script dice que "Completed" No changes or logs. Gracias!

por Fer_Constantino
marzo 2014

Muchas gracias Alan. Fantástico aporte.

 

Respecto a las contraindicaciones que preguntaba Lucas, os pongo aquí una posible limitación que creo que no se ha comentado y que convendría tener en cuenta a la hora de gestionar keywords negativas cruzadas.

 

Nos encontramos con dos adgroups que contienen keywords de este tipo:

 

ADGROUP 1

   +hotel +cerca +sagrada +familia

 

ADGROUP 2

   +hotel +cerca +sagrada +familia + con +piscina

 

 

Como sabemos, adwords no gestiona tan bien el longtail como nos gustaría, y keywords como 'hotel cerca de la sagrada familia con piscina' no se van a incluir en subasta por 'no tener suficiente tráfico' (o más bien por no tener google capacidad de hacer subastas para cientos de miles de millones de términos).

 

La consecuencia de negativizar 'piscina' en el adgroup que contiene '+hotel +cerca +sagrada +familia' podría acabar siendo la de perder definitivamente al usuario que había hecho la búsqueda super longtail.

 

Así que en línea con lo comentado de hacer un control cualitativo del script que propones, habría que vigiliar que no acabemos por perder tráfico cualificado. 

 

Gracias de nuevo y un saludo,

 

Fernando Constantino

CleverPPC

por AlanDaitch Colaborador Principal
marzo 2014

Constantino: cómo estás? Podrías explicar un poco más cómo funcionaría esto? Entiendo que la búsqueda long-tail del usuario iría a parar al grupo que tiene la keyword long-tail y no a los otros grupos de anuncios, por lo tanto no se perdería.

 

 

Lucas: cómo va? A mí me funciona perfectamente, no sé qué puede ser. Podrías probar testearlo en una cuenta chica de prueba que tengas, a ver si el problema está en el código o en tu estructura específica de campaña? Saludos!

por Fer_Constantino
marzo 2014

Hola Alan,

 

Me refiero a la problemática de las keywords super-long-tail, que google las etiqueta como de "bajo volumen" y no entran en subastas.

 

Volviendo al ejemplo anterior:

 

ADGROUP 1

   +hotel +cerca +sagrada +familia                         (long-tail)

 

ADGROUP 2

   +hotel +cerca +sagrada +familia + con +piscina  (super-long-tail)

 

Si un usuario busca en google "hotel cerca de sagrada familia con piscina" y hemos negativizado 'piscina' en el Adgroup1 siguiendo el script:

 

     la keyword long tail no saltará ya que piscina está negativizada en frase.

     la keyword super-long-tail no entrará en subasta por tener "volumen bajo de búsquedas".

 

Así que el resultado final es que el anunciante perderá al usuario.

 

Creo que no es algo teórico sino algo bastante real, que pasaría cierta frecuencia si hace una política de negativas cruzadas automática, tal y como está ahora mismo.

 

Un saludo!

 

Fernando Constantino

CleverPPC

 

 

por AntonioLopezSEM Usuario Destacado
marzo 2014

Muy buenas F_Constantino. 

 

Yo veo que el problema está en la propiua definicion de palabras clave. Si has definido una palabra que está con búsquedas bajas tal vez deberías revisar tus Keywords antes de aplicar dicho script. Yo estoy empezando a echarle un vistazo a la realización de Script y aun no lo se, pero seguramente tambien se puedan implementar comprobaciones que subsanen tu duda. 

 

Que Alan te comente.

 

Saludos.

por AlanDaitch Colaborador Principal
marzo 2014

Buenísimo, ya entendí la duda. Lo que podrías hacer para evitar eso sería agregar todas las palabras clave negativas con concordancia exacta, así no te afectan a las de long tail. Tendrías que reemplazar esta línea:

 

adGroup2.createNegativeKeyword(keyword2.getText());

 

Por:

 

// Revisamos si la palabra clave a negativar está en concordancia exacta. Si no está en concordancia
// exacta, le agregamos los corchetes para que lo esté

if (keyword2.getText.charAt(0)="[") {var exactKeyword = keyword2.getText;
} else { var exactKeyword = "["+keyword2.getText+"]" }

adGroup2.createNegativeKeyword(exactKeyword);