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).
O que você vai aprender hoje:
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:
- Carregamento Bloqueante: O navegador precisa baixar dicionários inteiros do Google Translate antes de exibir o seu texto. Seu PageSpeed despenca.
- 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.
- 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:
- Acesse o painel do seu Blogger e vá na aba Layout.
- Escolha uma área da sua barra lateral (Sidebar) e clique em Adicionar um Gadget.
- Selecione a opção HTML/JavaScript e deixe o título em branco.
- 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.
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.
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 →


