Meu Decorado no GA4 da incorporadora
Arquiteto de Bolso, design de vida

Configuração · Incorporadoras e construtoras

Meu Decorado no GA4 da incorporadora

Cinco etapas, no Gerenciador de Tags, no GA4 e no seu CRM, cerca de 40 minutos. Ao final, os passos que a pessoa dá dentro do Meu Decorado viram eventos no seu GA4, e cada lead do seu CRM pode ser ligado a quem passou pelo decorado.

Antes de começar

Mande a lista dos seus endereços de produção para a gente e espere a confirmação. Sem o cadastro do nosso lado, o Meu Decorado não envia nada para o seu site, e nenhum dos dois lados vê erro: você configura tudo, testa, e não chega evento nenhum.

Mande cada endereço por extenso, com https://, nas duas formas: com www e sem. Para o navegador são endereços diferentes, e só o que está na lista recebe. Vale para cada subdomínio. Se o site mudar de plataforma, mande a lista de novo.

A conferência é no site de produção, em modo de visualização, que não afeta quem navega. Testar em homologação é liberação à parte: fale com a gente antes.

O que você precisa ter

  • Acesso de editor ao container do Gerenciador de Tags
  • Acesso de editor às propriedades do GA4 envolvidas
  • Saber quantos domínios, containers e propriedades existem
  • Saber qual é o seu banner de cookies ou Consent Mode

Prefere que a gente configure?

Dê acesso de editor no Gerenciador de Tags e no GA4. Nós configuramos e testamos, e a publicação continua com você: acesso de editor não publica.

Passo a passo

  1. Tag dos passos do funil

    Nova tag de HTML personalizado, gatilho Inicialização, todas as páginas, com consentimento nenhum adicional, que é o rótulo do campo no Gerenciador de Tags. Ela só repassa evento, não grava nada.

    Cole este conteúdo

    <script>
    (function () {
      // Se o container for carregado duas vezes, ou a tag ganhar um segundo
      // acionador, cada mensagem viraria DOIS eventos no GA4, em silêncio.
      if (window.__mdPassos) return;
      window.__mdPassos = 1;
    
      var ORIGEM_UPIK = "https://realestate.arquitetodebolso.com.br";
    
      window.addEventListener("message", function (e) {
        if (e.origin !== ORIGEM_UPIK) return;
    
        var d = e.data;
        if (!d || d.type !== "upik:jornada" || d.v !== 1) return;
        if (typeof d.passo !== "string") return;
    
        // `md_escolha` viaja SEMPRE, vazia quando o passo não registra escolha.
        // O dataLayer funde cada mensagem no modelo de onde as variáveis leem, então
        // chave omitida não limpa nada: ela preserva o valor anterior. Sem esta
        // linha, a escolha de um passo apareceria colada no passo seguinte, e a
        // dimensão do GA4 sairia errada justamente no passo de conversão.
        window.dataLayer = window.dataLayer || [];
        window.dataLayer.push({
          event: "meu_decorado_" + d.passo,
          md_passo: d.passo,
          md_escolha: typeof d.escolha === "string" ? d.escolha : ""
        });
      });
    })();
    </script>

    Confira: no modo de visualização, no site de produção, navegue pelo embed. Os eventos meu_decorado_* aparecem no dataLayer. Eles ainda não vão para o GA4, isso é a Etapa 4.

  2. Tag do identificador

    Segunda tag de HTML personalizado, mesmo gatilho. Grava o identificador que liga o lead do seu CRM ao uso do decorado. Se você não capta leads, pule para a Etapa 4.

    Preencha abaixo e o código se ajusta sozinho, pronto para copiar.

    Define quando o identificador pode ser gravado. Sem esta escolha, o código sai com a regra fechada e nenhum cookie é gravado.

    Deixe em branco se o decorado e o formulário estão no mesmo endereço. Valor errado faz o navegador recusar o cookie sem avisar, e aí nenhum lead se liga ao decorado.

    O que você preencher fica salvo neste navegador, para não se perder ao voltar. Se for configurar outro site, limpe antes.

    Já está com os seus dados. Copie o conteúdo inteiro

    <script>
    (function () {
      if (window.__mdAbclid) return; // não registra o listener duas vezes
      var ORIGEM_UPIK = "https://realestate.arquitetodebolso.com.br";
      var NOVENTA_DIAS = 60 * 60 * 24 * 90;
      // Preenchido pelo formulário acima. Fica vazio quando o decorado e o
      // formulário de contato estão no mesmo endereço.
      var DOMINIO = '';
    
      // Preenchida pelo formulário acima: true só se a pessoa aceitou analytics
      // AGORA. Fechada por padrão, para nada ser gravado sem consentimento.
      function consentiu() {
        try {
          return false;
        } catch (e) {
          return false; // storage bloqueado conta como "não consentiu"
        }
      }
    
      var md = (window.__mdAbclid = { ultimo: null });
    
      // Duas formas válidas: 32 hexadecimais, e uma forma curta em base 36 quando o
      // navegador não tem gerador seguro. Recusar a segunda perderia leads legítimos.
      var FORMATO = /^abc_[A-Za-z0-9]{8,64}$/;
      // A âncora final evita truncar um valor mais longo e aceitá-lo como válido.
      var LEITOR = /(?:^|;\s*)abclid=(abc_[A-Za-z0-9]{8,64})(?:;|$)/;
    
      function lerCookie() {
        var m = document.cookie.match(LEITOR);
        return m ? m[1] : "";
      }
    
      function gravarCookie(valor, validade) {
        // `Secure` só em https: em homologação servida por http o navegador
        // recusaria o cookie sem avisar, e os testes falhariam sem motivo aparente.
        document.cookie = "abclid=" + valor + ";path=/;max-age=" + validade +
          (DOMINIO ? ";domain=" + DOMINIO : "") +
          ";SameSite=Lax" + (location.protocol === "https:" ? ";Secure" : "");
      }
    
      // Apaga nas DUAS formas, com e sem `domain`: o cookie só é removido pelo par
      // (domínio, caminho) com que foi gravado. Se o domínio mudou depois da
      // instalação, apagar só um deixaria o outro ressuscitar o identificador.
      function apagarCookie() {
        document.cookie = "abclid=;path=/;max-age=0;SameSite=Lax";
        if (DOMINIO) {
          document.cookie = "abclid=;path=/;max-age=0;domain=" + DOMINIO + ";SameSite=Lax";
        }
      }
    
      var renovado = false;
    
      md.gravar = function () {
        if (!md.ultimo || !consentiu()) return;
        var noCookie = lerCookie();
        // O cookie já gravado MANDA. Com o armazenamento do decorado isolado
        // (Safari, aba anônima) ele manda um identificador novo a cada carga, e
        // sobrescrever trocaria a identidade de 90 dias no meio da visita.
        if (noCookie && noCookie !== md.ultimo) return;
        // Renova a validade uma vez por página. Sem isto, quem volta sempre antes
        // dos 90 dias veria a identidade expirar mesmo visitando toda semana.
        if (renovado && noCookie === md.ultimo) return;
        gravarCookie(md.ultimo, NOVENTA_DIAS);
        renovado = true;
      };
    
      // O consentimento é checado ANTES do cookie: quem aceitou numa visita anterior
      // e depois revogou tem o cookie ainda gravado, e ele não pode continuar valendo.
      md.atual = function () {
        if (!consentiu()) {
          md.ultimo = null;
          if (lerCookie()) apagarCookie();
          return "";
        }
        // O cookie tem precedência: é a identidade de 90 dias.
        return lerCookie() || md.ultimo || "";
      };
    
      window.addEventListener("message", function (e) {
        if (e.origin !== ORIGEM_UPIK) return;
        var d = e.data;
        if (!d || d.type !== "upik:jornada" || d.v !== 1) return;
        if (typeof d.abclid !== "string" || !FORMATO.test(d.abclid)) return;
        md.ultimo = d.abclid; // só em memória: nada é gravado sem consentimento
        md.gravar();
      });
    
      // Rede de segurança para o aceite que chega DEPOIS da última mensagem do
      // decorado: sem isto, quem usa o decorado e só então aceita fica com o
      // identificador em memória e nunca no cookie. Três minutos do carregamento.
      var vigia = setInterval(function () {
        if (!md.ultimo || !consentiu()) return;
        clearInterval(vigia);
        md.gravar();
      }, 1000);
      setTimeout(function () { clearInterval(vigia); }, 180000);
    })();
    </script>

    Confira os cinco cenários, em modo de visualização, usando o decorado em cada um:

    • Consentimento rejeitado, cookie abclid ausente
    • Consentimento aceito antes e página recarregada, cookie presente
    • Aceitar o banner e usar o decorado sem recarregar, cookie presente
    • Sem interação com o banner, depende da regra do seu site
    • Revogar depois de ter aceitado e chamar window.__mdAbclid.atual(): ele devolve vazio, e é essa chamada que apaga o cookie. Confira o cookie depois dela, não antes, senão ele ainda está lá
  3. Identificador no formulário e no CRM

    Só para quem capta leads. Crie um campo abclid no formulário de contato e no CRM, e preencha com o valor de window.__mdAbclid.atual().

    Rota A, você cria o campo

    Você adiciona o campo oculto no formulário, e nós mandamos o trecho que preenche o valor.

    Rota B, nós injetamos

    Com acesso de editor, injetamos o campo pelo Gerenciador de Tags. Você só cria e mapeia o campo no CRM.

    Se o seu grupo também usa o Meu Decorado no formato de imobiliária, avise a gente: os dois formatos pedem um campo de mesmo nome e precisam ser separados.

    Leia o valor no envio, não no carregamento. O identificador só existe depois que a pessoa usa o decorado: preencher no carregamento entrega campo vazio em todo lead, sem erro. Atualize no clique do botão de envio, em fase de captura.

    Não leia o identificador da URL. Ele não viaja no endereço: o valor vem do cookie que a tag grava.

    Confira: envie um lead de teste, depois de aceitar os cookies e usar o decorado, e veja o valor chegar no CRM. O lead que entregamos a você traz o mesmo abclid: é assim que o cruzamento acontece, no CRM, não no GA4.

  4. Levar os eventos ao GA4

    • Variáveis da camada de dados, uma lendo md_passo e outra lendo md_escolha
    • Gatilho de evento personalizado, nome ^meu_decorado_, com correspondência de expressão regular marcada
    • Tag de evento do GA4, herdando dinamicamente o nome do evento, com dois parâmetros. Os parâmetros precisam se chamar exatamente md_passo e md_escolha, mesmo que as suas variáveis tenham outro nome no container
    • Dimensões personalizadas em cada propriedade GA4, escopo de Evento, uma lendo o parâmetro md_passo e outra lendo md_escolha

    Crie as dimensões agora, não depois. O GA4 só detalha passo e escolha a partir do dia em que a dimensão existe. O que chegou antes fica sem detalhe para sempre.

    O nome do parâmetro é o que liga a tag à dimensão. Se a tag enviar passo e a dimensão esperar md_passo, os eventos aparecem em Tempo real, a conferência passa, e a dimensão fica em (not set) para sempre.

    Não inclua o abclid como parâmetro da tag do GA4. Ele é único por visitante e viraria (other) no relatório.

    Com mais de uma propriedade GA4: use uma variável de Tabela de pesquisa, com a regra que o seu container já usa, e sempre com valor padrão. O evento não envia a página, então uma tabela que não case cai no padrão sem erro visível. Confira página a página antes de publicar.

  5. Conferir e publicar

    • Modo de visualização, no site de produção, a tag do GA4 dispara ao navegar o embed
    • GA4, Tempo real, o evento aparece com os parâmetros preenchidos
    • Com mais de uma propriedade, o measurement ID muda corretamente entre as páginas
    • Se você tem mais de um site, repita tudo em cada container. Se só um receber, os números divergem entre eles
    • Publique a versão no Gerenciador de Tags. Até publicar, as tags existem só no modo de visualização e nada é medido para quem navega no site

    Antes de publicar, confira o embed. Nenhum destes casos gera erro:

    • O endereço do decorado está com maiúsculas e minúsculas exatamente como entregamos. Caixa diferente deixa a sessão inteira muda
    • O iframe não tem sandbox sem allow-same-origin
    • O decorado não está dentro de outro iframe, como um bloco de HTML de construtor de site

    Não mexa nos parâmetros do endereço por conta própria. Um ?external_id= no src costuma ser a chave do seu CRM e precisa ficar, mas às vezes foi parar aí por engano e não é seu. Confirme com a gente antes de mexer.

    Nunca marque o retorno do decorado com utm_source. O GA4 trataria a volta como nova sessão de outra fonte, e o crédito da campanha iria para o Meu Decorado em vez da sua agência.

Referência

Os eventos que chegam ao seu dataLayer

EventoQuando dispara
meu_decorado_iniciou_jornadaCarregou na página. Não garante que a pessoa viu
meu_decorado_alcancou_secaoApareceu na tela. É o melhor início de funil
meu_decorado_escolheu_empreendimentoEscolha do empreendimento. Só existe no link geral
meu_decorado_escolheu_tipologiaEscolha da tipologia, por exemplo 2 quartos
meu_decorado_escolheu_imovelEscolha da planta
meu_decorado_escolheu_ambienteEscolha do ambiente
meu_decorado_abriu_resultadoAbriu o decorado. Repete a cada troca de opção
meu_decorado_abriu_interesseClicou em "Quero saber mais"
meu_decorado_enviou_contatoDeixou contato por qualquer caminho de dentro do decorado: o formulário de captura, o envio para o próprio WhatsApp, e os botões de falar com corretor e agendar visita

A escolha de cada passo vem em md_escolha, como "2 Quartos" ou "Cozinha". Exceção: escolheu_empreendimento manda o identificador, não o nome. Se vier um código ali, é esperado, e estamos ajustando.

O que esperar dos números