Automação Google Adwords: Pausar e deletar

Automação Google Adwords: Pausar e deletar

rotadesk No Comments

Nessa série especial, reunimos alguns scripts úteis para você automatizar e aumentar o retorno de suas campanhas no Google Adwords. Confira abaixo como automatizar o Google Adwords para “Modificação de Lances”.

 

1. Pausar Anúncios com CTR Baixo – Pelo Russell Savage. Esse script tem como função economizar o tempo de pausar seus anúncios que estão com CTR (Taxa de cliques) baixas e que diminuem seu índice de qualidade de suas palavras-chave.

 

//-----------------------------------
// Pause Ads with Low CTR
// Created By: Russ Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
// Let's start by getting all of the adGroups that are active
var ag_iter = AdWordsApp.adGroups()
.withCondition("Status = ENABLED")
.get();

// Then we will go through each one
while (ag_iter.hasNext()) {
var ag = ag_iter.next();
var ad_iter = ag.ads()
.withCondition("Status = ENABLED")
.forDateRange("ALL_TIME")
.orderBy("Ctr DESC")
.get();
var ad_array = new Array();
while(ad_iter.hasNext()) {
ad_array.push(ad_iter.next());
}
if(ad_array.length > 1) {
for(var i = 1; i < ad_array.length; i++) {
ad_array[i].pause(); //or .remove(); to delete them
}
}
}
}</code

 

 

2. Pausar Grupo de Anúncios Sem Palavras-chave – Pelo Russel Savage. Agências ou grandes contas de Adwords podem se beneficiar com esse script, uma vez que, ele pausa automaticamente campanhas que não possuem palavras-chave ativadas. Isso pode poupar o seu trabalho em campanhas que tem uma regra de pausar palavras-chaves que não estão trazendo resultado.

 

/*********************************************
* Pause AdGroups With No Active Keywords
* Version 1.1
* Changelog v1.1
* - Updated for speed and added comments
* Created By: Russ Savage
* FreeAdWordsScripts.com
**********************************************/
function main() {
// Let's start by getting all of the active AdGroups
var agIter = AdWordsApp.adGroups()
.withCondition('CampaignStatus = ENABLED')
.withCondition('Status = ENABLED')
.get();

// It is faster to store them and process them all at once later
var toPause = [];
// Then we will go through each one
while(agIter.hasNext()) {
var ag = agIter.next();
//get all the keywords that are enabled
var kwIter = ag.keywords()
.withCondition("Status = ENABLED")
.get();

//If .hasNext() is true, there is at least 1 kw in the AdGroup
var hasKw = kwIter.hasNext();
if(!hasKw) {
toPause.push(ag);
}
}

// Now we process them all at once to take advantage of batch processing
for(var i in toPause) {
toPause[i].pause();
}
}

 

3. Pausar Todas Palavras-chave Sem Impressões – Pelo Russell Savage. Esse script é uma boa opção para que deseja fazer uma “limpa” em suas palavras-chave que não estão ativando seus anúncios, mantendo somente palavras relevantes.

 

/*********************************************
* Pause Keywords With No Impressions All Time
* Version 1.1
* Changelog v1.1
* - Updated for speed and added comments
* Created By: Russ Savage
* FreeAdWordsScripts.com
**********************************************/
var TO_NOTIFY = "[email protected]";
function main() {
// Let's start by getting all of the keywords with no impressions
var kwIter = AdWordsApp.keywords()
.withCondition("Impressions = 0") // could be "Clicks = 0" also
.forDateRange("ALL_TIME") // could use a specific date range like "20130101","20131231"
.withCondition("Status = ENABLED")
.withCondition("CampaignStatus = ENABLED")
.withCondition("AdGroupStatus = ENABLED")
.get();

// It is much faster to store all the keywords you want to process
// and then make the changes all at once. This takes advantage
// of the batch processing behind the scenes.
var toPause = [];
while (kwIter.hasNext()) {
var kw = kwIter.next();
toPause.push(kw);
// This is to make sure you see things during the preview
// When you run it for real, you can remove this clause to
// increase speed.
if(AdWordsApp.getExecutionInfo().isPreview() &&
AdWordsApp.getExecutionInfo().getRemainingTime() < 10) {
break;
}
}

// Now go through each one and pause them.
for(var i in toPause) {
toPause[i].pause();
//Or you could use toPause[i].remove(); to delete the keyword altogether
}

// Sent an email to notify you of the changes
MailApp.sendEmail(TO_NOTIFY,
"AdWords Script Paused "+toPause.length+" Keywords.",
"Your AdWords Script paused "+toPause.length+" keywords.");
}

 

4. Ativar ou Pausar Campanhas, Palavras-chave ou Anúncios em Datas Específicas – Por Russel Savage. Quem trabalha com marketing online deve conhecer a Black Friday e o impacto dela nas vendas nesta data. Com esse script você pode ativar suas campanhas, anúncios e palavras-chave em datas específicas, assim, você pode programar para fazer promoções especiais sem a necessidade de estar presente no momento. Para configurar é necessário rotular suas campanhas, palavras-chave ou anúncios com o rótulo “Pause on”, para pausar, ou “Enable on”, para ativar.

 

/**************************************************
* Pause or Enable Campaigns, Keywords or Ads on a Given Date
* Version 1.2
* Changelog v1.2 - Added ability to pause Campaigns
* Changelog v1.1 - Added ability to run on Ads
* Created By: Russ Savage
* FreeAdWordsScripts.com
**************************************************/
var ENTITY = 'Keyword'; //or Ad or Campaign
var PAUSE_PREFIX = "Pause on "; //look for labels "Pause on 2013-04-11"
var ENABLE_PREFIX = "Enable on "; //look for labels "Enable on 2013-04-11"

function main() {
var todayStr = Utilities.formatDate(new Date(), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
var pauseStr = PAUSE_PREFIX+todayStr;
var enableStr = ENABLE_PREFIX+todayStr;
Logger.log("Looking for labels: " + [pauseStr,enableStr].join(' and '));

var labelsArray = buildLabelArray(pauseStr,enableStr);

if(labelsArray.length > 0) {
var labelsStr = "['" + labelsArray.join("','") + "']";
var entityIter;
if(ENTITY === 'Keyword') {
entityIter = AdWordsApp.keywords().withCondition("LabelNames CONTAINS_ANY "+labelsStr).get();
} else if(ENTITY === 'Ad') {
entityIter = AdWordsApp.ads().withCondition("LabelNames CONTAINS_ANY "+labelsStr).get();
} else if(ENTITY === 'Campaign') {
entityIter = AdWordsApp.campaigns().withCondition("LabelNames CONTAINS_ANY "+labelsStr).get();
} else {
throw 'Invaid ENTITY type. Should be Campaign, Keyword or Ad. ENTITY:'+ENTITY;
}

while(entityIter.hasNext()) {
var entity = entityIter.next();
pauseEntity(entity, pauseStr);
enableEntity(entity, enableStr);
}
}
}

//Helper function to build a list of labels in the account
function buildLabelArray(pauseStr,enableStr) {
var labelsArray = [];
try {
var labelIter = AdWordsApp.labels().withCondition("Name IN ['"+pauseStr+"','"+enableStr+"']").get();
while(labelIter.hasNext()) {
labelsArray.push(labelIter.next().getName());
}
return labelsArray;
} catch(e) {
Logger.log(e);
}
return [];
}

//Helper function to pause entities
function pauseEntity(entity, pauseStr) {
var labelIter = entity.labels().withCondition("Name = '"+pauseStr+"'").get();
if(labelIter.hasNext()) {
entity.pause();
entity.removeLabel(pauseStr);
}
}

//Helper function to enable entities
function enableEntity(entity, enableStr) {
var labelIter = entity.labels().withCondition("Name = '"+enableStr+"'").get();
if(labelIter.hasNext()) {
entity.enable();
entity.removeLabel(enableStr);
}
}

 

5. Pausar ao Atingir o Orçamento Mensal – Por Sean Dolan. Esse é um ótimo script para manter seus custos sob controle! Ao atingir um limite do seu orçamento mensal, ele automaticamente vai pausar seus anúncios, impedindo que suas campanhas continuem consumindo.

 

var CUTOFF_COST = 10000;
var CUTOFF_LABEL = "Total Spend cutoff";

function main() {
var label = AdWordsApp.labels().withCondition("Name='" + CUTOFF_LABEL + "'").get().next();

if (AdWordsApp.currentAccount().getStatsFor("THIS_MONTH").getCost() > CUTOFF_COST) {
var campaignIterator = label.campaigns().get();

while (campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
campaign.pause();
}
}
}

 

6. Pausar palavras-chave com índice de qualidade baixo – por Optmyzr. As palavras-chave com índice de qualidade baixo aumentam seu CPC para atingir a posição ideal nas páginas de resultados do Google. Esse script é útil caso você deseje manter uma campanha apenas com palavras-chave acima de um determinado índice de qualidade. Por padrão ele está configurado para pausar índices abaixo de 5.

 

// Copyright www.optmyzr.com all rights reserved. This script is provided on a as-is basis with no guarantee.
// This script may be distributed freely, without changing this notice

function main() {

//EDIT- SECTION

//Enter email address. For mulitple addresses please enter the the addresses separated by a comma.
var email_address = "[email protected]";

//Change the pause value to true to pause the keywords with below quality score.
var pause = false;

//This quality score defines the threshold to find keywords below it.
var quality_score = 5;

//ENTER the number of days you would like to get the stats of keywords for. By default it checks for last 30 days.
var date_range = "LAST_30_DAYS";

//END OF EDIT-SECTION

var workbook = SpreadsheetApp.create("Keywords with low Quality Score (" +
Utilities.formatDate(new Date(), "PST", "MM-dd HH:mm)"));
var currentSheet = workbook.getActiveSheet();
var keyword_found=false;

currentSheet.setName("Overview");
currentSheet.appendRow(["Campaign Name","Adgroup","Keyword","Cost","Impressions","Conversions","Quality Score"]);
currentSheet.getRange("1:1").setFontWeight("bold");

var report = AdWordsApp.report("SELECT CampaignName, AdGroupName, KeywordText, Cost, Impressions, Conversions, QualityScore "+
"FROM KEYWORDS_PERFORMANCE_REPORT "+
"WHERE CampaignStatus= ACTIVE and AdGroupStatus = ENABLED and Status = ACTIVE and QualityScore<"+quality_score+
" DURING "+date_range);

report.exportToSheet(currentSheet);
var rows = report.rows();
if(!rows.hasNext()){
currentSheet.appendRow(["No active Keywords Found"]);
}

MailApp.sendEmail(email_address, "Quality Score Tracker for Keywords", "You can see the keywords on the following url\n\n"+workbook.getUrl());
}

 

7. Apagar anúncios reprovados – por Russell Savage. Ao administrar contas em larga escala, mudanças nas landing pages do site, grupos de anúncios antigos, testes A/B podem fazer seus anúncios serem reprovados. Esse script deixa sua conta mais organizada apagando anúncios que estão reprovados.

 

//-----------------------------------
// Delete Ads That Are Disapproved
// Created By: Russ Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
// Let's start by getting all of the ad that are disapproved
var ad_iter = AdWordsApp.ads()
.withCondition("ApprovalStatus != APPROVED")
.get();

// Then we will go through each one
while (ad_iter.hasNext()) {
var ad = ad_iter.next();
// now we delete the ad
Logger.log("Deleteing ad: " + ad.getHeadline());
ad.remove();
}
}

 

8. Desativar anúncios e palavras-chave para produtos sem estoque – por Russel Savage. Ótimo script para empresas de e-commerce que anunciam no Google Ads, seja no dia-a-dia ou em picos de demandas como no Black Friday, você pode ter seus anúncios e palavras-chave pausados assim que estiverem fora de estoque.

 

Para que esse script funcione, preciso descobrir o que há de diferente na página quando ela fica sem estoque. Se eu clicar com o botão direito e visualizar a fonte da página, e procurar pelo trabalho “stock”, eu posso ver alguns lugares diferentes onde ele é usado. Um deles é o seguinte que diz “in_stock”: false.

 

 

Isso parece promissor. Eu verifico um item em estoque e, com certeza, “in_stock”: true está nessa página.

 

Tudo bem, agora sei o texto que preciso usar para preencher a variável OUT_OF_STOCK_TEXT no meu código. Agora cada site vai ser um pouco diferente, então eu tenho um script simples que usa a mesma lógica de URL que o script completo que você pode usar para testes.

 

/ ** **********************************
* Url rápido em estoque / fora do estoque
* Versão 1.0
* Criado por: Russ Savage
* FreeAdWordsScripts.com
********************************** * /
var STRIP_QUERY_STRING = true ;
var WRAPPED_URLS = true ;
var OUT_OF_STOCK_TEXT = ' O texto que identifica um item em falta no estoque vai aqui ' ;
var URL_TO_TEST = ' Seu URL para verificar vai aqui ' ;

função main () {
var urlToTest = URL_TO_TEST ;
urlToTest = cleanUrl (urlToTest);
var htmlCode = UrlFetchApp . buscar (urlToTest). getContentText ();
if ( htmlCode . indexOf ( OUT_OF_STOCK_TEXT ) > = 0 ) {
Logger . log ( ' O item está fora de estoque. ' );
} mais {
Logger . log ( ' O item está em estoque. ' );
}
}

function cleanUrl ( url ) {
if ( WRAPPED_URLS ) {
url = url . substr ( url . lastIndexOf ( ' http ' ));
if ( decodeURIComponent (url) ! == url) {
url = decodeURIComponent (url);
}
}
if ( STRIP_QUERY_STRING ) {
if ( url . indexOf ( ' ? ' ) > = 0 ) {
url = url . split ( ' ? ' ) [ 0 ];
}
}
if ( url . indexOf ( ' { ' ) > = 0 ) {
// Vamos remover os parâmetros da faixa de valor
url = url . substitua ( / \ { [ 0-9a-zA-Z ] + \} / g , ' ' );
}
URL de retorno ;
}

 

Depois de encontrar algum texto HTML na origem da página de destino que identifique se um item está em falta, convém seguir o roteiro completo. Existem algumas outras opções no script que permitem ativar ou desativar várias manipulações de URL no script. E lembre-se de que isso fará uma pausa apenas nos anúncios ou nas palavras-chave vinculados à página com o item esgotado.

 

/ ** **********************************
* Item esgotado
* Versão 1.2
* ChangeLog v1.2
* - ONLY_ACTIVE é usado para filtrar apenas campanhas e grupos de anúncios. Todas as palavras-chave e anúncios nos grupos de anúncios
* ser verificado que resolve o problema "uma vez desativado, sempre desativado".
* - chamada atualizada para obter os URLs finais. Agora chama getFinalUrl e getMobileFinalUrl em vez de getDestinationUrl
* - OUT_OF_STOCK_TEXTS agora pode conter várias coisas para verificar.
* - Se o CAMPAIGN_LABEL não existir, ele será ignorado com um aviso.
* ChangeLog v1.1 - Filtrado campanhas excluídas e grupos de anúncios
* Criado por: Russ Savage
* FreeAdWordsScripts.com
********************************** * /
var URL_LEVEL = ' Anúncio ' ; // ou palavra-chave
var ONLY_ACTIVE = true ; // defina como falso para verificar palavras-chave ou anúncios em todas as campanhas (pausadas e ativas)
var CAMPAIGN_LABEL = ' ' ; // definir isso se você quiser apenas verificar campanhas com esse rótulo
var STRIP_QUERY_STRING = true ; // configure isso para false se as coisas que vierem após o ponto de interrogação forem importantes
var WRAPPED_URLS = true ; // configure isso para true se você usar um terceiro como Marin ou Kenshoo para gerenciar sua conta
// Este é o texto específico (ou textos) para procurar
// na página que indica o item
// está fora de estoque. Se QUALQUER destes corresponderem ao html
// na página, o item é considerado "fora de estoque"
var OUT_OF_STOCK_TEXTS = [
' O texto que identifica um item fora de estoque vai aqui ' ,
' Outra string pode ir aqui, mas não precisa '
];

função main () {
var alreadyCheckedUrls = {};
var iter = buildSelector (). get ();
while ( iter . hasNext ()) {
var entity = iter . next ();
var urls = [];
if ( entity . urls (). getFinalUrl ()) {
urls . push ( entity . urls (). getFinalUrl ());
}
if ( entity . urls (). getMobileFinalUrl ()) {
urls . push ( entity . urls (). getMobileFinalUrl ());
}
para ( var i in urls) {
var url = cleanUrl (urls [i]);
if (alreadyCheckedUrls [url]) {
if (alreadyCheckedUrls [url] === ' esgotado ' ) {
entidade . pausa ();
} mais {
entidade . enable ();
}
} mais {
var htmlCode;
try {
htmlCode = UrlFetchApp . buscar (url). getContentText ();
} pegar (e) {
Logger . log ( ' Houve uma verificação de problemas: ' + url + ' , Ignorando. ' );
continue ;
}
var did_pause = false ;
para ( var x em OUT_OF_STOCK_TEXTS ) {
if ( htmlCode . indexOf ( OUT_OF_STOCK_TEXTS [x]) > = 0 ) {
alreadyCheckedUrls [url] = ' esgotado ' ;
entidade . pausa ();
did_pause = true ;
pausa ;
}
}
if ( ! did_pause) {
alreadyCheckedUrls [url] = ' em estoque ' ;
entidade . enable ();
}
}
Logger . log ( ' Url: ' + url + ' é ' + alreadyCheckedUrls [url]);
}
}
}

function cleanUrl ( url ) {
if ( WRAPPED_URLS ) {
url = url . substr ( url . lastIndexOf ( ' http ' ));
if ( decodeURIComponent (url) ! == url) {
url = decodeURIComponent (url);
}
}
if ( STRIP_QUERY_STRING ) {
if ( url . indexOf ( ' ? ' ) > = 0 ) {
url = url . split ( ' ? ' ) [ 0 ];
}
}
if ( url . indexOf ( ' { ' ) > = 0 ) {
// Vamos remover os parâmetros da faixa de valor
url = url . substitua ( / \ { [ 0-9a-zA-Z ] + \} / g , ' ' );
}
URL de retorno ;
}

function buildSelector () {
var selector = ( URL_LEVEL === ' Ad ' ) ? AdWordsApp . anúncios () : AdWordsApp . palavras-chave ();
seletor = seletor . withCondition ( ' CampaignStatus! = DELETED ' ). withCondition ( ' AdGroupStatus! = DELETED ' );
if ( ONLY_ACTIVE ) {
seletor = seletor . withCondition ( ' CampaignStatus = ENABLED ' );
if ( URL_LEVEL ! == ' Ad ' ) {
seletor = seletor . withCondition ( ' AdGroupStatus = ENABLED ' );
}
}
if ( CAMPAIGN_LABEL ) {
if ( AdWordsApp . labels (). withCondition ( " Nome = ' " + CAMPAIGN_LABEL + " ' " ). get (). hasNext ()) {
var label = AdWordsApp . rótulos (). withCondition ( " Nome = ' " + CAMPAIGN_LABEL + " ' " ). get (). next ();
var campIter = label . campanhas (). get ();
var campaignNames = [];
while ( campIter . hasNext ()) {
campaignNames . push ( campIter . next (). getName ());
}
seletor = seletor . withCondition ( " CampaignName IN [" " + campaignNames . join ( " ',' " ) + " '] " );
} mais {
Logger . log ( ' AVISO: o rótulo da campanha não existe: ' + CAMPAIGN_LABEL );
}
}
seletor de retorno ;
}

 

Como aumentar o tempo de leitura dos visitantes em seu blog thumb

Como aumentar o tempo de leitura dos visitantes em seu blog?

rotadesk No Comments

Como aumentar o tempo de leitura dos visitantes em seu blog

O marketing digital tem sido a melhor maneira de promover qualquer tipo de negócio. Elaborar um site de qualidade, que atraia o público-alvo pode não ser tão simples quanto parece, há muito material disponível em concorrência. Para você construir um blog de sucesso é preciso entender sobre algumas coisas, saiba como aumentar o tempo de leitura dos visitantes em seu blog!

Com os celulares sempre em mãos, em qualquer situação, a internet é o meio de comunicação mais acessível e de maior abrangência.

Por isso, sites e blogs são a melhor maneira de promover algum serviço, produto ou informações.

Mas, toda essa acessibilidade também tem seu lado negativo. É preciso dar seu melhor na elaboração do site e nas postagens, para que os visitantes busquem pelas suas informações e, principalmente, se mantenham nelas.

Quer dar um up no seu blog para aumentar as visualizações e permanência do leitor na página? Esse artigo irá te mostrar como aumentar o tempo de leitura dos visitantes em seu blog!

Obtenha elementos visuais para aumentar o tempo de leitura dos visitantes

Escolher uma estrutura de texto adequado pode aumentar o tempo de leitura dos visitantes em seu blog.

Alguns profissionais de marketing recomendam que o conteúdo deve começar com textos pequenos, com alta frequência de novas postagens e, só depois de um tempo, apostar em menor quantidade de textos, porém mais longos.

Para outros profissionais, essa reflexão já não faz tanto sentido assim. Cada blog tem um propósito e é difícil generalizar desta maneira.

Uma dica valiosa para dar mais harmonia ao seu blog, e consequentemente aumentar o tempo de leitura dos visitantes é dividir a matéria.

E uma ótima maneira de fazer isso é adicionar imagens ao decorrer do texto. Essa pequena mudança pode potencializar as visualizações do seu site, mais compartilhamento de terceiros, etc.

Mas, é preciso que você utilize as imagens certas para que essa estratégia realmente funcione. As figuras precisam ser relevantes, terem a cara da informação que você deseja passar.

Se você está montando um post sobre viagens, por exemplo, acrescente algumas fotos de lugares incríveis, instigando o leitor a realmente querer conhecê-lo.

Site ilustração viagem

Ou, se está instruindo um passo a passo, imagens com fluxogramas e esquemas são ótimas para o entendimento e satisfação de quem buscou pela matéria.

Se escolhidas com sabedoria, as imagens absorvem o leitor, que vai dedicar mais tempo à leitura do seu blog.

Adicione movimento no blog

Além das imagens para aumentar o tempo de leitura dos visitantes em seu blog, outra dica é apostar nos vídeos.

Foi feito uma média, e descobriram que os post com conteúdo em vídeo aumentam o tempo de visualização da página em 2,6 vezes.

O resultado é gritante, mas mesmo assim o costume de usar vídeo nas postagens não é algo muito usual. Isso porque, a produção de conteúdo leva um tempo maior, porém, páginas com vídeo tendem a ranquear melhor nos mecanismos de busca. Portanto, caso tenha alguma página que queira dar maior visibilidade, invista em um vídeo.

Aprenda algumas dicas para adicionar vídeos e aumentar o tempo de leitura dos visitantes em seu blog:

  • Crie vídeos instrutivos.
  • Se atua em alguma área que sempre tem novidades ou mudanças, considere repassar essas informações por vídeos invés de textos.
  • Converse com seu público, plante dúvidas e instigue a curiosidade que prender o visitante até o final do vídeo.
  • Complemente a postagem com algum conteúdo escrito.
  • A produção do vídeo deve ser feita com qualidade de som e imagem.

Uso do conceito TLDR para aumentar o tempo de leitura

Outra tática para aumentar o tempo de leitura no blog é utilizar o TLDR (Too Long, Didn’t Read).

O TLDR é mencionado no texto quando o post original é muito extenso e as pessoas querem apenas um resumo para ter uma ideia do que se trata, uma visão geral do contexto.

TLDR

Porém, muitas vezes ele aparece nos fóruns destinados aos leitores, indicando que o texto é muito longo, mostrando que as pessoas estão sem paciência para ler o conteúdo na íntegra.

Isso é extremamente interessante, pois o responsável pelo blog fica ciente quando uma postagem não agradou, dando a possibilidade de modificá-la.

Além disso, sua utilização também se encaixa no que foi dito no tópico anterior, sobre dar mais espaço ao visitante no blog.

Ou seja, você dá uma oportunidade de contato com o leitor, crindo um vínculo entre ele e o blog (o que acaba fazendo dele um visitante “fiel”) e ainda recebe dicas a respeito das postagens.

Nada melhor que a fiscalização e a opinião do nosso próprio público-alvo para atender os desejos dos leitores.

É importante sempre estar atualizando as postagens para melhorá-las, de forma a agradar mais os visitantes.

Forneça dicas e dê espaço ao visitante em seu blog

Fornecer dicas e informações interessantes para o leitor ao decorrer do texto estimula o visitante a permanecer mais tempo no blog.

A postagem precisa agregar conhecimento para quem está lendo. Se o leitor terminar de ler o post e sentir que realmente aprendeu algo útil, isso vai instigá-lo a procurar outras matérias no site.

Dicas no site

A utilização de marcadores e subtítulos também são estruturas recomendadas na confecção de textos.

Realizar citações e chamadas para atrair a atenção do leitor. Coisas impactantes despertam a curiosidade!

Outra maneira eficiente de aumentar o tempo de leitura dos visitantes em seu blog é abrindo um espaço para ele.

Você pode abrir um fórum de perguntas e respostas, enquetes, disponibilizar o envio de mensagens com sugestões para posts futuros ou complementações de artigos antigos.

Isso vai criar uma relação entre o site e o visitante, despertando a curiosidade do leitor e fazendo com que suas visitas no site se tornem mais frequentes.

Essas pequenas dicas de como aumentar o tempo de leitura dos visitantes em seu blog vão fazer toda a diferença no alcance de suas postagens, de maneira a construir posts mais interessantes e atrativos para os leitores.

 

Como o Java Script influencia o SEO thumb

Como o Java Script influencia o SEO?

rotadesk No Comments

Como o Java Script influencia o SEOO Java Script permite que você crie websites rápidos, dinâmicos e bonitos, oferecendo uma boa experiência ao usuário. Mas você sabe como o como o Java Script influencia o SEO? Antes de tudo é preciso conhecer alguns conceitos básicos relacionados.

Conceitos Básicos

  • Java Script

É uma das linguagens de programação mais populares para desenvolver websites. Ele usa estruturas para criar páginas da Web interativas, controlando o comportamento de diferentes elementos na página.

  • HTML

A sigla ignifica Hypertext Markup Language. Em palavras simples, é um organizador de conteúdo: o HTML fornece a estrutura de um site (listas com marcadores, títulos, parágrafos, etc.) e define o conteúdo estático.

  • AJAX

Pode ser definido como um conjunto de técnicas para desenvolvedores que permite que aplicativos da Web se comuniquem com um servidor sem perturbar a página atual.

Basicamente, ele atualiza o conteúdo sem atualizar a página inteira. O AJAX permite que aplicativos e servidores da Web se comuniquem sem interferir na página atual.

  • DOM

DOM (Document Object Model) é o que o Google usa para analisar, inspecionar e entender as páginas da web. Você pode ver o DOM sempre que for ao “Inspecionar Elemento” em um navegador.

Uma maneira simples de examinar o DOM é que esse é o processo que o navegador faz sempre que recebe o documento HTML, para que ele possa começar a renderizar a página.

E como o Java script influencia o SEO?

Normalmente, existem três principais razões pelas quais você deve se preocupar com o Java script em seu site:

Rastreabilidade – Capacidade dos bots rastrearem seu site.

Um dos principais trabalhos dos desenvolvedores da Web é garantir que os bots encontrem suas URLs e entendam a estrutura de seus sites. Três elementos-chave devem ser observados:

  • Bloqueio do Java Script

Se você bloquear o Java Script, a página será exibida de forma diferente para os rastreadores da Web do que para os usuários.

Isso significa que os mecanismos de pesquisa não obtêm a experiência completa do usuário, e o Google pode interpretar essas ações como cloaking. Por isso é importante fornecer aos rastreadores da web os recursos necessários para ver páginas da Web da mesma maneira que os usuários.

  • Linkagem interna

A vinculação interna é uma ferramenta de SEO usada para mostrar aos mecanismos de pesquisa a arquitetura do seu site e apontar para as páginas da Web mais importantes. O conselho mais essencial é usar links internos e não substituí-los por eventos de clique com Java Script.

É provável que os URLs finais sejam encontrados e rastreados com eventos de clique, mas os rastreadores da Web não os associam à navegação global do seu site. O melhor é implementar a vinculação interna usando tags de âncora comuns no HTML ou no DOM.

  • Estrutura da URL

Os sites baseados em Java Script costumavam incluir identificadores de fragmentos em URLs, mas hashes (#) e hashbangs (#!) Não são recomendados pelo Google.

Um método altamente recomendado é a API de histórico do pushState. Ele atualiza a URL na barra de endereços e permite que sites de Java Script aproveitem URLs limpas.

Uma URL limpa consiste em um texto simples, facilmente compreendido por usuários não especialistas. Considere o uso do pushState para rolagem infinita, para que o URL seja atualizado toda vez que o usuário acessar uma nova parte da página.

Obtenção – capacidade dos bots de acessar as informações do seu site e analisar seu conteúdo.Bot site

Para os robôs do mecanismo de pesquisa que executam o Java script, existem alguns elementos necessários para que eles possam obter o conteúdo de um site:

  • Se o seu site exigir algumas ações dos usuários, os mecanismos de pesquisa provavelmente não o verão.
  • Os bots do Google não têm a capacidade de clicar, escrever ou fazer qualquer outra atividade que exija ações de um usuário. Então, se o seu site tiver elementos como esse, o Google provavelmente não terá a mesma experiência que o usuário final.
  • Se o seu tempo de carregamento do Java script demorar mais de cinco segundos, os mecanismos de pesquisa podem não estar vendo sua página. Sabe-se que não há valor de tempo limite para sites, no entanto, eles devem ter como objetivo carregar em 5 segundos ou menos.
  • Se existirem erros dentro do seu Java script, ambos os navegadores e mecanismos de pesquisa terão a possibilidade de perder seções da sua página se o código não for executado corretamente.

No entanto, ainda é melhor para os webmasters e desenvolvedores da Web criarem o hábito de testar e experimentar pequenas seções de seu site e se algum erro for encontrado no seu teste, você pode optar por experimentar o Snapshot HTML.

  • Snapshot em HTML

São basicamente páginas completamente renderizadas que podem ser retornadas para os robôs do mecanismo de pesquisa.

Podem ser usados ​​quando os mecanismos de pesquisa e outros sites, como o Facebook, não puderem obter seu Java script, então é melhor retornar um instantâneo HTML do que não ter seu índice indexado – ou nem mesmo ser entendido.

Além disso, observe que o Google deseja a mesma experiência que os usuários. Portanto, forneça-lhes apenas instantâneos se for absolutamente necessário

Latência do Site – caminho de renderização crítica

A ideia principal do caminho de renderização crítica do Google é primeiro carregar informações cruciais para os usuários. Em outras palavras, colocar o conteúdo mais essencial para os usuários acima.

Mais importante acima

Se seus arquivos Java Script ou alguns recursos desnecessários entopem a velocidade de carregamento da página, você provavelmente tem um Java Script de bloqueio de renderização, também chamado de latência percebida.

Isso significa que suas páginas têm o potencial de aparecer com mais rapidez, mas o código Java Script as está diminuindo.

Verifique quanto tempo leva para carregar uma página com o Page Speed ​​Insights ou outras ferramentas semelhantes. Analise os resultados para ver se há um Java Script de bloqueio de renderização. Confira nosso artigo de como atingir a nota máxima no Google Page Insights.

Os mecanismos de pesquisa estão em constante evolução, por isso, sem dúvida, interpretarão seu Java Script melhor e mais rápido no futuro. Mas sabendo como o Java script influencia o SEO com certeza poderá fazer com que as ferramentas disponíveis sejam mais eficientes!

 

5 maneiras de usar o Google Analytics para encontrar ideias de conteúdo thumb

5 maneiras de usar o Google Analytics para encontrar ideias de conteúdo

rotadesk No Comments

5 maneiras de usar o Google Analytics para encontrar ideias de conteúdoEntender como funciona o perfil do cliente que visita sua loja online, site, blog e afins é muito importante para investir em estratégias de marketing digital que atinjam seu público alvo de forma eficiente. Nesse mercado, há diversas ferramentas que auxiliam na coleta de informações sobre os visitantes do sites, conheça o Google Analytics e 5 maneiras de encontrar ideias para conteúdo.

O Google Analytics ajuda a desenvolver o marketing orientado por dados. Com o resultado gerado, é possível analisar como os clientes estão reagindo à sua página e, assim, desenvolver uma estratégia que atraia mais público.

Se você deseja melhorar o alcance do seu negócio, conheça as 5 maneiras de usar o Google Analytics para encontrar ideias de conteúdo.

Use o Google Analytics para criar variações do seu conteúdo

Com o Google Analytics você consegue descobrir qual o comportamento do visitante em cada post do seu site.

Essa ferramente é extremamente útil para deduzir o que mais agrada ou não os clientes que buscam pelo seu negócio e, assim, construir os posts seguintes de acordo com o perfil do conteúdo que mais chamou atenção e público.

Qual o melhor formato de tópico e estruturas, postagens que o cliente gastou mais tempo na página, tipos de títulos mais chamativos e coisas do gênero são dados que o Google Analytics apresenta para você.

Detalhes que parecem insignificantes, como usar ou não usar títulos com clickbait, postagens com listas ou não, etc. fazem diferença para o leitor. Isso é observado pelo sucesso de postagens com a mesma estrutura.

De uma maneira prática e simples, você consegue traçar um perfil das postagens que mais tiveram sucesso.

Utilizando desses dados, é possível construir seus próximos posts seguindo as características mais populares e, consequentemente, atrair mais visitantes.

Relatório de Termos de Pesquisa do Google Analytics

A estratégia de marketing SEO (Search Engine Optimization), é crucial para a otimização no mecanismo de busca. O Google Analytics possui a função que nos oferece dados referentes às palavras mais buscadas pelos visitantes.

O Google Analytics produz um relatório contendo quais são as palavras-chave mais buscadas quando acessam seu site.

Essa função pode ser encontrada na barra de pesquisa, na sequência: Google Analytics>Comportamento>Pesquisa do Site>Termos de Pesquisa.

Termos de Pesquisa Analytics

O último passo informa quais são as palavras-chave mais buscadas. Mas, o que isso adianta na estratégia de Marketing?

É interessante analisar quais palavras que os visitantes usam para tentar encontrar o assunto desejado. Com essa informação, pode-se utilizar a estratégia SEO com mais embasamento, destacando palavras mais populares.

Essa ferramenta do Google Analytics também nos dá a possibilidade de encontrar falhas no conteúdo do site.

Ou seja, pelo Termo de Pesquisa é possível avaliar quais as buscas que não tiveram conteúdo correspondente e, assim, produzir posts referentes a essas pesquisas.

Assim, as postagens do site estarão sempre atualizadas com conteúdo que realmente interessa o cliente.

Atualização de conteúdo existente

Sites com conteúdos desatualizados são um grande problema para seu rendimento. O Google Analytics também consegue fazer uma análise sobre matérias que não são mais acessadas, ou que os visitantes não permanecem.

Segundo o comerciante Christopher S. Penn, o tráfego de busca aumento em 40% depois de atualizar o conteúdo do site.

Para acessar no Google Analytics, siga: Comportamento> Conteúdo do site> Todas as páginas e escolha Origem/mídia na caixa Dimensão Secundária.Consultas Analytics filtro Todas as Páginas

 

Ao comparar a taxa de rejeição, gerada no relatório, com as visualizações únicas da página, é possível descobrir se os leitores estão realmente lendo o conteúdo e passando tempo na página.

Com essa informação, você pode selecionar quais os conteúdos não estão sendo lidos e atualizá-los.

O Relatório de Fluxo de Comportamento, também gerado pelo Google Analytics, indica se os visitantes estão interagindo com o site.

Ou seja, se o post não rendeu nenhuma tentativa de contato, significa que ele precisa ser atualizado para se tornar mais atrativo.

Renovar, atualizar e reciclar postagens defasadas aumentará o tráfego de clientes no site, expandindo mais as pesquisas dentro dele.

Atente-se a intenção da palavra-chave

De acordo com o diretor de SEO da Be Found Online: “Se você não tiver conteúdo em seu site para corresponder à intenção de uma palavra-chave, não poderá gerar uma quantidade significativa de tráfego de pesquisa, não importa quantas vezes você use essa palavra-chave em seu site. ”Ou seja, a palavra-chave deve corresponder à intenção dos leitores para que ela seja realmente efetiva. Conheça os quatro tipos de palavras-chave·

  • Navegação – Os usuários pesquisam por sites específicos.
  • Informativo – Pesquisa de uma resposta para um determinada pergunta, por exemplo: Qual a altura da Torre Eiffel?
  • Investigativo – Por exemplo: Quais são as melhores câmeras digitais?
  • Transacional – os usuários estão pesquisando com o intuito de comprar.

Para chegar os dados no Google Analytics, você navegará por Aquisição>Search Console>Consultas.

Consultas Analytics

O Relatório de Pesquisa precisa conter as palavras-chave adequadas ao tipo de negócio da sua empresa. Por exemplo, se tem uma loja comercial, as palavras devem ser investigativas ou transacionais. Caso as buscas no site sejam de gênero informativo, isso não trará resultados para o seu negócio. Os leitores simplesmente entraram na página e não permanecerão muito tempo nela.

Converse com o cliente final

É claro que as ferramentas do Google Analytics são fundamentais para estudar os perfil dos visitantes e como o conteúdo impacta o leitor, porém, também é preciso fazer uma pesquisa com seu público-alvo.

Conversar com o cliente e buscar entender quais são suas dúvidas a respeito do seu negócio é crucial.

Esse tipo de pesquisa irá direcionar as postagens do seu site com conteúdo realmente interessante, atraindo mais novos visitantes.

Juntando as ferramentas computacionais do Google Analytics e a pesquisa de mercado com o cliente final, conseguirá material suficiente para um site bem estruturado e de sucesso.

Melhore o conteúdo do seu site utilizando as diversas maneiras de usar o Google Analytics para encontrar ideias de conteúdo. Aumente o tráfego de visitantes e atinja o sucesso para o seu negócio!

 

Como medir o retorno das mídias sociais thumb

Como medir o retorno das mídias sociais?

rotadesk No Comments

Como medir o retorno das mídias sociais

Ao falamos sobre o retorno das mídias sociais em termos de valores – financeiros ou de ações de usuários, devemos falar sobre ROI – Return on Investment – porém, voltado para esse tipo de mídia.

Por ROI, queremos dizer o retorno do investimento do negócio (predominantemente marketing) em investimentos em canais sociais, redes, estratégias e táticas feitas para atingir metas pré-definidas.

Seja no nível micro, no nível macro, no nível integrado, no nível da campanha, no nível do programa, no nível básico… vale tudo! O importante é saber se suas estratégias estão sendo efetivas ou não.

Saiba mais sobre o ROI das redes sociais a partir da perspectiva de ROI de marketing e entenda como é possível mensurar o retorno das mídias sociais, onde suas estratégias são aplicadas.

Afinal, o que significa medir o retorno das mídias sociais?

 

A cada dia é possível ver mais e mais executivos – finalmente – se perguntando sobre o retorno de todos os seus investimentos em redes sociais.

O chamado ROI das redes sociais torna-se, para uma empresa, ainda mais importante quando sua fase experimental termina, ou seja, quando as primeiras táticas para observar a resposta do público a ele são tomadas.

É possível fazer essa análise contando com algumas perguntas sérias e começar a medir o retorno das mídias sociais através de algumas descobertas do “Estudo de ROI e Medição de Marketing”, de Jim’s Lenskold Group.

Ele mostra que a necessidade de medições de retorno das mídias sociais é menor em organizações que realizam experimentos de mídias sociais e estão testando essa ideia em uma escala relativamente pequena.

Isso é feito em comparação com profissionais de marketing que desejam aumentar a eficiência de seus programas de redes sociais e melhorar a integração.

A necessidade de medir o retorno das mídias sociais

Medir o retorno das mídias sociais pode parecer insignificante, mas não é. Isso indica que a medida – e, sim, o ROI – do ‘social’ se torna mais importante quando a fase experimental termina.

Além disso, ela torna-se mais significativa quando a integração de mídias entra em jogo.

Essa integração é exatamente o que o marketing focado no cliente significa: nenhuma atividade de marketing é uma ilha, e é aí que muitos especialistas em redes sociais falham.

Eles não conseguem pensar além dos silos sociais que criaram e isso é uma estratégia falha.

Enquanto o marketing de redes sociais é conduzido em uma escala pequena e experimental, muitas vezes, ele é deixado de fora do contexto de ROI de marketing social.

Isso tem a ver com a falta de métricas, prioridades, aspectos práticos, risco, de imaturidade e da falta de um uso mais amplo do ROI de marketing, entre muitos outros.

Como evitar falhas ao medir o retorno das mídias sociais?

Falha retorno social media

Ao implementar o ROI de marketing, é significativo incluir programas com menos certeza do ponto de vista do ROI.

Quando feito em uma escala relativamente pequena, esses tipos de investimentos não afetarão muito o ROI geral de marketing.

No entanto, quando feitos em todos os projetos de uma empresa, podem aumentar significativamente o retorno das mídias sociais.

Note que o ROI de marketing não é (apenas) sobre medir, melhorar e relatar dados sociais. É, antes de tudo sobre a aprovação de seus consumidores, fundamental para qualquer projeto.

Na prática, como é possível medir o retorno das mídias sociais?

Retorno das redes sociais

Esta questão obviamente também depende de seus objetivos. É essencial apostar em métricas e KPIs para retorno das mídias sociais.

Uma métrica pode ser usada como um KPI, embora normalmente você combine métricas diferentes para ter um KPI relevante para sua empresa (e clientes).

O que você tem, no entanto, são métricas relacionadas a metas específicas, como:

  • Etapas da jornada de compra;
  • Determinados canais;
  • Ciclo de vida do cliente individual;
  • E outros pontos de contato sociais.

Observe também que, para conhecer o ROI de marketing de uma forma mais holística, você obviamente precisa falar uma “linguagem comum” em relação às métricas usadas em toda a empresa.

Há uma grande diferença entre a criação de marcas e a geração de leads. Assim, os resultados que você está procurando e, por definição, as formas de medi-los, diferem.

Há também uma diferença entre uma campanha para vender mais e uma para criar conscientização. Analise seu caso em específico!

Assim, você saberá como agira para medir o retorno das mídias sociais usando métricas de marketing e, obviamente, vendas, negócios e finanças e KPIs. Jim lista alguns exemplos de maneiras de medir o ROI das redes sociais:

  • Vendas incrementais que podem ser vinculadas diretamente a um esforço ou campanha de redes sociais;
  • O número de leads recém-adquiridos que se convertem em vendas;
  • O valor incremental do cliente por meio de esforços de retenção e relacionamento ou lealdade;
  • Maior conscientização e interesse, levando a mais compradores em potencial nos primeiros passos do funil tradicional;
  • Uma preferência de marca mais alta que leva a mais conversões de vendas.

Obviamente, os KPIs e métricas precisos que você usa para medir o ROI de redes sociais, de fato, prosperam melhor em uma visão integrada.

O retorno das mídias sociais pode ser calculado no nível de canais e micro campanhas, mas idealmente também ocorre em um nível mais alto.

E não se esqueça dos desafios relacionados à atribuição e às deficiências do modelo de funil tradicional em uma realidade entre canais.

Além disso, ainda é necessário explicar aos analistas de redes sociais que o resultado do engajamento é, na verdade, também a conversão e que há fenômenos como atribuição, níveis micro e macro, métricas diferentes, fórmulas diferentes e grupos de controle a serem levados em conta.

Então, por enquanto, é hora de buscar seguir os itens acima citados e buscar a mensuração de retorno das mídias sociais em larga escala e de forma pontual.

Sabendo mais sobre as formas de medir o retorno das mídias sociais em seu negócio, você se torna capaz de estimular seus resultados e obter sucesso em todos os seus projetos! Confira também o nosso texto em que abordamos o ROI pelo Google Analytics.

Automação de lances em links patrocinados thumb

Automação de lances em links patrocinados. Tudo o que você precisa saber

rotadesk No Comments

Automação de lances em links patrocinados

Publicidade em Links Patrocinados

Uma das formas de divulgar seu produto pela internet é por meio de links patrocinados, que são links que seguem um padrão inteligente de consumo de cada usuário e aumentam muito a conversão de observador para um possível cliente.

Por exemplo, se você se interessa por determinado assunto e acessa um site sobre ele, já percebeu que em sites parecidos ou do mesmo segmento existam banners com publicidades de produtos relacionados?

Preste atenção quando estiver navegando pela internet, em redes sociais, e-commerce ou sites sobre interesses diversos, e poderá ver que muitos deles fazem publicidade com os chamados link patrocinados, que na maioria das vezes tem a ver com o que você pesquisa online

Sobre os lances automáticos

Lances Automatizados

As estratégias de lances automáticos são processos automatizados projetados para maximizar suas metas. O algoritmo realiza isso para você analisando vários pontos de dados de desempenho de anúncios, incluindo a hora do dia, o sexo, o dispositivo do usuário, os sistemas operacionais e muito mais.

Os lances automáticos eliminam o trabalho pesado e adivinhações na hora de definir lances para atingir suas metas de desempenho. Cada tipo de estratégia de lances automáticos foi criado para ajudar você a atingir uma meta específica para sua empresa.

Por que entender sua estratégia de lances é importante?

Sua estratégia de lances diz essencialmente ao algoritmo que “pagaremos até X valor por clique / por cliente / por R$ de receita”. Se seus lances forem muito altos, você provavelmente aparecerá no topo da página, mas seu orçamento pode ser comprometido, este é um trade-off que você provavelmente não está interessado em pagar.

Se os seus lances forem muito baixos, você poderá obter um retorno mais forte, mas não dará a você tantas visualizações que resultarão em menos aquisições de clientes. A chave é encontrar uma estratégia de lances que alinhe seus lances com suas metas de orçamento e aquisição de clientes.

Como escolher uma boa estratégia?

Estretégia de lances decisão

É preciso se concentrar nos dados certos para tomar uma boa estratégia de lance. A coleta de dados já não é um problema tão grande quanto antes, mas não se trata principalmente da quantidade de dados sim sobre a qualidade deles. Quais são então os dados certos para tomar essa decisão?

  • Há bastante tráfego?

Nessa pergunta, deve-se analisar todos os pontos de dados, como impressões, cliques ou gastos, para garantir que você tenha dados suficientes para tomar uma boa decisão.

  • É acessível?

Isso é complicado, mas é bom se atentar aos CPCs gerais e nas posições médias. Pode ser útil criar filtros para CPCs específicos.

  • O que está acontecendo no mercado?

Seus lances são impactados e impactam de fato os outros anunciantes no espaço. Incluir a parcela de impressões da Rede de Pesquisa (e outras métricas competitivas) é essencial para grandes lances.

A explicação rápida e fácil do Compartilhamento de Impressões da Rede de Pesquisa é que ele informa a porcentagem de impressões que você realmente obtém em comparação com o número de impressões que você pode obter.

Automatizando lances para impressões

Utilizaremos os filtros do Google Ads para fazer uma automatização dos processos de otimizar as palavras-chave para impressões.

Diminuir lances em palavras de baixa performance

Busque filtrar as palavras-chave que estão performando mal de acordo com os KPIs para seu objetivo. É interessante diminuir os lances em palavras que estão com baixa performance nesses indicadores. Aplique todos esses filtros para identificá-las.

  • Custo – Observe as palavras-chave que estão com custo elevado pois, esse fator indica que ela possui uma boa quantidade de dados.
  • Custo por Clique – O CPC elevado pode indicar que seu clique esteja saindo muito caro e elevando os custos
  • Custo/Conversão – Pagar demais pela conversão reduz o lucro de sua empresa.
  • Parcela de impressões – A parcela de impressão alta indica que seus anúncios estão sendo exibidos com bastante frequência, porém, você não quer que uma palavra-chave que não performa ative seus anúncios se está custando muito caro.

Assim, as palavras que se encaixam em todos esses 4 filtros você pode selecionar todas e reduzir seus lances em 25%, por exemplo.

Aumentar lances em palavras de boa performance

Boa Performance

Nesse caso vamos aumentar os lances buscando por palavras-chave que estão com bons indicadores. Assim daremos mais oportunidade para palavras que têm maior chance trazer conversão mais barata.

  • Custo – Novamente, esse indicador com valor alto indica que há uma boa quantidade de dados.
  • Conversões – Certifique ao acrescentar no filtro que as conversões não são aleatórias, conversões maiores que 3 são um bom número.
  • Custo/Conversão – Procure por custos/conversões baixos pois são palavras que estão baratas.
  • Parcela de impressões – Dado os filtros anteriores, palavras com parcela de impressões baixas indica que as elas estão performando bem porém não estão sendo exibidas o suficiente.

Essas palavras-chave que sobraram após essa filtragem são boas palavras-chave para terem maior visibilidade e, portanto, terem seus lances aumentados.

Vantagens de automação de lances em links patrocinados

  • Segmentação por segundo – a capacidade de segmentar suas campanhas e grupos de anúncios com base na semelhança e categorizá-los em pastas personalizadas, nas quais você pode definir lances separadamente.
  • Eficiência – a automação pode dar a você a liberdade de largura de banda para gerenciar suas grandes contas em nível macro e se concentrar em oportunidades de crescimento ou estratégia além de manter o controle sobre o desempenho diário.
  • Capacidade de lidar com contas grandes ou complexas – pode ser desafiador gerenciar todas as milhares de palavras-chave em contas grandes ou complexas, com isso a automação pode ajudar nos ganhos de eficiência.

Note que a automação não deve ser aplicada de qualquer forma. Automação envolve personalização. Isto aponta para a necessidade de realizar um estudo para perceber as nuances dos seus clientes, e automatizar processos rentáveis.

A gestão destes recursos envolve um conhecimento profundo das ferramentas de marketing digital. Por esta razão, é prudente selecionar agências de marketing digital certificadas para criar e gerenciar regras automatizadas em sua conta.

Tais agências devem ter as habilidades necessárias para gerenciar campanhas focadas em resultados.

Por meio de rigorosos testes, além de comprovação na prática, uma agência certificada está em melhores condições de gerenciar sua conta e quaisquer processos automatizados para potencializar o desempenho de suas campanhas.

Automação Google Adwords: Script de Modificação de Lances

rotadesk No Comments

Nessa série especial, reunimos alguns scripts úteis para você automatizar e aumentar o retorno de suas campanhas no Google Adwords. Confira abaixo como automatizar o Google Adwords para “Modificação de Lances”.

1. Programação de Alteração de Lances 24 horas – Pelo Brainlabs. Esse script permite que você ajuste automaticamente seus lances por hora, durante toda a semana. Desta maneira é possível otimizar o gasto do orçamento de sua conta mantendo seus anúncios nas posições que trazem maiores conversões.

/*
*
* Advanced ad scheduling
*
* This script will apply ad schedules to campaigns or shopping campaigns and set
* the ad schedule bid modifier and mobile bid modifier at each hour according to
* multiplier timetables in a Google sheet.
*
* This version creates schedules with modifiers for 4 hours, then fills the rest
* of the day and the other days of the week with schedules with no modifier as a
* fail safe.
*
* Version: 3.1
* Updated to allow -100% bids, change mobile adjustments and create fail safes.
* brainlabsdigital.com
*
*/
function main() {
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//Options
//The Google sheet to use
//The default value is the example sheet
//Shopping or regular campaigns
//Use true if you want to run script on shopping campaigns (not regular campaigns).
//Use false for regular campaigns.
var shoppingCampaigns = false;
//Use true if you want to set mobile bid adjustments as well as ad schedules.
//Use false to just set ad schedules.
var runMobileBids = false;
//Optional parameters for filtering campaign names. The matching is case insensitive.
//Select which campaigns to exclude e.g ["foo", "bar"] will ignore all campaigns
//whose name contains 'foo' or 'bar'. Leave blank [] to not exclude any campaigns.
var excludeCampaignNameContains = [];
//Select which campaigns to include e.g ["foo", "bar"] will include only campaigns
//whose name contains 'foo' or 'bar'. Leave blank [] to include all campaigns.
var includeCampaignNameContains = [];
//When you want to stop running the ad scheduling for good, set the lastRun
//variable to true to remove all ad schedules.
var lastRun = false;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//Initialise for use later.
var weekDays = ["MONDAY""TUESDAY""WEDNESDAY""THURSDAY""FRIDAY""SATURDAY""SUNDAY"];
var adScheduleCodes = [];
var campaignIds = [];
//Retrieving up hourly data
var scheduleRange = "B2:H25";
var accountName = AdWordsApp.currentAccount().getName();
var spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
var sheets = spreadsheet.getSheets();
var timeZone = AdWordsApp.currentAccount().getTimeZone();
var date = new Date();
var dayOfWeek = parseInt(Utilities.formatDate(date, timeZone, "uu"), 10) - 1;
var hour = parseInt(Utilities.formatDate(date, timeZone, "HH"), 10);
var sheet = sheets[0];
var data = sheet.getRange(scheduleRange).getValues();
//This hour's bid multiplier.
var thisHourMultiplier = data[hour][dayOfWeek];
var lastHourCell = "I2";
sheet.getRange(lastHourCell).setValue(thisHourMultiplier);
//The next few hours' multipliers
var timesAndModifiers = [];
var otherDays = weekDays.slice(0);
for (var h=0; h<5; h++) {
var newHour = (hour + h)%24;
if (hour + h > 23) {
var newDay = (dayOfWeek + 1)%7;
else {
var newDay = dayOfWeek;
}
otherDays[newDay] = "-";
if (h<4) {
// Use the specified bids for the next 4 hours
var bidModifier = data[newHour][newDay];
if (isNaN(bidModifier) || (bidModifier < -0.9 && bidModifier > -1) || bidModifier > 9) {
Logger.log("Bid modifier '" + bidModifier + "' for " + weekDays[newDay] + " " + newHour + " is not valid.");
timesAndModifiers.push([newHour, newHour+1, weekDays[newDay], 0]);
else if (bidModifier != -1 && bidModifier.length != 0) {
timesAndModifiers.push([newHour, newHour+1, weekDays[newDay], bidModifier]);
}
else {
// Fill in the rest of the day with no adjustment (as a back-up incase the script breaks)
timesAndModifiers.push([newHour, 24, weekDays[newDay], 0]);
}
}
if (hour>0) {
timesAndModifiers.push([0, hour, weekDays[dayOfWeek], 0]);
}
for (var d=0; d<otherDays.length; d++) {
if (otherDays[d] != "-") {
timesAndModifiers.push([0, 24, otherDays[d], 0]);
}
}
//Pull a list of all relevant campaign IDs in the account.
var campaignSelector = ConstructIterator(shoppingCampaigns);
for(var i = 0; i < excludeCampaignNameContains.length; i++){
campaignSelector = campaignSelector.withCondition('Name DOES_NOT_CONTAIN_IGNORE_CASE "' + excludeCampaignNameContains[i] + '"');
}
campaignSelector = campaignSelector.withCondition("Status IN [ENABLED,PAUSED]");
var campaignIterator = campaignSelector.get();
while(campaignIterator.hasNext()){
var campaign = campaignIterator.next();
var campaignName = campaign.getName();
var includeCampaign = false;
if(includeCampaignNameContains.length === 0){
includeCampaign = true;
}
for(var i = 0; i < includeCampaignNameContains.length; i++){
var index = campaignName.toLowerCase().indexOf(includeCampaignNameContains[i].toLowerCase());
if(index !== -1){
includeCampaign = true;
break;
}
}
if(includeCampaign){
var campaignId = campaign.getId();
campaignIds.push(campaignId);
}
}
//Return if there are no campaigns.
if(campaignIds.length === 0){
Logger.log("There are no campaigns matching your criteria.");
return;
}
//Remove all ad scheduling for the last run.
if(lastRun){
checkAndRemoveAdSchedules(campaignIds, []);
return;
}
// Change the mobile bid adjustment
if(runMobileBids){
if (sheets.length < 2) {
Logger.log("Mobile ad schedule sheet was not found in the Google spreadsheet.");
else {
var sheet = sheets[1];
var data = sheet.getRange(scheduleRange).getValues();
var thisHourMultiplier_Mobile = data[hour][dayOfWeek];
if (thisHourMultiplier_Mobile.length === 0) {
thisHourMultiplier_Mobile = -1;
}
if (isNaN(thisHourMultiplier_Mobile) || (thisHourMultiplier_Mobile < -0.9 && thisHourMultiplier_Mobile > -1) || thisHourMultiplier_Mobile > 3) {
Logger.log("Mobile bid modifier '" + thisHourMultiplier_Mobile + "' for " + weekDays[dayOfWeek] + " " + hour + " is not valid.");
thisHourMultiplier_Mobile = 0;
}
var totalMultiplier = ((1+thisHourMultiplier_Mobile)*(1+thisHourMultiplier))-1;
sheet.getRange("I2").setValue(thisHourMultiplier_Mobile);
sheet.getRange("T2").setValue(totalMultiplier);
ModifyMobileBidAdjustment(campaignIds, thisHourMultiplier_Mobile);
}
}
// Check the existing ad schedules, removing those no longer necessary
var existingSchedules = checkAndRemoveAdSchedules(campaignIds, timesAndModifiers);
// Add in the new ad schedules
AddHourlyAdSchedules(campaignIds, timesAndModifiers, existingSchedules, shoppingCampaigns);
}
/**
* Function to add ad schedules for the campaigns with the given IDs, unless the schedules are
* referenced in the existingSchedules array. The scheduling will be added as a hour long periods
* as specified in the passed parameter array and will be given the specified bid modifier.
*
* @param array campaignIds array of campaign IDs to add ad schedules to
* @param array timesAndModifiers the array of [hour, day, bid modifier] for which to add ad scheduling
* @param array existingSchedules array of strings identifying already existing schedules.
* @param bool shoppingCampaigns using shopping campaigns?
* @return void
*/
function AddHourlyAdSchedules(campaignIds, timesAndModifiers, existingSchedules, shoppingCampaigns){
// times = [[hour,day],[hour,day]]
var campaignIterator = ConstructIterator(shoppingCampaigns)
.withIds(campaignIds)
.get();
while(campaignIterator.hasNext()){
var campaign = campaignIterator.next();
for(var i = 0; i < timesAndModifiers.length; i++){
if (existingSchedules.indexOf(
timesAndModifiers[i][0] + "|" + (timesAndModifiers[i][1]) + "|" + timesAndModifiers[i][2]
"|" + Utilities.formatString("%.2f",(timesAndModifiers[i][3]+1)) + "|" + campaign.getId())
> -1) {
continue;
}
campaign.addAdSchedule({
dayOfWeek: timesAndModifiers[i][2],
startHour: timesAndModifiers[i][0],
startMinute: 0,
endHour: timesAndModifiers[i][1],
endMinute: 0,
bidModifier: Math.round(100*(1+timesAndModifiers[i][3]))/100
});
}
}
}
/**
* Function to remove ad schedules from all campaigns referenced in the passed array
* which do not correspond to schedules specified in the passed timesAndModifiers array.
*
* @param array campaignIds array of campaign IDs to remove ad scheduling from
* @param array timesAndModifiers array of [hour, day, bid modifier] of the wanted schedules
* @return array existingWantedSchedules array of strings identifying the existing undeleted schedules
*/
function checkAndRemoveAdSchedules(campaignIds, timesAndModifiers) {
var adScheduleIds = [];
var report = AdWordsApp.report(
'SELECT CampaignId, Id ' +
'FROM CAMPAIGN_AD_SCHEDULE_TARGET_REPORT ' +
'WHERE CampaignId IN ["' + campaignIds.join('","')  + '"]'
);
var rows = report.rows();
while(rows.hasNext()){
var row = rows.next();
var adScheduleId = row['Id'];
var campaignId = row['CampaignId'];
if (adScheduleId == "--") {
continue;
}
adScheduleIds.push([campaignId,adScheduleId]);
}
var chunkedArray = [];
var chunkSize = 10000;
for(var i = 0; i < adScheduleIds.length; i += chunkSize){
chunkedArray.push(adScheduleIds.slice(i, i + chunkSize));
}
var wantedSchedules = [];
var existingWantedSchedules = [];
for (var j=0; j<timesAndModifiers.length; j++) {
wantedSchedules.push(timesAndModifiers[j][0] + "|" + (timesAndModifiers[j][1]) + "|" + timesAndModifiers[j][2] + "|" + Utilities.formatString("%.2f",timesAndModifiers[j][3]+1));
}
for(var i = 0; i < chunkedArray.length; i++){
var unwantedSchedules = [];
var adScheduleIterator = AdWordsApp.targeting()
.adSchedules()
.withIds(chunkedArray[i])
.get();
while (adScheduleIterator.hasNext()) {
var adSchedule = adScheduleIterator.next();
var key = adSchedule.getStartHour() + "|" + adSchedule.getEndHour() + "|" + adSchedule.getDayOfWeek() + "|" + Utilities.formatString("%.2f",adSchedule.getBidModifier());
if (wantedSchedules.indexOf(key) > -1) {
existingWantedSchedules.push(key + "|" + adSchedule.getCampaign().getId());
else {
unwantedSchedules.push(adSchedule);
}
}
for(var j = 0; j < unwantedSchedules.length; j++){
unwantedSchedules[j].remove();
}
}
return existingWantedSchedules;
}
/**
* Function to construct an iterator for shopping campaigns or regular campaigns.
*
* @param bool shoppingCampaigns Using shopping campaigns?
* @return AdWords iterator Returns the corresponding AdWords iterator
*/
function ConstructIterator(shoppingCampaigns){
if(shoppingCampaigns === true){
return AdWordsApp.shoppingCampaigns();
}
else{
return AdWordsApp.campaigns();
}
}
/**
* Function to set a mobile bid modifier for a set of campaigns
*
* @param array campaignIds An array of the campaign IDs to be affected
* @param Float bidModifier The multiplicative mobile bid modifier
* @return void
*/
function ModifyMobileBidAdjustment(campaignIds, bidModifier){
var platformIds = [];
var newBidModifier = Math.round(100*(1+bidModifier))/100;
for(var i = 0; i < campaignIds.length; i++){
platformIds.push([campaignIds[i],30001]);
}
var platformIterator = AdWordsApp.targeting()
.platforms()
.withIds(platformIds)
.get();
while (platformIterator.hasNext()) {
var platform = platformIterator.next();
platform.setBidModifier(newBidModifier);
}
}

 

2. Calcular e Definir Modificador de Lances para Mobile – Pelo Frederick Vallaeys do Optmyzr. Esse script revisa a performance mobile e desktop/tablet do ROAS (Retorno por gasto de anúncio) ou CPC (Custo por clique). Após a revisão, ele analisa os dados das palavras-chave e sugere um modificador de lances para o tráfego mobile dos grupos de anúncios ou campanhas.

 

 

/*********
* Calculate Mobile Bid Adjustments
* Based on the post by Kohki Yamaguchi found here: //goo.gl/iJBCdJ
* Author: Russell Savage
* Date: 2013-08-15
* Verson: v1.1
**********/
// Use this to set the look back window for gathering stats
// You can also use the format YYYYMMDD,YYYYMMDD
var DATE_RANGE = 'LAST_30_DAYS';

// Set to Campaign if you want to calculate at the Campaign level
// Set to AdGroup if you want to calculate at the AdGroup level
var LEVEL = 'AdGroup';
//If you set the LEVEL to AdGroup, the spreadsheet will be mailed to these emails
var TO = ['[email protected]','[email protected]'];

// Set to ROAS to use Return On Ad Spend for the calulcation
// Set to RPC to use Revenue Per Click for the calculation
var METRIC = 'ROAS';

// These will be the min and max values that the mobile bid adjustment could be set to
var MINIMUM_BID_ADJUSTMENT = .5;
var MAXIMUM_BID_ADJUSTMENT = 1;

// Use this to adjust the number of decimal places to keep for calculations
var DECIMAL_PLACES = 3;

function main() {
//Check the options to make sure they are valid
hasValidOptions();

//first, calculate stats for each keyword
var accountMap = getKeywordStats();

//then get the mobileBidAdjustments for the given LEVEL
var mobileBidAdjustments = getMobileBidAdjustments(accountMap);

if(LEVEL === 'Campaign') {
//Apply the calculated modifiers to the campaigns
setCampaignBidModifiers(mobileBidAdjustments);
} else {
//Someday, we'll be able to set the AdGroup modifiers, but until then, here is a spreadsheet
//that you can upload into AdWords Editor
var report = getAdGroupBidModifierReport(mobileBidAdjustments);
sendEmail(report,'adgroup_mobile_modifier_','AdGroup Mobile Modifiers - ','See attached.');
}
}

// This will set the Mobile Bid Modifiers at the Campaign level
function setCampaignBidModifiers(mobileBidAdjustments) {
var campaignIterator = AdWordsApp.campaigns().get();
while(campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
var currentMobileBidAdjustment = campaign.targeting().platforms().mobile().get().next();
if(mobileBidAdjustments[campaign.getId()]) {
Logger.log(campaign.getName() + ' MBA: ' + mobileBidAdjustments[campaign.getId()]);
currentMobileBidAdjustment.setBidModifier(mobileBidAdjustments[campaign.getId()]);
}
}
}

// This function will send an email with the report attached as a
// zipped csv file in case the file is large.
function sendEmail(report,attachmentPrefix,subjectPrefix,body) {
var date_str = Utilities.formatDate(new Date(),AdWordsApp.currentAccount().getTimeZone(),'yyyy-MM-dd');
var blob = Utilities.newBlob(report, 'text/csv', attachmentPrefix+date_str+'.csv')
if(report.length > 1000) {
var zipped_blob = Utilities.zip([blob], attachmentPrefix+date_str+'.zip');
blob = zipped_blob;
}
var options = { attachments: [blob] };
var subject = subjectPrefix + date_str;
for(var i in TO) {
MailApp.sendEmail(TO[i], subject, body, options);
}
}

// This function will build the report for AdGroup Mobile Bid Modifiers
// so that you can upload them into AdWords Editor
function getAdGroupBidModifierReport(accountMap) {
var report = '"' + ['Campaign','Ad Group','Bid Adjustment'].join('","') + '"\n';
var adGroupIterator = AdWordsApp.adGroups().get();
while(adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();
var campaignId = adGroup.getCampaign().getId();
var adGroupId = adGroup.getId();
if(accountMap[campaignId] && accountMap[campaignId][adGroupId]) {
var formattedMba = round((accountMap[campaignId][adGroupId] - 1)*100);
report += '"' + [adGroup.getCampaign().getName(),adGroup.getName(),formattedMba].join('","') + '"\n';
Logger.log([adGroup.getCampaign().getName(),adGroup.getName(),formattedMba].join('", "'));
}
}
return report;
}

function getWeightedRatio(keyword,spendOrClick) {
if(['spend','click'].indexOf(spendOrClick) == -1) {
throw 'getWeightedRatio needs spendOrClick to be equal to spend or click. Current value is: ' + spendOrClick;
}

var total = getTotal(keyword,spendOrClick);
var mobileMetric = 0;
var desktopMetric = 0;

if(!keyword.Mobile) { return 0; }
if(!keyword.DesktopTablet) {
// If we are here, that means there is mobile data, but no desktop data.
// In this case, we want to return a large number to influence this metric more
// We use 3 because the max bid multiplier is 300%
return (3 * total);
}

var metricKey = (METRIC === 'ROAS') ? 'Roas' : 'Rpc';

mobileMetric = keyword.Mobile[metricKey];
desktopMetric = keyword.DesktopTablet[metricKey];

if(mobileMetric == 0) { return 0; }

if(desktopMetric == 0) {
// We use the same reasoning as above
return (3 * total);
}

var weightedRatio = round(mobileMetric/desktopMetric) * total;
return weightedRatio;
}

// Helper function to calculate the total clicks or cost of the keyword
function getTotal(keyword,spendOrClick) {
if(['spend','click'].indexOf(spendOrClick) == -1) {
throw 'getTotal needs spendOrClick to be equal to spend or click. Current value is: ' + spendOrClick;
}

var total = 0;
var metricKey = (spendOrClick === 'spend') ? 'Roas' : 'Rpc';

var mobileMetric = (keyword.Mobile) ? keyword.Mobile[metricKey] : 0;
var desktopMetric = (keyword.DesktopTablet) ? keyword.DesktopTablet[metricKey] : 0;

if(mobileMetric == 0 && desktopMetric == 0) {
//ignore this keyword
return 0;
}

var deviceMetricKey = (spendOrClick === 'spend') ? 'Cost' : 'Clicks';
for(var device in keyword) {
total += keyword[device][deviceMetricKey];
}
return total;
}

// This function sums the results of the click weighted ROAS ratios and calculates
// the final mobile bid adjustment of the campaign.
function getMobileBidAdjustments(entities) {
var mbas = {};
var numerator = 0;
var denominator = 0;

for(var campaignId in entities) {
for(var adGroupId in entities[campaignId]) {
for(var keywordId in entities[campaignId][adGroupId]) {
var keywordData = entities[campaignId][adGroupId][keywordId];
switch(METRIC) {
case 'ROAS' :
numerator += getWeightedRatio(keywordData,'spend');
denominator += getTotal(keywordData,'spend');
break;
case 'RPC' :
numerator += getWeightedRatio(keywordData,'click');
denominator += getTotal(keywordData,'click');
break;
default :
throw 'METRIC needs to be either ROAS, or RPC. Current value is: ' + METRIC;
}
}
if(LEVEL === 'AdGroup') {
Logger.log('Campaign Id: ' + campaignId + ' AdGroupId: ' + adGroupId);
if(!mbas[campaignId]) { mbas[campaignId] = {}; }
mbas[campaignId][adGroupId] = getMba(numerator,denominator);
if(mbas[campaignId][adGroupId] == -1) {
Logger.log('Mobile Bid Adjustment could not be calculated for CampaignId: ' + campaignId + ' and AdGroupId: ' + adGroupId);
delete mbas[campaignId][adGroupId];
}
// Reset the values for the next run
denominator = 0;
numerator = 0;
}
}
if(LEVEL === 'Campaign') {
Logger.log('Campaign Id: ' + campaignId);
mbas[campaignId] = getMba(numerator,denominator);
if(mbas[campaignId] == -1) {
Logger.log('Mobile Bid Adjustment could not be calculated for CampaignId: ' + campaignId);
delete mbas[campaignId];
}
numerator = 0;
denominator = 0;
}
}
return mbas;
}

//This function calculates the Mobile Bid Modifier and trims using MIN and MAX
function getMba(sumOfRatios,total) {
Logger.log('Numerator: ' + sumOfRatios + ' Denominator: ' + total);
var mba = (total != 0) ? round(sumOfRatios/total) : -1;
Logger.log('MBA: ' + (mba==-1) ? 'N/A' : mba + ' (-1 is an error code and the value will be ignored)');
if(mba == -1) {
return mba;
} else {
return (mba < MINIMUM_BID_ADJUSTMENT) ? MINIMUM_BID_ADJUSTMENT :
(mba > MAXIMUM_BID_ADJUSTMENT) ? MAXIMUM_BID_ADJUSTMENT : mba;
}
}

// This function pulls the keyword performance report to get the values needed
// for calculating the ROAS for the keyword.
function getKeywordStats() {
var API_VERSION = { includeZeroImpressions : false };
var query = buildAWQLQuery();
var reportIter = AdWordsApp.report(query, API_VERSION).rows();
var accountMapping = {}; // { campaignId : { adGroupId : { keywordId : { stat : value } } } }
while(reportIter.hasNext()) {
var row = reportIter.next();
//Let's convert all the metrics to floats so we don't have to worry about it later
for(var i in row) {
if(i.indexOf('Id') == -1 && !isNaN(parseFloat(row[i]))) {
row[i] = parseFloat(row[i]);
}
}
var rpc = (row.Clicks != 0) ? round(row.ConversionValue/row.Clicks) : 0;
var roas = (row.AverageCpc != 0) ? round(rpc/row.AverageCpc) : 0;
var cpa = (row.Conversions != 0) ? round(row.Cost/row.Conversions) : 0;
row['Rpc'] = rpc;
row['Roas'] = roas;
row['Cpa'] = cpa;

//Build out the account mapping if needed
if(!accountMapping[row.CampaignId]) {
accountMapping[row.CampaignId] = {};
}
if(!accountMapping[row.CampaignId][row.AdGroupId]) {
accountMapping[row.CampaignId][row.AdGroupId] = {};
}
if(!accountMapping[row.CampaignId][row.AdGroupId][row.Id]) {
accountMapping[row.CampaignId][row.AdGroupId][row.Id] = {};
}
accountMapping[row.CampaignId][row.AdGroupId][row.Id][row.Device.split(' ')[0]] = row;
}
accountMapping = addDesktopTabletEntry(accountMapping);
return accountMapping;
}

// This function will return a valid AWQL query to find keyword performance
function buildAWQLQuery() {
var cols = ['CampaignId','AdGroupId','Id','Device','Clicks','Cost','Conversions','ConversionValue','AverageCpc'];
var report = 'KEYWORDS_PERFORMANCE_REPORT';
return ['select',cols.join(','),'from',report,'during',DATE_RANGE].join(' ');
}

// This function will add an entry into the accountMapping for combining Computers and Tablets
// since the Device targeting is only at that level
function addDesktopTabletEntry(accountMapping) {
for(var campaignId in accountMapping) {
var campaign = accountMapping[campaignId];
for(var adGroupId in campaign) {
var adGroup = campaign[adGroupId];
for(var keywordId in adGroup) {
var devices = adGroup[keywordId];

if(devices.Computers || devices.Tablets) {
accountMapping[campaignId][adGroupId][keywordId]['DesktopTablet'] = combineStats(devices.Computers,devices.Tablets);
}

//Since we combined these, we don't need them anymore
delete accountMapping[campaignId][adGroupId][keywordId]['Computers'];
delete accountMapping[campaignId][adGroupId][keywordId]['Tablets'];
}
}
}
return accountMapping;
}

// This function simply combines the stats of desktop and tablet performance
function combineStats(desktop,tablet) {
if(!desktop) {
desktop = {Cost : 0, Clicks: 0, ConversionValue : 0, Conversions : 0};
}
if(!tablet) {
tablet = {Cost : 0, Clicks: 0, ConversionValue : 0, Conversions : 0};
}
var totalCost = desktop.Cost + tablet.Cost;
var totalClicks = desktop.Clicks + tablet.Clicks;
var totalRevenue = desktop.ConversionValue + tablet.ConversionValue;
var totalConversions = desktop.Conversions + tablet.Conversions;
var averageCpc = (totalClicks != 0) ? round(totalCost/totalClicks) : 0;
var rpc = (totalClicks != 0) ? round(totalRevenue/totalClicks) : 0;
var roas = (averageCpc != 0) ? round(rpc/averageCpc) : 0;
var cpa = (totalConversions != 0) ? round(totalCost/totalConversions) : 0;

return {
Cost : totalCost,
Clicks: totalClicks,
ConversionValue : totalRevenue,
AverageCpc : averageCpc,
Rpc : rpc,
Roas : roas,
Cpa : cpa
};
}

// A helper function to make rounding a little easier
function round(value) {
var decimals = Math.pow(10,DECIMAL_PLACES);
return Math.round(value*decimals)/decimals;
}

// Validate some of the user options just in case
function hasValidOptions() {
var validDates = ['TODAY','YESTERDAY','LAST_7_DAYS','THIS_WEEK_SUN_TODAY',
'THIS_WEEK_MON_TODAY','LAST_WEEK','LAST_14_DAYS',
'LAST_30_DAYS','LAST_BUSINESS_WEEK','LAST_WEEK_SUN_SAT','THIS_MONTH'];
if(DATE_RANGE.indexOf(',') == -1 && validDates.indexOf(DATE_RANGE) == -1) {
throw 'DATE_RANGE is invalid. Current value is: '+DATE_RANGE;
}
if(DECIMAL_PLACES <= 0) {
throw 'You should set DECIMAL_PLACES to be >= 1. You entered: '+DECIMAL_PLACES;
}
if(['Campaign','AdGroup'].indexOf(LEVEL) == -1) {
throw 'LEVEL should be either Campaign or AdGroup. You entered: '+LEVEL;
}
if(['ROAS','RPC'].indexOf(METRIC) == -1) {
throw 'METRIC should be ROAS or RPC. You entered: '+METRIC;
}
if(LEVEL === 'AdGroup' && (!TO || TO.length == 0)) {
throw 'If you set LEVEL to AdGroup, you need to add at least one email.';
}
if(MINIMUM_BID_ADJUSTMENT < 0) {
throw 'MINIMUM_BID_ADJUSTMENT needs to be >= 0. Current value is: '+MINIMUM_BID_ADJUSTMENT;
}
if(MAXIMUM_BID_ADJUSTMENT > 3) {
throw 'MAXIMUM_BID_ADJUSTMENT needs to be <= 3. Current value is: '+MAXIMUM_BID_ADJUSTMENT;
}
}

 

3. Definir e Sugerir Modificador de Lances Mobile – Por Russel Savage. Com esse script você pode ajustar os modificadores de lances para mobile. Tenha maior controle adicionando um ajuste mínimo e um máximo por nível de campanha ou grupo de anúncios.

 

/*********
* Calculate Mobile Bid Adjustments
* Based on the post by Kohki Yamaguchi found here: //goo.gl/iJBCdJ
* Author: Russell Savage
* Date: 2013-08-15
* Verson: v1.1
**********/
// Use this to set the look back window for gathering stats
// You can also use the format YYYYMMDD,YYYYMMDD
var DATE_RANGE = 'LAST_30_DAYS';

// Set to Campaign if you want to calculate at the Campaign level
// Set to AdGroup if you want to calculate at the AdGroup level
var LEVEL = 'AdGroup';
//If you set the LEVEL to AdGroup, the spreadsheet will be mailed to these emails
var TO = ['[email protected]','[email protected]'];

// Set to ROAS to use Return On Ad Spend for the calulcation
// Set to RPC to use Revenue Per Click for the calculation
var METRIC = 'ROAS';

// These will be the min and max values that the mobile bid adjustment could be set to
var MINIMUM_BID_ADJUSTMENT = .5;
var MAXIMUM_BID_ADJUSTMENT = 1;

// Use this to adjust the number of decimal places to keep for calculations
var DECIMAL_PLACES = 3;

function main() {
//Check the options to make sure they are valid
hasValidOptions();

//first, calculate stats for each keyword
var accountMap = getKeywordStats();

//then get the mobileBidAdjustments for the given LEVEL
var mobileBidAdjustments = getMobileBidAdjustments(accountMap);

if(LEVEL === 'Campaign') {
//Apply the calculated modifiers to the campaigns
setCampaignBidModifiers(mobileBidAdjustments);
} else {
//Someday, we'll be able to set the AdGroup modifiers, but until then, here is a spreadsheet
//that you can upload into AdWords Editor
var report = getAdGroupBidModifierReport(mobileBidAdjustments);
sendEmail(report,'adgroup_mobile_modifier_','AdGroup Mobile Modifiers - ','See attached.');
}
}

// This will set the Mobile Bid Modifiers at the Campaign level
function setCampaignBidModifiers(mobileBidAdjustments) {
var campaignIterator = AdWordsApp.campaigns().get();
while(campaignIterator.hasNext()) {
var campaign = campaignIterator.next();
var currentMobileBidAdjustment = campaign.targeting().platforms().mobile().get().next();
if(mobileBidAdjustments[campaign.getId()]) {
Logger.log(campaign.getName() + ' MBA: ' + mobileBidAdjustments[campaign.getId()]);
currentMobileBidAdjustment.setBidModifier(mobileBidAdjustments[campaign.getId()]);
}
}
}

// This function will send an email with the report attached as a
// zipped csv file in case the file is large.
function sendEmail(report,attachmentPrefix,subjectPrefix,body) {
var date_str = Utilities.formatDate(new Date(),AdWordsApp.currentAccount().getTimeZone(),'yyyy-MM-dd');
var blob = Utilities.newBlob(report, 'text/csv', attachmentPrefix+date_str+'.csv')
if(report.length > 1000) {
var zipped_blob = Utilities.zip([blob], attachmentPrefix+date_str+'.zip');
blob = zipped_blob;
}
var options = { attachments: [blob] };
var subject = subjectPrefix + date_str;
for(var i in TO) {
MailApp.sendEmail(TO[i], subject, body, options);
}
}

// This function will build the report for AdGroup Mobile Bid Modifiers
// so that you can upload them into AdWords Editor
function getAdGroupBidModifierReport(accountMap) {
var report = '"' + ['Campaign','Ad Group','Bid Adjustment'].join('","') + '"\n';
var adGroupIterator = AdWordsApp.adGroups().get();
while(adGroupIterator.hasNext()) {
var adGroup = adGroupIterator.next();
var campaignId = adGroup.getCampaign().getId();
var adGroupId = adGroup.getId();
if(accountMap[campaignId] && accountMap[campaignId][adGroupId]) {
var formattedMba = round((accountMap[campaignId][adGroupId] - 1)*100);
report += '"' + [adGroup.getCampaign().getName(),adGroup.getName(),formattedMba].join('","') + '"\n';
Logger.log([adGroup.getCampaign().getName(),adGroup.getName(),formattedMba].join('", "'));
}
}
return report;
}

function getWeightedRatio(keyword,spendOrClick) {
if(['spend','click'].indexOf(spendOrClick) == -1) {
throw 'getWeightedRatio needs spendOrClick to be equal to spend or click. Current value is: ' + spendOrClick;
}

var total = getTotal(keyword,spendOrClick);
var mobileMetric = 0;
var desktopMetric = 0;

if(!keyword.Mobile) { return 0; }
if(!keyword.DesktopTablet) {
// If we are here, that means there is mobile data, but no desktop data.
// In this case, we want to return a large number to influence this metric more
// We use 3 because the max bid multiplier is 300%
return (3 * total);
}

var metricKey = (METRIC === 'ROAS') ? 'Roas' : 'Rpc';

mobileMetric = keyword.Mobile[metricKey];
desktopMetric = keyword.DesktopTablet[metricKey];

if(mobileMetric == 0) { return 0; }

if(desktopMetric == 0) {
// We use the same reasoning as above
return (3 * total);
}

var weightedRatio = round(mobileMetric/desktopMetric) * total;
return weightedRatio;
}

// Helper function to calculate the total clicks or cost of the keyword
function getTotal(keyword,spendOrClick) {
if(['spend','click'].indexOf(spendOrClick) == -1) {
throw 'getTotal needs spendOrClick to be equal to spend or click. Current value is: ' + spendOrClick;
}

var total = 0;
var metricKey = (spendOrClick === 'spend') ? 'Roas' : 'Rpc';

var mobileMetric = (keyword.Mobile) ? keyword.Mobile[metricKey] : 0;
var desktopMetric = (keyword.DesktopTablet) ? keyword.DesktopTablet[metricKey] : 0;

if(mobileMetric == 0 && desktopMetric == 0) {
//ignore this keyword
return 0;
}

var deviceMetricKey = (spendOrClick === 'spend') ? 'Cost' : 'Clicks';
for(var device in keyword) {
total += keyword[device][deviceMetricKey];
}
return total;
}

// This function sums the results of the click weighted ROAS ratios and calculates
// the final mobile bid adjustment of the campaign.
function getMobileBidAdjustments(entities) {
var mbas = {};
var numerator = 0;
var denominator = 0;

for(var campaignId in entities) {
for(var adGroupId in entities[campaignId]) {
for(var keywordId in entities[campaignId][adGroupId]) {
var keywordData = entities[campaignId][adGroupId][keywordId];
switch(METRIC) {
case 'ROAS' :
numerator += getWeightedRatio(keywordData,'spend');
denominator += getTotal(keywordData,'spend');
break;
case 'RPC' :
numerator += getWeightedRatio(keywordData,'click');
denominator += getTotal(keywordData,'click');
break;
default :
throw 'METRIC needs to be either ROAS, or RPC. Current value is: ' + METRIC;
}
}
if(LEVEL === 'AdGroup') {
Logger.log('Campaign Id: ' + campaignId + ' AdGroupId: ' + adGroupId);
if(!mbas[campaignId]) { mbas[campaignId] = {}; }
mbas[campaignId][adGroupId] = getMba(numerator,denominator);
if(mbas[campaignId][adGroupId] == -1) {
Logger.log('Mobile Bid Adjustment could not be calculated for CampaignId: ' + campaignId + ' and AdGroupId: ' + adGroupId);
delete mbas[campaignId][adGroupId];
}
// Reset the values for the next run
denominator = 0;
numerator = 0;
}
}
if(LEVEL === 'Campaign') {
Logger.log('Campaign Id: ' + campaignId);
mbas[campaignId] = getMba(numerator,denominator);
if(mbas[campaignId] == -1) {
Logger.log('Mobile Bid Adjustment could not be calculated for CampaignId: ' + campaignId);
delete mbas[campaignId];
}
numerator = 0;
denominator = 0;
}
}
return mbas;
}

//This function calculates the Mobile Bid Modifier and trims using MIN and MAX
function getMba(sumOfRatios,total) {
Logger.log('Numerator: ' + sumOfRatios + ' Denominator: ' + total);
var mba = (total != 0) ? round(sumOfRatios/total) : -1;
Logger.log('MBA: ' + (mba==-1) ? 'N/A' : mba + ' (-1 is an error code and the value will be ignored)');
if(mba == -1) {
return mba;
} else {
return (mba < MINIMUM_BID_ADJUSTMENT) ? MINIMUM_BID_ADJUSTMENT :
(mba > MAXIMUM_BID_ADJUSTMENT) ? MAXIMUM_BID_ADJUSTMENT : mba;
}
}

// This function pulls the keyword performance report to get the values needed
// for calculating the ROAS for the keyword.
function getKeywordStats() {
var API_VERSION = { includeZeroImpressions : false };
var query = buildAWQLQuery();
var reportIter = AdWordsApp.report(query, API_VERSION).rows();
var accountMapping = {}; // { campaignId : { adGroupId : { keywordId : { stat : value } } } }
while(reportIter.hasNext()) {
var row = reportIter.next();
//Let's convert all the metrics to floats so we don't have to worry about it later
for(var i in row) {
if(i.indexOf('Id') == -1 && !isNaN(parseFloat(row[i]))) {
row[i] = parseFloat(row[i]);
}
}
var rpc = (row.Clicks != 0) ? round(row.ConversionValue/row.Clicks) : 0;
var roas = (row.AverageCpc != 0) ? round(rpc/row.AverageCpc) : 0;
var cpa = (row.Conversions != 0) ? round(row.Cost/row.Conversions) : 0;
row['Rpc'] = rpc;
row['Roas'] = roas;
row['Cpa'] = cpa;

//Build out the account mapping if needed
if(!accountMapping[row.CampaignId]) {
accountMapping[row.CampaignId] = {};
}
if(!accountMapping[row.CampaignId][row.AdGroupId]) {
accountMapping[row.CampaignId][row.AdGroupId] = {};
}
if(!accountMapping[row.CampaignId][row.AdGroupId][row.Id]) {
accountMapping[row.CampaignId][row.AdGroupId][row.Id] = {};
}
accountMapping[row.CampaignId][row.AdGroupId][row.Id][row.Device.split(' ')[0]] = row;
}
accountMapping = addDesktopTabletEntry(accountMapping);
return accountMapping;
}

// This function will return a valid AWQL query to find keyword performance
function buildAWQLQuery() {
var cols = ['CampaignId','AdGroupId','Id','Device','Clicks','Cost','Conversions','ConversionValue','AverageCpc'];
var report = 'KEYWORDS_PERFORMANCE_REPORT';
return ['select',cols.join(','),'from',report,'during',DATE_RANGE].join(' ');
}

// This function will add an entry into the accountMapping for combining Computers and Tablets
// since the Device targeting is only at that level
function addDesktopTabletEntry(accountMapping) {
for(var campaignId in accountMapping) {
var campaign = accountMapping[campaignId];
for(var adGroupId in campaign) {
var adGroup = campaign[adGroupId];
for(var keywordId in adGroup) {
var devices = adGroup[keywordId];

if(devices.Computers || devices.Tablets) {
accountMapping[campaignId][adGroupId][keywordId]['DesktopTablet'] = combineStats(devices.Computers,devices.Tablets);
}

//Since we combined these, we don't need them anymore
delete accountMapping[campaignId][adGroupId][keywordId]['Computers'];
delete accountMapping[campaignId][adGroupId][keywordId]['Tablets'];
}
}
}
return accountMapping;
}

// This function simply combines the stats of desktop and tablet performance
function combineStats(desktop,tablet) {
if(!desktop) {
desktop = {Cost : 0, Clicks: 0, ConversionValue : 0, Conversions : 0};
}
if(!tablet) {
tablet = {Cost : 0, Clicks: 0, ConversionValue : 0, Conversions : 0};
}
var totalCost = desktop.Cost + tablet.Cost;
var totalClicks = desktop.Clicks + tablet.Clicks;
var totalRevenue = desktop.ConversionValue + tablet.ConversionValue;
var totalConversions = desktop.Conversions + tablet.Conversions;
var averageCpc = (totalClicks != 0) ? round(totalCost/totalClicks) : 0;
var rpc = (totalClicks != 0) ? round(totalRevenue/totalClicks) : 0;
var roas = (averageCpc != 0) ? round(rpc/averageCpc) : 0;
var cpa = (totalConversions != 0) ? round(totalCost/totalConversions) : 0;

return {
Cost : totalCost,
Clicks: totalClicks,
ConversionValue : totalRevenue,
AverageCpc : averageCpc,
Rpc : rpc,
Roas : roas,
Cpa : cpa
};
}

// A helper function to make rounding a little easier
function round(value) {
var decimals = Math.pow(10,DECIMAL_PLACES);
return Math.round(value*decimals)/decimals;
}

// Validate some of the user options just in case
function hasValidOptions() {
var validDates = ['TODAY','YESTERDAY','LAST_7_DAYS','THIS_WEEK_SUN_TODAY',
'THIS_WEEK_MON_TODAY','LAST_WEEK','LAST_14_DAYS',
'LAST_30_DAYS','LAST_BUSINESS_WEEK','LAST_WEEK_SUN_SAT','THIS_MONTH'];
if(DATE_RANGE.indexOf(',') == -1 && validDates.indexOf(DATE_RANGE) == -1) {
throw 'DATE_RANGE is invalid. Current value is: '+DATE_RANGE;
}
if(DECIMAL_PLACES <= 0) {
throw 'You should set DECIMAL_PLACES to be >= 1. You entered: '+DECIMAL_PLACES;
}
if(['Campaign','AdGroup'].indexOf(LEVEL) == -1) {
throw 'LEVEL should be either Campaign or AdGroup. You entered: '+LEVEL;
}
if(['ROAS','RPC'].indexOf(METRIC) == -1) {
throw 'METRIC should be ROAS or RPC. You entered: '+METRIC;
}
if(LEVEL === 'AdGroup' && (!TO || TO.length == 0)) {
throw 'If you set LEVEL to AdGroup, you need to add at least one email.';
}
if(MINIMUM_BID_ADJUSTMENT < 0) {
throw 'MINIMUM_BID_ADJUSTMENT needs to be >= 0. Current value is: '+MINIMUM_BID_ADJUSTMENT;
}
if(MAXIMUM_BID_ADJUSTMENT > 3) {
throw 'MAXIMUM_BID_ADJUSTMENT needs to be <= 3. Current value is: '+MAXIMUM_BID_ADJUSTMENT;
}
}

Meta Descriptions no SEO são realmente necessários thumb

Meta Descriptions no SEO são realmente necessários?

rotadesk No Comments

A promoção da maioria dos serviços, produtos e informações estão vinculados à internet. Fazer com que seu site, blog ou loja online tenha maior visibilidade é a garantia de seu sucesso. Para quem trabalha com a internet, já deve ter algum conhecimento da técnica SEO, mas você sabe se as Meta Descriptions no SEO são realmente necessários para o sucesso de sua postagem?

Demoramos determinado tempo para transformar o texto das postagens para uma configuração da metodologia SEO.

Muitas vezes nos perguntamos se as Meta Descriptions são realmente eficientes na otimização do mecanismo de busca, se sua escrita é necessária em todos os posts.

Entenda mais sobre o método SEO e descubra quando as Meta Descriptions no SEO são realmente necessárias na estrutura do texto.

Entenda o método SEO

Metodologia SEO

SEO (Search Engine Optimization) é um conjunto de métodos e técnicas que têm como objetivo otimizar o mecanismo de busca.

Ele melhora o posicionamento das postagens do seu site a partir das palavras-chave que o usuário digita na ferramente de pesquisa da internet. Ou seja, a SEO faz que sua página apareça nos primeiros resultados. (Confira nosso post sobre os fatores de ranqueamentos de SEO 2018).

Quando você faz uma pesquisa no Google, acaba clicando no primeiro site que aparece, não? Entende como a posição do site na lista de busca é extremamente ligado com a quantidade de visitas que ele irá receber?

Ultimamente é comum confundir os resultados pela busca de páginas com os anúncios de produtos que aparecem em primeiro lugar.

Esses anúncios são links patrocinados e, por isso, aparecem em primeiro lugar quando digitamos algo como “sofá” na ferramenta de busca.

Títulos da página, Meta Descriptions, palavras-chave, Domínio, URL do arquivo e links externos são alguns dos itens mais comuns utilizados na técnica SEO.

Além disso, a estrutura do texto também é estipulada, como número de parágrafos, quantidade total de palavras e em cada parágrafo, etc.

As Meta Descriptions são uma espécie de chamada enfática que resume o artigo a ser apresentado.

Ela deve ser única, criativa e seu conteúdo deve relacionado ao conteúdo da página acessada.

Razões para você não querer escrever as Meta Descriptions

Há quem diga que as Meta Descriptions no SEO não são realmente necessárias e explicam seus argumentos para a ideia.

O primeiro deles é que o Google está mudando constantemente a maneira como apresenta os resultados da pesquisa.

Por exemplo, a empresa mudou o limite dos caracteres de 150 a 165 para 260-275 caracteres sem o menor aviso prévio. Com isso, as publicações feitas no antigo modelo foram prejudicas no mecanismo de busca.

Dentro de 6 meses, a empresa Google retornou ao antigo modelo de limite de caracteres.

Ou seja, se os textos não apresentassem as Meta Descriptions, os sites que escreveram com os limites inadequados não seriam afetados.

Outro fator é que todas as organizações têm recursos limitados. O Google recomenda que todas as páginas contenham a Meta Descriptions, mas também afirma que o uso da tag é de leve influência.

O Google geralmente escreve seu próprio snippet de descrição mesmo que você se dê ao trabalho de criar a Meta Descriptions.

De acordo com um estudo realizado pela Yoast, a empresa usa as palavras do primeiro parágrafo, e não da descrição, para criar o snippet. Ou seja, é melhor se dedicar a primeiro parágrafo invés de fazer a descrição.

Outra coisa extremamente relevante é que nem todas as páginas são importantes para SEO. Há sites com milhões de páginas e mesmo assim não geram um trágefo significativo de pesquisa. As Meta Descriptions não possuem potencial suficiente para que as palavras-chave sejam realmente efetivas.

O conselho é diferenciar as postagens que precisam ou não da descrição e utilize-as apenas quando necessário.

Quando é aconselhável acrescentar uma Meta Descriptions

Acrescentar Meta DescriptionsDefendendo o outro lado da moeda, apresentaremos a você em quais situações as Meta Descriptions no SEO fazem diferença no alcance da postagem. A Página inicial é a parte mais chamativa do seu site. Dedicar-se a criar uma boa descrição faz, sim, diferença.

Essa necessidade aumenta quando a página inicial não possui muito texto ou informações, apenas conexões para outros links.

Se seu site é comercial, por exemplo, a Meta Descriptions pode ser a chamada atrativa que o cliente precisa para se sentir interessado.

As páginas de produtos e categorias também merecem mais atenção na descrição, já que elas são essenciais para o sucesso das vendas.

As Meta Descriptions podem ser realizadas apenas no conteúdo que está sendo visto no Google. Ou seja, se apenas 10% das suas postagens estão gerando tráfego de pesquisa, se concentre na descrição apenas desses posts.

Também é válido investir quando o objetivo é melhorar as descrições de páginas com um volume de impressões significativo. São as páginas encontradas em “pesquisas naturais” mas que não possuem conteúdo.

Como exemplo são os sites que exibem vídeos, testes, jogos e coisas do gênero. O objetivo deles não é discursar sobre uma ideia, então a quantidade de texto é mínima. Nessa situação, as Meta Descriptions fazem a diferença.

Saber quando ignorar alertas, práticas recomendadas e diretrizes

No mundo ideal dos profissionais que trabalham com a metodologia SEO, todos os textos, independentemente do assunto ou de sua função, deveriam conter as Meta Descriptions na estrutura do texto.

Porém, sabemos que no mundo real isso não acontece. Sabemos que criar as descrições é algo trabalhoso e que demanda muito tempo, normalmente há muitos textos a serem produzidos.

Além disso, há também o tempo que se perde alterando as Meta Descriptions para melhorar o desempenho da matéria.

Muitas vezes as descrições não resultaram em resultados extremamente diferenciados nas pesquisas, e sua colocação não é relevante.

E quando você está realizando uma postagem desse tipo, talvez, incentivar o próprio Google a criar snippets valha mais a pena. A promoção não será afetada e ainda há economia de tempo.

Antes de elaborar um texto com a técnica SEO, analise se a Meta Descriptions no SEO será realmente necessária e se ela, de fato, irá afetar o mecanismo de pesquisa e dará preferência ao seu site!

Qual canal de marketing digital vale mais a pena capa

Busca orgânica, Links Patrocinados, Redes Sociais, o que vale mais a pena?

rotadesk No Comments

Google orgânico, Google Ads, Facebook, o que vale mais a pena

Quais canais de marketing digital têm maior ROI?

Todo negócio busca trazer a maior rentabilidade para seus investimentos, e no mercado digital, há diversos canais disponíveis para dar maior visibilidade para sua empresa, links patrocinados, redes sociais, sites de buscas, e-mail marketing, etc…

Buscando entender qual é o canal de marketing digital que traz o maior retorno, o Search Engine Journal realizou uma pesquisa com sua audiência no Twitter perguntando qual é o canal de marketing digital que traz maior retorno para seus negócios.

Eles utilizaram 4 canais de marketing online para essa pesquisa, a busca orgânica, que visam a otimização dos sites para os mecanismos de buscas (SEO), links patrocinados que são anúncios pelas plataformas como Google, Bing e Yahoo! Ads, Mídias Sociais como por exemplo as redes sociais do Facebook, Instagram, Twitter, Google+ e por fim o marketing por e-mail.

Se você está considerando investir em canais de marketing digital, confira o resultado dessa pesquisa.

Qual canal de marketing digital tem maior retorno para seu site?

A pesquisa realizada no Twitter da SEJ obteve 388 votos e os resultados foram os seguintes:

  • Com 49% dos votos, o canal que trouxe maior retornos para seus usuários foi a busca orgânica.
  • Os links patrocinados tiveram 19% dos votos, ficando em segundo lugar, abaixo do orgânico.
  • O terceiro lugar ficou para as mídias sociais (Facebook, Instagram, Twitter, etc.) com 18% dos votos.
  • O marketing por e-mail foi o canal menos respondido com 14% dos votos.

Gráfico pesquisa

Vale ressaltar que os resultados variam da particularidade de cada negócio, ao analisar qual canal investir, há uma série de fatores que devem ser levados em conta, propósito da publicidade, público, modelo de negócio etc. E portanto, apesar do orgânico apresentar o melhor resultado para maioria dos usuários o ideal é realizar uma análise do setor e verificar qual canal focar para seus objetivos.  Vale a pena também considerar a diversificação dos canais, para não depender de apenas uma fonte de tráfego.

Procurar conteúdo