Configuração · Incorporadoras e construtoras
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.
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.
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.
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.
<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.
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.
O que você preencher fica salvo neste navegador, para não se perder ao voltar. Se for configurar outro site, limpe antes.
<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:
abclid ausentewindow.__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á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().
Você adiciona o campo oculto no formulário, e nós mandamos o trecho que preenche o valor.
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.
md_passo e outra lendo md_escolha^meu_decorado_, com correspondência de expressão regular marcadamd_passo e md_escolha, mesmo que as suas variáveis tenham outro nome no containermd_passo e outra lendo md_escolhaCrie 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.
Antes de publicar, confira o embed. Nenhum destes casos gera erro:
iframe não tem sandbox sem allow-same-originNã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.
dataLayer| Evento | Quando dispara |
|---|---|
meu_decorado_iniciou_jornada | Carregou na página. Não garante que a pessoa viu |
meu_decorado_alcancou_secao | Apareceu na tela. É o melhor início de funil |
meu_decorado_escolheu_empreendimento | Escolha do empreendimento. Só existe no link geral |
meu_decorado_escolheu_tipologia | Escolha da tipologia, por exemplo 2 quartos |
meu_decorado_escolheu_imovel | Escolha da planta |
meu_decorado_escolheu_ambiente | Escolha do ambiente |
meu_decorado_abriu_resultado | Abriu o decorado. Repete a cada troca de opção |
meu_decorado_abriu_interesse | Clicou em "Quero saber mais" |
meu_decorado_enviou_contato | Deixou 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.