O seu negócio está no topo? Veja a sua posição real agora No Google Maps
Análise completa do seu site + relatório detalhado por email
Velocidade, otimização, tempo de carregamento
Metatags, estrutura, indexação
PDF profissional com recomendações
30min de consultoria gratuita
Analisando seu site...
Estamos coletando dados de performance e SEO
Site: ${escHtml(a.url)}
Email: ${escHtml(email)}
Telefone: ${escHtml(phone||'Não informado')}
Performance: ${a.performance}/100
Data: ${new Date().toLocaleString('pt-BR')}
`; } async sendEmails(report, email) { console.log('Enviando para:', email); await new Promise(r=>setTimeout(r,1000)); return true; } } const bdAnalyzer = new BlocoDigitalSEOAnalyzer(); document.getElementById('blocoDigitalSeoForm').addEventListener('submit', async function(e) { e.preventDefault(); // Honeypot if (document.getElementById('bd_website_trap').value !== '') return; // Rate limit if (submitCount >= MAX_SUBMITS) { alert('Muitas tentativas. Por favor, recarregue a página.'); return; } const urlEl = document.getElementById('bdSiteUrl'); const emailEl = document.getElementById('bdClientEmail'); const phoneEl = document.getElementById('bdPhone'); const consent = document.getElementById('bdConsent'); const urlVal = urlEl.value.trim(); const emailVal = emailEl.value.trim(); const phoneVal = phoneEl.value.trim(); clearErr('errUrl',urlEl); clearErr('errEmail',emailEl); clearErr('errPhone',phoneEl); clearErr('errConsent',null); let valid = true; if (!isValidUrl(urlVal)) { showErr('errUrl',urlEl); valid=false; } if (!isValidEmail(emailVal)){ showErr('errEmail',emailEl); valid=false; } if (!isValidPhone(phoneVal)){ showErr('errPhone',phoneEl); valid=false; } if (!consent.checked) { showErr('errConsent',null); valid=false; } if (!valid) return; submitCount++; const loading = document.getElementById('bdLoading'); const results = document.getElementById('bdResults'); const btn = this.querySelector('button[type="submit"]'); loading.style.display='block'; this.style.display='none'; btn.disabled=true; try { const analysis = await bdAnalyzer.analyzeSite(urlVal); const report = { clientEmail:{ subject:'Relatório SEO – Bloco Digital', html:bdAnalyzer.getClientEmailHTML(analysis) }, adminEmail:{ subject:'Nova solicitação', html:bdAnalyzer.getAdminEmailHTML(analysis,emailVal,phoneVal) } }; await bdAnalyzer.sendEmails(report, emailVal); // Monta resultado com DOM seguro (sem innerHTML com dados do user) const wrap = document.createElement('div'); wrap.style.cssText='text-align:center;padding:30px'; const icon=document.createElement('div'); icon.style.cssText='color:#4dabf7;font-size:64px;margin-bottom:20px'; icon.textContent='✅'; const title=document.createElement('h3'); title.style.cssText='color:#0a2540;margin-bottom:15px'; title.textContent='Análise Concluída com Sucesso!'; const box=document.createElement('div'); box.style.cssText='background:#f8faff;padding:20px;border-radius:10px;margin:20px 0'; const bh=document.createElement('h4'); bh.style.cssText='color:#0a2540;margin-top:0'; bh.textContent='📊 Resultados Preliminares'; const p1=document.createElement('p'); p1.textContent='Performance: '+analysis.performance+'/100'; const p2=document.createElement('p'); p2.textContent='Tempo de Carregamento: '+analysis.loadTime; const p3=document.createElement('p'); p3.textContent='Pontos de Melhoria: '+analysis.issues+' identificados'; box.append(bh,p1,p2,p3); const info=document.createElement('p'); info.style.cssText='color:#666;margin-bottom:20px'; const s1=document.createElement('span'); s1.textContent='✅ Relatório enviado para: '; const strong=document.createElement('strong'); strong.textContent=emailVal; // textContent – seguro const br=document.createElement('br'); const s2=document.createElement('span'); s2.textContent='✅ Nossa equipe entrará em contato em até 24h'; info.append(s1,strong,br,s2); const btn2=document.createElement('button'); btn2.style.cssText='background:#4dabf7;color:white;border:none;padding:12px 24px;border-radius:8px;cursor:pointer;font-size:16px'; btn2.textContent='🔄 Nova Análise'; btn2.addEventListener('click',()=>location.reload()); wrap.append(icon,title,box,info,btn2); results.innerHTML=''; results.appendChild(wrap); results.style.display='block'; } catch(err) { const ew=document.createElement('div'); ew.style.cssText='text-align:center;padding:30px'; const ei=document.createElement('div'); ei.style.cssText='color:#ff6b6b;font-size:64px;margin-bottom:20px'; ei.textContent='❌'; const et=document.createElement('h3'); et.style.cssText='color:#0a2540;margin-bottom:15px'; et.textContent='Erro na Análise'; const em=document.createElement('p'); em.style.color='#666'; em.textContent='Tente novamente ou entre em contato conosco.'; const rb=document.createElement('button'); rb.style.cssText='background:#4dabf7;color:white;border:none;padding:12px 24px;border-radius:8px;cursor:pointer;font-size:16px'; rb.textContent='Tentar Novamente'; rb.addEventListener('click',()=>location.reload()); ew.append(ei,et,em,rb); results.innerHTML=''; results.appendChild(ew); results.style.display='block'; } finally { loading.style.display='none'; } }); document.querySelectorAll('#blocoDigitalSeoForm input[type="url"],#blocoDigitalSeoForm input[type="email"],#blocoDigitalSeoForm input[type="tel"]').forEach(inp=>{ inp.addEventListener('focus',function(){ this.style.borderColor='#4dabf7'; this.style.background='white'; }); inp.addEventListener('blur', function(){ this.style.borderColor='#e0e7ff'; this.style.background='#f8faff'; }); });