¡Seguro estás perdiendo dinero con Google Ads!
El presupuesto que no se optimiza, es dinero que tiramos a la basura. Si esto te suena familiar, seguramente estás buscando optimizar tus gastos en Google Adwords. La optimización de campañas es ideal para mejorar los resultados de conversión o darle mejor rendimiento a presupuestos pequeños o limitados. A lo largo de mi carrera como anunciante digital, he aprendido de 5 errores frecuentes al gestionar o planear campañas de publicidad digital.
1. Entiende el mercado antes de anunciar
Antes de crear una campaña en esta fabulosa herramienta, te aconsejo que hagas una investigación profunda sobre tu mercado. Un tip útil es contestar estas preguntas:
- ¿Qué tipo de comportamientos o intereses tienen tus posibles clientes (o prospectos) que conecten con tu servicio o producto? Ejemplo: son viajeros, son amantes a la tecnología, les gusta el conocimiento.
- ¿Qué tipo de búsquedas pueden llegar hacer? Este es el momento para identificar palabras claves o keywords, google trends y keyword planner son las herramientas que te pueden ayudar a identificarlas.
- Y por supuesto ¿como está apareciendo tu competencia en motores de búsqueda? esto es fundamental y te ayudará a identificar las búsquedas más competidas del mercado.
Entender el mercado antes de anunciar te ayudará a planear una campaña exitosa y fácil de optimizar, evitando desperdiciar el dinero en un universo que tal vez no nos interesa conquistar.
2. Fija objetivos de campaña
¡Es hora de fijar objetivos de campaña! No fijar objetivos por fase o etapa de campaña, es un error muy frecuente. Dividir nuestros esfuerzos a partir de un embudo o funnel de conversión nos ayuda a entender el comportamiento de nuestro mercado. Así, ejecutar nuestro plan será más fácil pues nos ayuda a estructurar campañas desde un objetivo estratégico desde la configuración. Esto te ayudará a ejecutar presupuestos en objetivos medibles.
Estos son los objetivos que existen:
Así puedes usar estos objetivos y los tipos de campañas:
3. Baja el CPC estructurando estratégicamente tus campañas:
La falta de estructura en una campaña no sólo es el error más grave, si no el más costoso. Estructurar significa segmentar y/o agrupar correctamente las palabras claves partiendo de campañas y grupos de anuncios. Para explicarlo mejor, mostaré un ejemplo de una campaña de búsqueda:
Una correcta estructura de campañas, es dividir tus palabras de marca, otras para intereses y otras para la categoría. Cuando tenemos una sola campaña sin estas clasificaciones, el resultado es un CPC más caro y perderás ranking por calidad. Este es un ejemplo de cómo estructurar tu campaña basados en un funnel o embudo de conversión:

4. Usa palabras negativas:

Las palabras negativas son aquellas en las que NO nos interesa aparecer. Puedes fijarlas desde el inicio de la campaña, categorizarlas y armar una lista en tu biblioteca compartida (o shared library), así será cada vez más fácil implementar una campaña. Aplica esta táctica para emplazamientos (o placement), vídeos y sitios en los que no quieras que tu sitio web se publique. Hacerlo correctamente te ayudará ahorrar mucho dinero en tu presupuesto.

5. Controla tu presupuesto diario:

Este ha sido un dolor de cabeza para mi y muchos colegas, sobre todo si estamos trabajando en agencias o para clientes que controlan fuertemente el presupuesto de campañas independientes. Mi consejo es controlar el consumo diario para no llevarte sorpresas, pues el algoritmo de Google aumenta el presupuesto automáticamente diario si tus anuncios se están mostrando con mayor frecuencia, es decir si fijamos un presupuesto diario de $100 USD, un día se gastarán $200 USD y quizás no te des cuenta.
Te recomiendo implementar el siguiente Script que te enviará alertas si estás a punto de superar tu presupuesto diario:
// Copyright 2018, Fox Project All Rights Reserved.
//
/**
* @nombre Alerta de Presupuestos
*
* @detalles: Este script envía un resumen en tabla de las campañas que consumieron un porcentaje diario del presupuesto definido por el usuario. Dicha tabla contiene los campos, Impressions,Clicks,Conversions,CPC,CPA
*
* @distribucion: Fox Project Team
* @version 1.0
* Use under your own responsability none of the authors are responsible for any misuse of this script
*/
var thresholdPercentage = 0.90 // Esta es la fracción del presupuesto diario gastado por campaña la cual se enviará por mail las siguientes estadisticas:
var toEmail = 'tuemail@dominio.com'; // Todos los mails serán enviados a esta dirección en caso de ser mas de uno escribirlos separado por comas (Ej:"mail1@domain.com,mail2@domain.com")
var clientName = 'Nombre de la cuenta'; // Nombre del cliente
function getTodaysSpend(campaign)
{
var stats = campaign.getStatsFor('TODAY');
return stats.getCost();
}
function getTodaysStats(campaign)
{
var stats = campaign.getStatsFor('TODAY');
return stats;
}
function main()
{
var account = AdWordsApp.currentAccount();
var subject = 'Campañas en la cuenta '+account.getCustomerId()+' ('+clientName+') que han consumido al menos ' + (thresholdPercentage * 100).toFixed(0) + '% de su presupuesto diario'; // Asunto del mail
var outMatrix = [];
var externalCID = account.getCustomerId();
var campaignIterator = AdWordsApp.campaigns().get();
var shoppingCampaignIterator = AdWordsApp.shoppingCampaigns().get();
while (shoppingCampaignIterator.hasNext())
{
var campaign = shoppingCampaignIterator.next();
var currBudget = campaign.getBudget().getAmount();
var campaignName = campaign.getName();
var todaysStats = getTodaysStats(campaign);
var todaysSpend = todaysStats.getCost();
var todaysImpressions = todaysStats.getImpressions();
var todaysClicks = todaysStats.getClicks();
var todaysConversions = todaysStats.getConversions();
var todaysCPA = (todaysConversions != 0) ? (todaysSpend / todaysConversions).toFixed(2) : 'N/A';
var todaysCPC = (todaysClicks != 0 ) ? (todaysSpend / todaysClicks).toFixed(2) : 'N/A';
var exhaustedPercentage = ((todaysSpend / currBudget)*100).toFixed(1) + '%';
var thresholdSpend = thresholdPercentage * currBudget;
if ( todaysSpend >= thresholdSpend )
{
outMatrix.push([ externalCID, campaignName, currBudget, todaysSpend, exhaustedPercentage, todaysImpressions, todaysClicks, todaysConversions, todaysCPC, todaysCPA ]);
}
}
Logger.log(outMatrix);
while (campaignIterator.hasNext())
{
var campaign = campaignIterator.next();
var currBudget = campaign.getBudget().getAmount();
var campaignName = campaign.getName();
var todaysStats = getTodaysStats(campaign);
var todaysSpend = todaysStats.getCost();
var todaysImpressions = todaysStats.getImpressions();
var todaysClicks = todaysStats.getClicks();
var todaysConversions = todaysStats.getConversions();
var todaysCPA = (todaysConversions != 0) ? (todaysSpend / todaysConversions).toFixed(2) : 'N/A';
var todaysCPC = (todaysClicks != 0 ) ? (todaysSpend / todaysClicks).toFixed(2) : 'N/A';
var exhaustedPercentage = (todaysSpend / currBudget * 100).toFixed(1) + '%';
var thresholdSpend = thresholdPercentage * currBudget;
if ( todaysSpend >= thresholdSpend )
{
outMatrix.push([ externalCID, campaignName, currBudget, todaysSpend, exhaustedPercentage, todaysImpressions, todaysClicks, todaysConversions, todaysCPC, todaysCPA ]);
}
}
Logger.log(outMatrix);
var csvOutput = matrixToCSV(outMatrix);
var blobOutput = Utilities.newBlob(csvOutput);
blobOutput.setName('campaign_stats.csv');
var html = [];
html.push(
'<html>',
'<body>',
'<table width=1000 cellpadding=0 border=0 cellspacing=0>',
"<tr bgcolor='#3c78d8'>",
'<td width=500>',
"<div style='font: normal 18pt verdana, sans-serif; " +
"padding: 3px 10px; color: white'>Campañas cerca de agotar presupuesto</div>",
'</td>',
'<td align=right>',
"<div style='font: normal 18pt verdana, sans-serif; " +
"padding: 3px 10px; color: white'>",
AdWordsApp.currentAccount().getCustomerId(), '</h1>',
'</td>',
'</tr>',
'</table>',
'<table width=1000 cellpadding=0 border=1 border-color: gray cellspacing=2px>',
"<tr bgcolor='#ddd'>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5px 5px; background-color: #ddd; ' +
"text-align: center'>Cuenta</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5px 5px; background-color: #ddd; ' +
"text-align: center'>Campaña</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>Presupuesto diario</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>Consumido</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>Agotado(%)</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>Impressions</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>Clicks</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>Conversions</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>CPC</td>",
"<td style='font: 10pt verdana, sans-serif; " +
'padding: 5px 0px 5x 5px; background-color: #ddd; ' +
"text-align: center'>CPA</td>",
'</tr>');
outMatrix.forEach(function(el) {
var i=0; html.push(emailRow(
el[i],el[i+1],el[i+2],el[i+3],el[i+4],el[i+5],el[i+6],el[i+7],el[i+8],el[i+9]));
});
html.push('</table>', '</body>', '</html>')
function emailRow(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10) {
var html = [];
html.push('<tr>',
"<td style='padding: 5px 10px; text-align: center'>" + c1 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c2 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c3 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c4 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c5 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c6 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c7 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c8 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c9 + '</td>',
"<td style='padding: 0px 10px; text-align: center'>" + c10 +'</td>',
'</tr>');
return html.join('\n');
}
if (outMatrix.length > 1) {
MailApp.sendEmail(toEmail, subject,'', {
htmlBody: html.join('\n'),
name: 'Stats Emailer',
attachments: [blobOutput.getAs(MimeType.CSV)]
});
}
}
function matrixToCSV(matrix)
{
csv = new csvWriter(',', '"');
csvOutput = csv.arrayToCSV(matrix)
return csvOutput;
}
function csvWriter(del, enc)
{
this.del = del || ','; // CSV Delimiter
this.enc = enc || '"'; // CSV Enclosure
// Convertir objeto en columna CSV
this.escapeCol = function (col) {
if(isNaN(col)) {
// No es booleano or numerico
if (!col) {
// is null or undefined
col = '';
} else {
// is string or object
col = String(col);
if (col.length > 0) {
// use regex to test for del, enc, \r or \n
// if(new RegExp( '[' + this.del + this.enc + '\r\n]' ).test(col)) {
// escape inline enclosure
col = col.split( this.enc ).join( this.enc + this.enc );
// wrap with enclosure
col = this.enc + col + this.enc;
}
}
}
return col;
};
// Convierta una matriz de columnas en una fila CSV escapada
this.arrayToRow = function (arr) {
var arr2 = arr.slice(0);
var i, ii = arr2.length;
for(i = 0; i < ii; i++) {
arr2[i] = this.escapeCol(arr2[i]);
}
return arr2.join(this.del);
};
// Convierta una matriz bidimensional en un archivo CSV de múltiples filas escapado
this.arrayToCSV = function (arr) {
var arr2 = arr.slice(0);
var i, ii = arr2.length;
for(i = 0; i < ii; i++) {
arr2[i] = this.arrayToRow(arr2[i]);
}
return arr2.join("\r\n");
};
}
Aprender de los errores nos hace crecer. Pronto lanzaremos un nuevo y renovado curso de Google Adwords. ¿Qué errores han cometido al ejecutar tus campañas? Escríbeme tu respuesta en los comentarios y aprendamos de los errores. Sigue aprendiendo con los cursos de marketing de la escuela.
Soy Ivon López outbound specialist en Platzi sígueme en:
Curso de Google Analytics