/* Fundo do menu com borda arco-íris */

Como Criar um Detector de Idioma Inteligente para Blogger (Focado em UX e AdSense)

Criando google tradutor personalizado, focado em UX e AdSense
Código Testado - 2026

Há alguns meses, enquanto analisava as métricas do Monzart, percebi um padrão que me deixou frustrado. Quase 40% do meu tráfego internacional estava indo para o ralo. Americanos, europeus e asiáticos encontravam meus tutoriais no Google, mas fechavam a aba em menos de 3 segundos porque o conteúdo estava 100% em português. Eu estava perdendo leitores e, pior, deixando dinheiro do AdSense na mesa.

Na pressa de resolver, cometi o erro clássico: instalei scripts que forçavam a tradução automática. O resultado? O layout quebrou, o PageSpeed do blog despencou e a experiência ficou horrível. Como desenvolvedor, eu sabia que precisava de uma solução melhor. O web design moderno exige o que chamo de "UX Adulta": você não força nada, você dá o controle ao usuário.

Foi assim que abri o meu editor de código e criei o detector de idioma inteligente para Blogger. Neste artigo profundo, vou te entregar essa ferramenta. Um script que lê o navegador do visitante em milissegundos e, se ele for gringo, exibe um aviso flutuante premium perguntando se ele deseja traduzir a página. Sem quebrar o layout, sem assustar o leitor e 100% otimizado para o Google AdSense.

🔥 Perdeu a Parte 1 deste tutorial? Se você procura apenas a interface premium das bandeiras (sem o aviso flutuante automático), eu ensinei o passo a passo base no nosso artigo anterior. Clique aqui para ver como criar o Tradutor Personalizado Premium (Sem a Barra do Google).


Por que a Tradução Automática forçada destrói seu SEO e AdSense?

Antes de irmos para o código, você precisa entender a estratégia. Quando você injeta um script que traduz o seu site automaticamente com base na localização do IP do usuário, você comete três erros graves aos olhos do algoritmo do Google:

  1. Carregamento Bloqueante: O navegador precisa baixar dicionários inteiros do Google Translate antes de exibir o seu texto. Seu PageSpeed despenca.
  2. Falsos Positivos: Um brasileiro morando nos EUA ou usando uma VPN americana será forçado a ler seu site mal traduzido para o inglês, o que gera frustração imediata.
  3. Risco de Violação: O AdSense pune sites que geram conteúdo automático massivo sem revisão humana apenas para enganar cliques.

É por isso que a abordagem mais profissional é a notificação amigável. Grandes portais fazem isso com cookies, nós faremos isso com o idioma nativo do sistema do visitante.

O Conceito de UX Adulta e o "Olheiro" JavaScript

O que eu chamo de UX Adulta é o design que respeita o espaço e a decisão de quem está do outro lado da tela. Para criar nosso detector de idioma para Blogger, eu desenvolvi um script que funciona como um "Olheiro" silencioso.

Método Amador (O que não fazer) Método Premium Monzart (A nossa solução)
Pop-up gigante bloqueando a leitura no meio da tela. Floating Toast (notificação flutuante) que desliza suavemente no topo esquerdo.
Aparece toda vez que o usuário muda de página, irritando o leitor. Sistema de "3 Chances" usando localStorage. Se ele fechar ou ignorar 3 vezes, o aviso nunca mais o incomoda.
Aparece para usuários do Brasil sem necessidade. Se o navigator.language detectar Português, o script aborta e fica 100% invisível.

O Código Completo: Instalando o Detector Inteligente no Blogger

Chegou a hora de colocar a mão na massa. Eu juntei toda essa engenharia complexa em um único bloco de código HTML, CSS e JavaScript. Você não precisa mexer no coração do seu template (XML) para isso funcionar, basta adicionar um Gadget.

⚠️ Nota do Desenvolvedor: Este código já possui uma "blindagem" embutida (via CSS) para esconder a barra oficial do Google Tradutor e os ícones de carregamento. Se você já usa algum código meu anterior, pode substituir tudo por este, pois ele é a versão Master Definitiva.

Siga estes passos simples no seu painel:

  1. Acesse o painel do seu Blogger e vá na aba Layout.
  2. Escolha uma área da sua barra lateral (Sidebar) e clique em Adicionar um Gadget.
  3. Selecione a opção HTML/JavaScript e deixe o título em branco.
  4. Copie o código completo abaixo e cole dentro da caixa. Salve o Gadget.

💡 Quer testar a mágica antes de instalar?

Copie o código abaixo e cole no DivPen, o meu editor de código online. Lá você pode simular como gringo e ver a notificação flutuante renderizar ao vivo!

Abrir DivPen e Testar Código 🚀
    
<!-- 
======================================================================
🚀 GADGET PREMIUM: DETECTOR DE IDIOMA (UX ADULTA) V6.5
👨‍💻 Desenvolvido por: Júnnior | Monzart Tutoriais
🔗 Portal Oficial: https://www.monzart.com.br
🛠️ Edite e Teste no DivPen: https://divpen.monzart.com.br
⚠️ Uso livre. Por favor, mantenha os créditos ao autor original.
====================================================================== 
-->

<!-- MONZART DETECTOR DE IDIOMA V6.5 (UX ADULTA + 3 CHANCES) -->
<style>
  /* 1. BLINDAGEM CONTRA O LAYOUT DO GOOGLE */
  #google_translate_element, div[class*="VIpgJd"], div[class*="goog-te-spinner"], div[class*="goog-te-gadget"], div[id^="goog-gt-"], iframe[src*="translate.googleapis"], iframe[id^="goog_"] { 
    position: absolute !important; top: -99999px !important; left: -99999px !important; opacity: 0 !important; visibility: hidden !important; width: 0 !important; height: 0 !important; pointer-events: none !important; z-index: -99999 !important;
  }

  /* 2. DESIGN DO GADGET FIXO (Bandeiras) */
  .ms-translate-box { background: transparent; border: none; padding: 10px 0; text-align: center; font-family: -apple-system, sans-serif; max-width: 320px; margin: 0 auto; display: flex; flex-direction: column; align-items: center; }
  .ms-translate-title { background: #ffffff; color: #5a33aa; font-size: 12px; font-weight: 800; padding: 6px 18px; border-radius: 50px; margin-bottom: 15px; display: inline-flex; align-items: center; gap: 8px; text-transform: uppercase; box-shadow: 0 4px 12px rgba(0,0,0,0.15); }
  .ms-flags-container { display: flex; gap: 15px; }
  .ms-flag-btn { cursor: pointer; border-radius: 50%; width: 38px; height: 38px; padding: 3px; border: 2px solid transparent; transition: all 0.3s ease; }
  .ms-flag-btn img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; box-shadow: 0 4px 8px rgba(0,0,0,0.3); transition: transform 0.3s ease; }
  .ms-flag-btn:hover img { transform: translateY(-4px); }
  .ms-flag-btn.active { border-color: #ffffff; }

  /* 3. O AVISO FLUTUANTE INTELIGENTE (Topo Esquerdo) */
  #ms-smart-toast {
    position: fixed; top: -150px; left: 20px; background: #ffffff; border-left: 4px solid #5a33aa; padding: 16px 20px; border-radius: 8px; box-shadow: 0 10px 25px rgba(0,0,0,0.2); font-family: -apple-system, sans-serif; z-index: 999999; display: flex; flex-direction: column; gap: 12px; transition: top 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55); opacity: 0; pointer-events: none; max-width: 300px;
  }
  #ms-smart-toast.show { top: 20px; opacity: 1; pointer-events: auto; }
  .ms-toast-text { color: #333333; font-size: 14px; margin: 0; line-height: 1.4; font-weight: 500; }
  .ms-toast-actions { display: flex; gap: 10px; justify-content: flex-end; }
  .ms-btn-yes { background: #5a33aa; color: #fff; border: none; padding: 6px 14px; border-radius: 4px; cursor: pointer; font-size: 13px; font-weight: bold; transition: opacity 0.2s; }
  .ms-btn-yes:hover { opacity: 0.8; }
  .ms-btn-no { background: #e5e7eb; color: #4b5563; border: none; padding: 6px 14px; border-radius: 4px; cursor: pointer; font-size: 13px; font-weight: bold; transition: background 0.2s; }
  .ms-btn-no:hover { background: #d1d5db; }
</style>

<!-- MOTOR DO GOOGLE -->
<div id="google_translate_element"></div>

<!-- A INTERFACE FIXA -->
<div class="ms-translate-box">
  <div class="ms-translate-title">
    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#5a33aa" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg> Translate
  </div>
  <div class="ms-flags-container">
    <div class="ms-flag-btn active" data-lang="pt" onclick="msChangeLang('pt', this)" title="Português"><img src="https://flagcdn.com/w40/br.png" alt="Brasil"></div>
    <div class="ms-flag-btn" data-lang="en" onclick="msChangeLang('en', this)" title="English"><img src="https://flagcdn.com/w40/us.png" alt="USA"></div>
    <div class="ms-flag-btn" data-lang="es" onclick="msChangeLang('es', this)" title="Español"><img src="https://flagcdn.com/w40/es.png" alt="Espanha"></div>
    <div class="ms-flag-btn" data-lang="fr" onclick="msChangeLang('fr', this)" title="Français"><img src="https://flagcdn.com/w40/fr.png" alt="França"></div>
  </div>
</div>

<!-- O TOAST FLUTUANTE (Invisível no início) -->
<div id="ms-smart-toast">
  <p class="ms-toast-text" id="ms-toast-msg"></p>
  <div class="ms-toast-actions">
    <button class="ms-btn-no" id="ms-toast-btn-no"></button>
    <button class="ms-btn-yes" id="ms-toast-btn-yes"></button>
  </div>
</div>

<!-- LÓGICA JAVASCRIPT MASTER -->
<script type="text/javascript">
  function googleTranslateElementInit() {
    new google.translate.TranslateElement({ pageLanguage: 'pt', includedLanguages: 'pt,en,es,fr', autoDisplay: false }, 'google_translate_element');
  }

  function msChangeLang(langCode, element) {
    const flags = document.querySelectorAll('.ms-flag-btn');
    flags.forEach(flag => flag.classList.remove('active'));
    if(element) element.classList.add('active');

    const selectField = document.querySelector(".goog-te-combo");
    if (selectField) {
      selectField.value = langCode;
      selectField.dispatchEvent(new Event('change'));
    }
  }

  document.addEventListener("DOMContentLoaded", function() {
    // Tira o Toast do Gadget da barra lateral e joga para a tela inteira
    const smartToast = document.getElementById('ms-smart-toast');
    if(smartToast) document.body.appendChild(smartToast);

    // SISTEMA DE 3 CHANCES (Respeito ao usuário)
    let contadorExibicoes = parseInt(localStorage.getItem('ms_toast_contador')) || 0;
    if(contadorExibicoes >= 3) return; // Se já viu 3x no site, não mostra mais.

    const userLang = navigator.language || navigator.userLanguage;
    const langPrefix = userLang.substring(0, 2).toLowerCase();

    // Se o visitante for do Brasil/Portugal, aborta a missão em silêncio
    if(langPrefix === 'pt') return;

    let msg = ""; let yesTxt = ""; let noTxt = ""; let targetLang = "";

    // Adapta o idioma da pergunta conforme a origem
    if(langPrefix === 'en') {
      msg = "This content is in Portuguese. Would you like to translate it to English?";
      yesTxt = "Yes, translate"; noTxt = "No, thanks"; targetLang = "en";
    } else if(langPrefix === 'es') {
      msg = "Este contenido está en Portugués. ¿Deseas traducirlo al Español?";
      yesTxt = "Sí, traducir"; noTxt = "No, gracias"; targetLang = "es";
    } else if(langPrefix === 'fr') {
      msg = "Ce contenu est en portugais. Voulez-vous le traduire en français?";
      yesTxt = "Oui, traduire"; noTxt = "Non, merci"; targetLang = "fr";
    } else {
      msg = "This content is in Portuguese. Would you like to translate it to English?";
      yesTxt = "Yes, translate"; noTxt = "No, thanks"; targetLang = "en";
    }

    document.getElementById('ms-toast-msg').innerText = msg;
    document.getElementById('ms-toast-btn-yes').innerText = yesTxt;
    document.getElementById('ms-toast-btn-no').innerText = noTxt;

    // Atraso sutil de 1.5s para não parecer um pop-up agressivo
    setTimeout(() => {
      smartToast.classList.add('show');
      localStorage.setItem('ms_toast_contador', contadorExibicoes + 1);
    }, 1500);

    // Ação do SIM (Fecha a caixa e simula o clique na bandeira)
    document.getElementById('ms-toast-btn-yes').addEventListener('click', function() {
      smartToast.classList.remove('show');
      const flagBtn = document.querySelector(`.ms-flag-btn[data-lang="${targetLang}"]`);
      msChangeLang(targetLang, flagBtn);
    });

    // Ação do NÃO (Apenas fecha a caixa elegantemente)
    document.getElementById('ms-toast-btn-no').addEventListener('click', function() {
      smartToast.classList.remove('show');
    });
  });
</script>
<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

O Impacto no SEO e no seu Google AdSense

Quando ensino técnicas de manipulação de DOM (elementos da página) no Blogger, a primeira pergunta que recebo na minha caixa de entrada é sempre: "Isso vai bloquear a minha conta no AdSense?"

Eu prezo muito pela segurança dos projetos que desenvolvo. Por isso, afirmo: este código é 100% amigável para SEO e monetização.

  • Ação Client-Side: A detecção do idioma acontece no navegador do leitor, não no seu servidor. Para o robô de indexação do Google (Googlebot), seu site continua perfeitamente escrito em português original.
  • Aumento Real de RPM: A matemática do AdSense é simples. Anunciantes americanos pagam em Dólar por impressões. Se um visitante dos EUA decide ficar no seu blog e ler o seu tutorial traduzido, os anúncios que aparecem para ele são de alto valor. O seu RPM (Receita por Mil) geral dispara.
  • Políticas Respeitadas: Você não está gerando "páginas piratas" de conteúdo automático, você está oferecendo uma ferramenta de acessibilidade acionada pelo usuário. O Google adora acessibilidade.

⚡ Turbine seu conhecimento

Separei mais 4 artigos exclusivos do MonZart para você:

Carregando recomendações...

Dúvidas Frequentes (FAQ)

1. O aviso flutuante funciona em smartphones e tablets?

Sim! Eu programei o CSS para ser totalmente responsivo. Em telas menores, o "Toast" se ajusta elegantemente sem bloquear botões de fechar ou anúncios do AdSense na parte inferior da tela.

2. Se eu recarregar a página, ele continua aparecendo?

Para o bem do seu leitor, o código tem um "limite de paciência". Ele aparece no máximo 3 vezes (através do cache do localStorage). Após isso, ele entende que o usuário não quer ser incomodado e para de aparecer.

3. O gadget das bandeiras continuará funcionando?

Perfeitamente. O detector inteligente é apenas um "assistente". Se o leitor rejeitar o pop-up, as bandeiras continuarão na sua barra lateral, prontas para serem clicadas manualmente a qualquer momento.


O que eu acho

Aplicar ferramentas de grandes portais no ecossistema do Blogger é o que separa os amadores dos verdadeiros profissionais. Com esse script de detector de idioma, você está dizendo para o mundo: "Meu conteúdo é global e eu respeito a sua experiência".

Se você conseguiu aplicar essa engenharia no seu blog, deixe um comentário abaixo com o link do seu site! Eu faço questão de acessar e ver como a interface ficou ajustada no seu layout. E claro, se quiser aprender a criar ferramentas próprias e manipular código como um mestre, continue acompanhando meus tutoriais.


Júnnior MonZart

Escrito por

Júnnior MonZart

Desenvolvedor web, criador de conteúdo e fundador do MonZart.com.br. Minha missão é simplificar o marketing digital e ajudar você a monetizar seus projetos na internet.

Ver Perfil Completo →

Compartilhe este post:

O que achou deste conteúdo?

Carregando avaliações...

Comentários


Carregando comentários...