;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Logo Pagbenk Seu dinheiro rende mais
Topo

João Branco

OPINIÃO

Texto em que o autor apresenta e defende suas ideias e opiniões, a partir da interpretação de fatos e dados.

Como parar de queimar dinheiro com publicidade

Colunista do UOL

08/12/2021 04h00

Você acaba de receber uma missão muito importante: precisa comprar uma bolsa de presente para uma mulher que você não conhece. E seu objetivo é garantir que ela vai gostar muito. Você não sabe o nome dela, nem onde ela mora, como vai usar esse ório e muito menos o seu estilo. Mas tem um orçamento de R$ 50 mil para deixá-la com um largo sorriso no rosto. O que você faz?

Sempre que pergunto isso, a maioria das pessoas responde algo parecido: "eu compraria uma bolsa chiquérrima de uma dessas grifes mais famosas do mundo". Talvez você tenha pensado isso também, certo? Essa é uma resposta razoável. Ela mistura o nosso "vasto" conhecimento sobre moda com uma forte premissa de que "todo mundo gosta dessas bolsas de luxo" somado a um sentimento de "estou dentro do orçamento que me foi dado" e arrematado por uma bela dose de preguiça de pensar em uma solução melhor. É a solução mais fácil. Mas será que ela é a melhor?

Vou te contar um segredo: eu conheço a mulher para quem você vai dar a bolsa. Como a maioria, ela também vai ficar feliz em receber esse presente valioso. Mas ela é uma pessoa que tem gostos peculiares e a verdade é que ficaria ainda mais feliz se ganhasse um bolsa feita a mão, que é vendida por R$ 50 na feirinha da praia. E você acabou de saber que desperdiçou um orçamento gigante. Por uma única razão: você não conhecia direito a bendita da pessoa que estava tentando satisfazer.

Consegue perceber alguma similaridade com o seu negócio?

Todos os dias desperdiçamos recursos aos montes. Oferecemos descontos para quem não precisava. Anunciamos produtos para quem não quer comprá-los. Lançamos novidades que não eram exatamente as que os clientes esperavam. Tudo isso porque não os conhecemos com profundidade.

Mas esses dias estão contados. Por trás dos algoritmos, robozinhos mensageiros, telas e câmeras existe um pote de ouro. Um tesouro que se a toda vez que conseguimos falar a coisa certa para a pessoa certa na hora certa, da forma certa. Uma mágica que acontece toda vez que anunciamos uma viagem para o destino dos sonhos de um cliente, por um preço que cabe no seu bolso, justamente quando ele está planejando as férias. Ou quando oferecemos Big Mac para quem está com fome numa sexta-feira.

Perceba: eu não descrevi os clientes pela sua altura, peso, idade, estado civil ou bairro onde vivem. Eu falei de interesses e necessidades - a informação mais valiosa que você pode ter sobre eles.

Cada vez que um consumidor curte um post da sua marca, clica em um link de um e-mail marketing, abre o app, seleciona uma opção no atendimento do SAC ou coloca algo no "carrinho" do site, ele está te revelando as suas preferências. Antes sabíamos apenas o que os clientes compravam. Agora sabemos o que eles fizeram antes de comprar, como decidiram e como se comportaram depois. Todos esses dados te ajudam a segmentar seu público e fazer planos específicos para satisfazer cada grupo ou cada um deles de maneira muito eficiente.

Para que você está usando tecnologia? Como profissional de Marketing, quero lhe deixar aqui um incentivo a usar, também, para conhecer mais os seus clientes. E para economizar R$ 49.950 na próxima vez que precisar comprar uma "bolsa" de presente para eles. Chega de queimar dinheiro!

queimar - Felipe Tomazelli - Felipe Tomazelli
Imagem: Felipe Tomazelli