Paginas e SEO master
This commit is contained in:
@@ -93,6 +93,12 @@ echo -e "${GREEN}OK${NC} 404.html criado"
|
||||
# Limpar backup
|
||||
rm -f "$DIST_DIR/index.html.bak"
|
||||
|
||||
echo ""
|
||||
# Gerar HTML prerenderizado com conteudo real (SEO)
|
||||
echo ""
|
||||
echo -e "${BLUE}[Prerender]${NC} Gerando HTML com conteudo real para SEO..."
|
||||
node "${SCRIPT_DIR}/prerender.cjs"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}Post-build concluido!${NC}"
|
||||
echo ""
|
||||
@@ -100,4 +106,5 @@ echo "Estrutura gerada:"
|
||||
echo " dist/index.html (home)"
|
||||
echo " dist/404.html (pagina nao encontrada)"
|
||||
echo " dist/{rota}/index.html (${#ROUTES[@]} paginas estaticas)"
|
||||
echo " dist/{rota}/index.html (HTML com conteudo real para SEO)"
|
||||
echo ""
|
||||
|
||||
@@ -0,0 +1,216 @@
|
||||
// ============================================================================
|
||||
// PRERENDER - Gera HTML estatico com conteudo real para cada rota
|
||||
// ============================================================================
|
||||
// Executa apos npm run build
|
||||
// Gera index.html com conteudo HTML real (nao vazio) para cada rota
|
||||
// Isso resolve o problema de SEO: Google recebe conteudo no 1o request
|
||||
// ============================================================================
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const DIST_DIR = path.resolve(__dirname, '../dist');
|
||||
const INDEX_HTML = path.join(DIST_DIR, 'index.html');
|
||||
|
||||
// Verificar se dist existe
|
||||
if (!fs.existsSync(DIST_DIR)) {
|
||||
console.error('ERRO: pasta dist/ nao encontrada. Execute npm run build primeiro.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Ler o index.html base
|
||||
let baseHtml = fs.readFileSync(INDEX_HTML, 'utf-8');
|
||||
|
||||
// Rotas para prerenderizar
|
||||
const ROUTES = [
|
||||
{ path: '/', title: 'Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP', desc: 'Solucoes em TI Gerenciada, Cloud Computing e Seguranca da Informacao. +23 anos de experiencia, +500 clientes atendidos. Suporte 24/7.' },
|
||||
{ path: '/sobre', title: 'Sobre a Avanzato Tecnologia | +23 Anos de Experiencia em TI', desc: 'Conheca a Avanzato Tecnologia. +23 anos de experiencia em TI Gerenciada, Cloud e Seguranca. +500 clientes satisfeitos em Sao Paulo.' },
|
||||
{ path: '/cases', title: 'Cases de Sucesso - Avanzato Tecnologia | Projetos de TI', desc: 'Conheca nossos cases de sucesso em TI. Empresas de contabilidade, advocacia, industria, monitoramento e mais. +23 anos de experiencia.' },
|
||||
{ path: '/onde-atuamos', title: 'Onde Atuamos - Suporte de TI em Sao Paulo e Regiao', desc: 'Avanzato Tecnologia atende em Guarulhos, Mogi das Cruzes, Ipiranga, Zona Leste, Zona Norte, Centro e Ribeirao Preto. Suporte presencial e remoto.' },
|
||||
{ path: '/avaliacao', title: 'Avaliacao Gratuita de TI - Avanzato Tecnologia', desc: 'Avalie gratuitamente a maturidade da TI da sua empresa. Descubra o nivel e receba recomendacoes personalizadas.' },
|
||||
{ path: '/contato', title: 'Contato - Avanzato Tecnologia | TI em Guarulhos/SP', desc: 'Entre em contato com a Avanzato Tecnologia. Telefone (11) 4810-1704, WhatsApp, email ou formulario. Atendimento 24/7.' },
|
||||
{ path: '/servicos/ti-gerenciada', title: 'TI Gerenciada para Empresas - Avanzato Tecnologia', desc: 'TI Gerenciada completa para empresas em Guarulhos e Sao Paulo. Suporte 24/7, monitoramento em tempo real e equipe especializada.' },
|
||||
{ path: '/servicos/cloud-computing', title: 'Cloud Computing e Virtualizacao - Avanzato', desc: 'Solucoes em Cloud Computing: AWS, Azure, Google Cloud. Migracao, gestao e otimizacao de infraestrutura em nuvem.' },
|
||||
{ path: '/servicos/seguranca', title: 'Seguranca da Informacao - Avanzato Tecnologia', desc: 'Protecao completa para sua empresa: firewall, antivirus, backup, LGPD. Seguranca de rede e dados com suporte 24/7.' },
|
||||
{ path: '/servicos/suporte', title: 'Suporte Tecnico 24/7 - Avanzato Tecnologia', desc: 'Suporte tecnico empresarial 24 horas. Help desk, atendimento remoto e presencial em Guarulhos e regiao.' },
|
||||
{ path: '/ti-para-contabilidades', title: 'TI para Escritorios de Contabilidade - Avanzato', desc: 'Solucoes de TI especializadas para contabilidades: seguranca de dados fiscais, backup de obrigacoes, NF-e. SPED e ECD.' },
|
||||
{ path: '/ti-para-advocacias', title: 'TI para Escritorios de Advocacia - Avanzato', desc: 'TI para advocacias: seguranca de processos, LGPD para clientes, backup de documentos juridicos. PJe e e-SAJ.' },
|
||||
{ path: '/monitoramento-empresarial', title: 'Monitoramento Empresarial com CFTV - Avanzato', desc: 'Sistemas de CFTV e monitoramento por camera para empresas. IP cameras, NVR, DVR, acesso remoto via celular.' },
|
||||
{ path: '/firewall-pfsense-empresarial', title: 'Firewall pfSense Empresarial - Avanzato', desc: 'Implementacao e configuracao de firewall pfSense e OPNsense. Seguranca de rede, VPN, filtro de conteudo.' },
|
||||
{ path: '/backup-corporativo', title: 'Backup Corporativo e Disaster Recovery - Avanzato', desc: 'Backup automatizado em nuvem e local. Disaster Recovery, recuperacao de dados. Protecao contra ransomware.' },
|
||||
{ path: '/voip-empresarial', title: 'VoIP Empresarial e PABX IP - Avanzato Tecnologia', desc: 'Telefonia VoIP para empresas: PABX IP, chamadas ilimitadas, integracao com CRM. Reducao de 70% na conta telefonica.' },
|
||||
{ path: '/suporte-ti-guarulhos', title: 'Suporte de TI em Guarulhos - Matriz Avanzato', desc: 'Suporte de TI empresarial em Guarulhos. Atendemos contabilidades, advocacias, industrias e mais. Matriz da Avanzato. +23 anos.' },
|
||||
{ path: '/suporte-ti-mogi-das-cruzes', title: 'Suporte de TI em Mogi das Cruzes - Avanzato', desc: 'Suporte de TI empresarial em Mogi das Cruzes. Atendimento presencial e remoto para empresas de todos os portes.' },
|
||||
{ path: '/suporte-ti-ipiranga', title: 'Suporte de TI em Ipiranga - Avanzato Tecnologia', desc: 'Suporte de TI empresarial em Ipiranga, Sao Paulo. Atendimento a clinicas, escolas e comercios do bairro.' },
|
||||
{ path: '/suporte-ti-industria', title: 'TI para Industria - Avanzato Tecnologia', desc: 'Solucoes de TI especializadas para industrias. Suporte tecnico, seguranca, cloud e comunicacao. +23 anos de experiencia.' },
|
||||
{ path: '/suporte-ti-portaria-remota', title: 'TI para Portaria Remota - Avanzato Tecnologia', desc: 'Solucoes de TI para portaria remota: interfornia IP, controle de acesso, cameras. Condominios, empresas, industrias.' },
|
||||
{ path: '/suporte-ti-clinicas', title: 'TI para Clinicas - Avanzato Tecnologia', desc: 'Solucoes de TI para clinicas: odontologia, fisioterapia, medica, veterinaria. LGPD, prontuario digital, telemedicina.' },
|
||||
{ path: '/suporte-ti-imobiliarias', title: 'TI para Imobiliarias - Avanzato Tecnologia', desc: 'Solucoes de TI para imobiliarias: sistemas de gestao, CRM, site de imoveis. Residencial, comercial, industrial.' },
|
||||
{ path: '/tecnologias', title: 'Tecnologias que Trabalhamos - Avanzato Tecnologia', desc: 'Conheca as tecnologias que a Avanzato domina: Cisco, VMware, Microsoft, Linux, pfSense, Proxmox e muito mais.' },
|
||||
];
|
||||
|
||||
// Conteudo HTML prerenderizado para cada tipo de pagina
|
||||
function generateContent(route) {
|
||||
const isHome = route.path === '/';
|
||||
const isLocal = route.path.includes('suporte-ti-');
|
||||
const isService = route.path.includes('servicos/');
|
||||
const isNicho = route.path.includes('ti-para-') || route.path.includes('suporte-ti-') && !isLocal;
|
||||
|
||||
let content = '';
|
||||
|
||||
if (isHome) {
|
||||
content = `
|
||||
<section class="hero">
|
||||
<h1>Avanzato Tecnologia - TI Gerenciada, Cloud e Seguranca</h1>
|
||||
<p>+23 anos de experiencia em TI para empresas. +500 clientes atendidos em Guarulhos, Sao Paulo e regiao.</p>
|
||||
<p>Servicos: Suporte Tecnico 24/7, Cloud Computing, Seguranca da Informacao, Backup Corporativo, VoIP, Firewall, Monitoramento.</p>
|
||||
<div><a href="/avaliacao">Avaliacao Gratuita</a> <a href="/contato">Falar com Especialista</a></div>
|
||||
</section>
|
||||
<section>
|
||||
<h2>Por que escolher a Avanzato?</h2>
|
||||
<ul>
|
||||
<li>Suporte 24/7 com equipe especializada</li>
|
||||
<li>+23 anos de experiencia em TI empresarial</li>
|
||||
<li>+500 clientes atendidos em diversos segmentos</li>
|
||||
<li>Atendimento em Guarulhos, Grande SP e interior</li>
|
||||
<li>Relatorios tecnicos mensais detalhados</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section>
|
||||
<h2>Segmentos que Atendemos</h2>
|
||||
<p>Contabilidades, Advocacias, Industrias, BPO, Clinicas, Imobiliarias, Condominios, Logistica, Monitoramento.</p>
|
||||
<p><a href="/onde-atuamos">Ver onde atuamos</a></p>
|
||||
</section>
|
||||
<section>
|
||||
<h2>Onde Atuamos</h2>
|
||||
<p>Guarulhos (matriz), Mogi das Cruzes, Ipiranga, Vila Formosa, Cerqueira Cesar, Santana, Bras, Ribeirao Preto.</p>
|
||||
<p><a href="/onde-atuamos">Ver todas as localidades</a></p>
|
||||
</section>`;
|
||||
} else if (isLocal) {
|
||||
const city = route.title.split(' em ')[1]?.split(' - ')[0] || '';
|
||||
content = `
|
||||
<article>
|
||||
<h1>Suporte de TI em ${city}</h1>
|
||||
<p>Empresa de suporte de TI em ${city} com atendimento presencial e remoto. +23 anos de experiencia.</p>
|
||||
<h2>Servicos em ${city}</h2>
|
||||
<ul>
|
||||
<li>Suporte tecnico 24/7</li>
|
||||
<li>Administracao de servidores</li>
|
||||
<li>Backup corporativo</li>
|
||||
<li>Firewall e seguranca</li>
|
||||
<li>Microsoft 365</li>
|
||||
<li>Cloud Computing</li>
|
||||
<li>VoIP e PABX IP</li>
|
||||
<li>Monitoramento CFTV</li>
|
||||
</ul>
|
||||
<h2>Segmentos Atendidos em ${city}</h2>
|
||||
<p>Contabilidades, Advocacias, Industrias, Clinicas, Imobiliarias, Condominios, Logistica, Monitoramento.</p>
|
||||
<div><a href="/avaliacao">Solicitar Avaliacao Gratuita</a></div>
|
||||
</article>`;
|
||||
} else if (route.path === '/onde-atuamos') {
|
||||
content = `
|
||||
<article>
|
||||
<h1>Onde a Avanzato Atua</h1>
|
||||
<p>Presente em toda a regiao metropolitana de Sao Paulo e interior. Atendimento presencial e remoto.</p>
|
||||
<h2>Cidades Atendidas</h2>
|
||||
<ul>
|
||||
<li><a href="/suporte-ti-guarulhos">Guarulhos</a> - Matriz Avanzato</li>
|
||||
<li><a href="/suporte-ti-mogi-das-cruzes">Mogi das Cruzes</a></li>
|
||||
<li><a href="/suporte-ti-ipiranga">Ipiranga</a></li>
|
||||
<li><a href="/suporte-ti-vila-formosa">Vila Formosa</a></li>
|
||||
<li><a href="/suporte-ti-cerqueira-cesar">Cerqueira Cesar</a></li>
|
||||
<li><a href="/suporte-ti-santana">Santana</a></li>
|
||||
<li><a href="/suporte-ti-bras">Bras</a></li>
|
||||
<li><a href="/suporte-ti-ribeirao-preto">Ribeirao Preto</a></li>
|
||||
</ul>
|
||||
<div><a href="/contato">Falar com Especialista</a></div>
|
||||
</article>`;
|
||||
} else if (route.path === '/cases') {
|
||||
content = `
|
||||
<article>
|
||||
<h1>Cases de Sucesso - Avanzato Tecnologia</h1>
|
||||
<p>Conheca nossos cases de sucesso em TI. Empresas de diversos segmentos que confiam na Avanzato.</p>
|
||||
<h2>Cases Recentes</h2>
|
||||
<ul>
|
||||
<li><strong>Apoio 24 Horas</strong> - Monitoramento - Servidores, pfSense, VPN</li>
|
||||
<li><strong>ONG/Terceiro Setor</strong> - Institucional - Suporte, Cloud, Seguranca</li>
|
||||
<li><strong>Museu de Faculdade Publica</strong> - Acervo Digital - Tainacan, ICA-AtoM</li>
|
||||
<li><strong>Thalls</strong> - Industria - Suporte, VoIP</li>
|
||||
<li><strong>Dellacont</strong> - Contabilidade - Suporte, Servidor, Backup</li>
|
||||
<li><strong>Mourad Naddi Advogados</strong> - Advocacia - Suporte, Servidor, Backup</li>
|
||||
<li><strong>GateOne e Fox</strong> - Monitoramento - Servidores, VPN</li>
|
||||
<li><strong>Lucena Textil</strong> - Textil - Colocation, VPN, Backup</li>
|
||||
</ul>
|
||||
<div><a href="/avaliacao">Quero um case de sucesso tambem</a></div>
|
||||
</article>`;
|
||||
} else if (isService || isNicho) {
|
||||
const serviceName = route.title.split(' - ')[0];
|
||||
content = `
|
||||
<article>
|
||||
<h1>${serviceName}</h1>
|
||||
<p>${route.desc}</p>
|
||||
<h2>O que oferecemos</h2>
|
||||
<ul>
|
||||
<li>Diagnostico inicial gratuito</li>
|
||||
<li>Projeto personalizado</li>
|
||||
<li>Implantacao completa</li>
|
||||
<li>Suporte continuo</li>
|
||||
<li>Relatorios periodicos</li>
|
||||
</ul>
|
||||
<h2>Perguntas Frequentes</h2>
|
||||
<p><strong>Qual o tempo de resposta?</strong> Nosso SLA garante atendimento em ate 4 horas para chamados criticos.</p>
|
||||
<p><strong>Atendem empresas de qual porte?</strong> Atendemos de pequenas a grandes empresas, com planos flexiveis.</p>
|
||||
<div><a href="/avaliacao">Solicitar Avaliacao Gratuita</a> <a href="/contato">Falar com Especialista</a></div>
|
||||
</article>`;
|
||||
} else {
|
||||
content = `
|
||||
<article>
|
||||
<h1>${route.title.split(' - ')[0]}</h1>
|
||||
<p>${route.desc}</p>
|
||||
<div><a href="/contato">Entrar em Contato</a> <a href="/avaliacao">Avaliacao Gratuita</a></div>
|
||||
</article>`;
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
// Gerar HTML prerenderizado para cada rota
|
||||
console.log('[Prerender] Gerando HTML estatico com conteudo real...\n');
|
||||
|
||||
let count = 0;
|
||||
|
||||
for (const route of ROUTES) {
|
||||
// Atualizar title e meta description
|
||||
let html = baseHtml
|
||||
.replace(/<title>.*?<\/title>/, `<title>${route.title}</title>`)
|
||||
.replace(/<meta name="title" content=".*?" \/>/, `<meta name="title" content="${route.title}" />`)
|
||||
.replace(/<meta name="description" content=".*?" \/>/, `<meta name="description" content="${route.desc}" />`)
|
||||
.replace(/<meta name="app-version" content=".*?" \/>/, `<meta name="app-version" content="${require('../public/version.json').version}" />`);
|
||||
|
||||
// Gerar conteudo HTML
|
||||
const content = generateContent(route);
|
||||
|
||||
// Inserir conteudo no div#root (substituir <div id="root"></div>)
|
||||
html = html.replace(
|
||||
'<div id="root"></div>',
|
||||
`<div id="root">${content}</div>`
|
||||
);
|
||||
|
||||
// Determinar caminho de saida
|
||||
let outputPath;
|
||||
if (route.path === '/') {
|
||||
outputPath = path.join(DIST_DIR, 'index.html');
|
||||
} else {
|
||||
// Criar pasta e salvar index.html
|
||||
const dir = path.join(DIST_DIR, route.path.replace(/^\//, ''));
|
||||
fs.mkdirSync(dir, { recursive: true });
|
||||
outputPath = path.join(dir, 'index.html');
|
||||
}
|
||||
|
||||
fs.writeFileSync(outputPath, html);
|
||||
count++;
|
||||
console.log(` OK: ${route.path} → ${outputPath.replace(DIST_DIR + '/', '')}`);
|
||||
}
|
||||
|
||||
console.log(`\n[Prerender] ${count} paginas geradas com conteudo HTML real!`);
|
||||
console.log('[Prerender] Agora o Google recebe conteudo no 1o request, sem precisar de JavaScript.\n');
|
||||
Reference in New Issue
Block a user