Compare commits

...

10 Commits

Author SHA1 Message Date
avanzato cd6bcf5b3d Release PROD: Paginas e SEO master, correção javascript google
Deploy PROD Avanzato / deploy-prod (push) Successful in 35s
2026-06-02 14:21:08 -03:00
avanzato 35e5727e60 Merge remote-tracking branch 'origin/develop' 2026-06-02 12:50:56 -03:00
avanzato 96563b30e9 Log release HML: Paginas e SEO master
Deploy HML Avanzato / deploy-hml (push) Successful in 42s
2026-06-02 12:43:58 -03:00
avanzato 80dbb986f4 Paginas e SEO master 2026-06-02 12:43:57 -03:00
avanzato 6db7b5200b Log release HML: Paginas e SEO master
Deploy HML Avanzato / deploy-hml (push) Successful in 1m17s
2026-06-02 12:07:35 -03:00
avanzato 52cda4304b Paginas e SEO master 2026-06-02 12:07:34 -03:00
avanzato a85a6c9b3f Log release HML: Paginas e SEO master
Deploy HML Avanzato / deploy-hml (push) Successful in 46s
2026-06-02 11:45:37 -03:00
avanzato 2900b9afd9 Paginas e SEO master 2026-06-02 11:45:36 -03:00
avanzato 433773c4b8 Log release HML: Paginas e SEO master
Deploy HML Avanzato / deploy-hml (push) Successful in 47s
2026-06-02 10:42:23 -03:00
avanzato 6140142bab Paginas e SEO master 2026-06-02 10:42:23 -03:00
16 changed files with 498 additions and 346 deletions
BIN
View File
Binary file not shown.
-246
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+70 -13
View File
@@ -5,6 +5,36 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<!-- DETECAO DE AMBIENTE - Inline (executa antes de tudo) -->
<script>
(function() {
var h = location.hostname;
var IS_PROD = h === 'avanzato.com.br' || h === 'www.avanzato.com.br';
// Torna disponivel para outros scripts
window.__IS_PROD__ = IS_PROD;
// Se NAO for producao, desativa tracking globalmente
if (!IS_PROD) {
window.__AVANZATO_ENV__ = h === 'hml.avanzato.com.br' ? 'homologation' : 'development';
// Bloqueia gtag
window.dataLayer = { push: function(){} };
window.gtag = function(){};
// Bloqueia fbq (Facebook Pixel)
window.fbq = function(){};
// Bloqueia Mautic
window.MauticSDKLoaded = true;
console.log('[Avanzato] Ambiente: ' + window.__AVANZATO_ENV__ + ' | Tracking bloqueado');
} else {
window.__AVANZATO_ENV__ = 'production';
}
})();
</script>
<!-- Google tag (gtag.js) - Ads + Analytics --> <!-- Google tag (gtag.js) - Ads + Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-16714813566"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=AW-16714813566"></script>
<script> <script>
@@ -69,7 +99,8 @@
<!-- Primary Meta Tags --> <!-- Primary Meta Tags -->
<title>Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP</title> <title>Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP</title>
<meta name="title" content="Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP" /> <meta name="title" content="Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP" />
<meta name="description" content="Solucoes em TI Gerenciada, Cloud Computing e Seguranca da Informacao. +23 anos de experiencia, +500 clientes atendidos. Suporte 24/7 em Guarulhos e regiao." /> <meta name="description" content="Solucoes em TI Gerenciada, Cloud Computing e Seguranca da Informacao. +23 anos de experiencia, +500 clientes atendidos. Suporte 24/7." />
<meta name="app-version" content="1.3.4" />
<meta name="keywords" content="TI Gerenciada, Cloud Computing, Seguranca da Informacao, Suporte Tecnico, Tecnologia da Informacao, Guarulhos, Sao Paulo, Infraestrutura de TI, Backup, Firewall, Consultoria TI" /> <meta name="keywords" content="TI Gerenciada, Cloud Computing, Seguranca da Informacao, Suporte Tecnico, Tecnologia da Informacao, Guarulhos, Sao Paulo, Infraestrutura de TI, Backup, Firewall, Consultoria TI" />
<meta name="author" content="Avanzato Tecnologia" /> <meta name="author" content="Avanzato Tecnologia" />
<meta name="robots" content="index, follow" id="meta-robots" /> <meta name="robots" content="index, follow" id="meta-robots" />
@@ -78,9 +109,9 @@
<!-- BLOQUEAR INDEXACAO EM HOMOLOGACAO --> <!-- BLOQUEAR INDEXACAO EM HOMOLOGACAO -->
<script> <script>
(function() { (function() {
var hostname = window.location.hostname; // Usa IS_PROD ja definido no inicio do documento
if (hostname !== 'avanzato.com.br') { if (!window.__IS_PROD__) {
// Homologacao: bloquear indexacao // Homologacao/Desenvolvimento: bloquear indexacao
document.getElementById('meta-robots').setAttribute('content', 'noindex, nofollow'); document.getElementById('meta-robots').setAttribute('content', 'noindex, nofollow');
document.getElementById('meta-googlebot').setAttribute('content', 'noindex, nofollow'); document.getElementById('meta-googlebot').setAttribute('content', 'noindex, nofollow');
// Adicionar tambem X-Robots-Tag via meta http-equiv // Adicionar tambem X-Robots-Tag via meta http-equiv
@@ -88,7 +119,9 @@
meta.httpEquiv = 'X-Robots-Tag'; meta.httpEquiv = 'X-Robots-Tag';
meta.content = 'noindex, nofollow'; meta.content = 'noindex, nofollow';
document.head.appendChild(meta); document.head.appendChild(meta);
console.log('%c[SEO] Homologacao detectada - indexacao BLOQUEADA (noindex, nofollow)', 'background:#dc2626;color:#fff;font-weight:bold;padding:2px 6px;border-radius:3px'); console.log('%c[SEO] ' + (window.__AVANZATO_ENV__ || 'nao-producao') + ' - indexacao BLOQUEADA', 'background:#dc2626;color:#fff;font-weight:bold;padding:2px 6px;border-radius:3px');
} else {
console.log('%c[SEO] Producao - indexacao PERMITIDA (index, follow)', 'background:#16a34a;color:#fff;font-weight:bold;padding:2px 6px;border-radius:3px');
} }
})(); })();
</script> </script>
@@ -113,11 +146,9 @@
<meta property="twitter:image" content="https://avanzato.com.br/og-image.jpg" /> <meta property="twitter:image" content="https://avanzato.com.br/og-image.jpg" />
<!-- Favicon --> <!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="./favicon.svg" /> <link rel="icon" type="image/png" href="https://avanzato.com.br/favicon.png" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" /> <link rel="shortcut icon" type="image/png" href="https://avanzato.com.br/favicon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" /> <link rel="manifest" href="/site.webmanifest" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<link rel="manifest" href="./site.webmanifest" />
<!-- Theme Color --> <!-- Theme Color -->
<meta name="theme-color" content="#cbf400" /> <meta name="theme-color" content="#cbf400" />
@@ -208,11 +239,37 @@
} }
} }
</script> </script>
<script type="module" crossorigin src="./assets/index-C1GgsDvQ.js"></script> <script type="module" crossorigin src="/assets/index-DFuPBbfP.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-Cg4oF5jQ.css"> <link rel="stylesheet" crossorigin href="/assets/index-CWiRqhwC.css">
</head> </head>
<body> <body>
<div id="root"></div> <div id="root">
<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></div>
<!-- Facebook Pixel noscript (moved from head to body to fix parse5 warning) --> <!-- Facebook Pixel noscript (moved from head to body to fix parse5 warning) -->
<noscript> <noscript>
+10 -23
View File
@@ -1,26 +1,13 @@
# ============================================================================= # ============================================================================
# ROBOTS.TXT - VERSAO HOMOLOGACAO/DESENVOLVIMENTO # AVANZATO TECNOLOGIA - ROBOTS.TXT (GENERICO)
# ============================================================================= # ============================================================================
# Este arquivo BLOQUEIA TODOS os crawlers. # O controle real de indexacao e feito pelo <meta name="robots"> no HTML:
# # - Producao (avanzato.com.br): index, follow
# Para PRODUCAO (avanzato.com.br), substitua por: # - Homologacao (hml.avanzato.com.br): noindex, nofollow
# User-agent: * # - Desenvolvimento (localhost): noindex, nofollow
# Allow: / # ============================================================================
# Sitemap: https://avanzato.com.br/sitemap.xml
# =============================================================================
User-agent: * User-agent: *
Disallow: / Allow: /
# Bloqueio explicito de todos os bots Sitemap: https://avanzato.com.br/sitemap.xml
User-agent: Googlebot
Disallow: /
User-agent: Bingbot
Disallow: /
User-agent: Slurp
Disallow: /
# Sitemap comentado (descomente em producao)
# Sitemap: https://avanzato.com.br/sitemap.xml
+74
View File
@@ -165,4 +165,78 @@
<changefreq>weekly</changefreq> <changefreq>weekly</changefreq>
<priority>0.9</priority> <priority>0.9</priority>
</url> </url>
<!-- SEO Local - Onde Atuamos -->
<url>
<loc>https://avanzato.com.br/onde-atuamos</loc>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-guarulhos</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-mogi-das-cruzes</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-ipiranga</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-vila-formosa</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-cerqueira-cesar</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-santana</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-bras</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-ribeirao-preto</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<!-- Nichos adicionais -->
<url>
<loc>https://avanzato.com.br/suporte-ti-industria</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-portaria-remota</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-clinicas</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-imobiliarias</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://avanzato.com.br/suporte-ti-recrutamento-selecao</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset> </urlset>
+1
View File
@@ -100,6 +100,7 @@
<title>Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP</title> <title>Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP</title>
<meta name="title" content="Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP" /> <meta name="title" content="Avanzato Tecnologia | TI Gerenciada, Cloud e Seguranca em Guarulhos/SP" />
<meta name="description" content="Solucoes em TI Gerenciada, Cloud Computing e Seguranca da Informacao. +23 anos de experiencia, +500 clientes atendidos. Suporte 24/7 em Guarulhos e regiao." /> <meta name="description" content="Solucoes em TI Gerenciada, Cloud Computing e Seguranca da Informacao. +23 anos de experiencia, +500 clientes atendidos. Suporte 24/7 em Guarulhos e regiao." />
<meta name="app-version" content="1.0.0" />
<meta name="keywords" content="TI Gerenciada, Cloud Computing, Seguranca da Informacao, Suporte Tecnico, Tecnologia da Informacao, Guarulhos, Sao Paulo, Infraestrutura de TI, Backup, Firewall, Consultoria TI" /> <meta name="keywords" content="TI Gerenciada, Cloud Computing, Seguranca da Informacao, Suporte Tecnico, Tecnologia da Informacao, Guarulhos, Sao Paulo, Infraestrutura de TI, Backup, Firewall, Consultoria TI" />
<meta name="author" content="Avanzato Tecnologia" /> <meta name="author" content="Avanzato Tecnologia" />
<meta name="robots" content="index, follow" id="meta-robots" /> <meta name="robots" content="index, follow" id="meta-robots" />
-35
View File
@@ -1,35 +0,0 @@
# Release HML
Data: seg 1 jun 2026 19:55:53 -03
Ambiente:
HML
Descrição:
Paginas e SEO master
Branch:
develop
Arquivos alterados antes do commit:
D infra/releases/2026-06-01_19-39-57_HML.md
M node_modules/.vite/deps/_metadata.json
M src/config/site.ts
M vite.config.ts
?? infra/releases/2026-06-01_19-55-53_HML.md
Status:
Preparado para publicação
Commit:
24786e35
Arquivos no commit:
infra/releases/2026-06-01_19-39-57_HML.md
infra/releases/2026-06-01_19-55-53_HML.md
node_modules/.vite/deps/_metadata.json
src/config/site.ts
vite.config.ts
Status final:
Publicado no Gitea / aguardando pipeline HML
+61
View File
@@ -0,0 +1,61 @@
# Release HML
Data: ter 2 jun 2026 12:43:57 -03
Ambiente:
HML
Descrição:
Paginas e SEO master
Branch:
develop
Arquivos alterados antes do commit:
D dist/.DS_Store
D dist/assets/index-C1GgsDvQ.js
D dist/assets/index-Cg4oF5jQ.css
M dist/index.html
M dist/robots.txt
M dist/sitemap.xml
M index.html
D infra/releases/2026-06-02_10-42-22_HML.md
D infra/releases/2026-06-02_11-45-35_HML.md
D infra/releases/2026-06-02_12-07-34_HML.md
M node_modules/.tmp/tsconfig.app.tsbuildinfo
M public/version.json
M scripts/build-static-routes.sh
M src/config/site.ts
M src/sections/Footer.tsx
M vite.config.ts
?? infra/releases/2026-06-02_12-43-57_HML.md
?? scripts/prerender.cjs
Status:
Preparado para publicação
Commit:
80dbb986
Arquivos no commit:
dist/.DS_Store
dist/assets/index-C1GgsDvQ.js
dist/assets/index-Cg4oF5jQ.css
dist/index.html
dist/robots.txt
dist/sitemap.xml
index.html
infra/releases/2026-06-02_10-42-22_HML.md
infra/releases/2026-06-02_11-45-35_HML.md
infra/releases/2026-06-02_12-07-34_HML.md
infra/releases/2026-06-02_12-43-57_HML.md
node_modules/.tmp/tsconfig.app.tsbuildinfo
public/version.json
scripts/build-static-routes.sh
scripts/prerender.cjs
src/config/site.ts
src/sections/Footer.tsx
vite.config.ts
Status final:
Publicado no Gitea / aguardando pipeline HML
@@ -0,0 +1,24 @@
# Release PROD
Data: ter 2 jun 2026 14:21:07 -03
Ambiente:
PROD
Descrição:
Paginas e SEO master, correção javascript google
Branch:
main
Commit:
35e5727e
Último commit develop:
96563b30
Arquivos alterados no último commit:
Status:
Preparado para publicação em produção
+1 -1
View File
@@ -1 +1 @@
{"root":["../../src/app.tsx","../../src/global.d.ts","../../src/main.tsx","../../src/components/cookieconsent.tsx","../../src/components/glowbutton.tsx","../../src/components/homologationbanner.tsx","../../src/components/whatsappwidget.tsx","../../src/components/ui/accordion.tsx","../../src/components/ui/alert-dialog.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/aspect-ratio.tsx","../../src/components/ui/avatar.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/breadcrumb.tsx","../../src/components/ui/button-group.tsx","../../src/components/ui/button.tsx","../../src/components/ui/calendar.tsx","../../src/components/ui/card.tsx","../../src/components/ui/carousel.tsx","../../src/components/ui/chart.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/collapsible.tsx","../../src/components/ui/command.tsx","../../src/components/ui/context-menu.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/drawer.tsx","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/empty.tsx","../../src/components/ui/field.tsx","../../src/components/ui/form.tsx","../../src/components/ui/hover-card.tsx","../../src/components/ui/input-group.tsx","../../src/components/ui/input-otp.tsx","../../src/components/ui/input.tsx","../../src/components/ui/item.tsx","../../src/components/ui/kbd.tsx","../../src/components/ui/label.tsx","../../src/components/ui/menubar.tsx","../../src/components/ui/navigation-menu.tsx","../../src/components/ui/pagination.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/radio-group.tsx","../../src/components/ui/resizable.tsx","../../src/components/ui/scroll-area.tsx","../../src/components/ui/select.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/sheet.tsx","../../src/components/ui/sidebar.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/slider.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/spinner.tsx","../../src/components/ui/switch.tsx","../../src/components/ui/table.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/toggle-group.tsx","../../src/components/ui/toggle.tsx","../../src/components/ui/tooltip.tsx","../../src/config/mautic.ts","../../src/config/site.ts","../../src/hooks/use-mobile.ts","../../src/lib/utils.ts","../../src/pages/avaliador.tsx","../../src/pages/blog.tsx","../../src/pages/blogpost.tsx","../../src/pages/cases.tsx","../../src/pages/condominios.tsx","../../src/pages/contato.tsx","../../src/pages/home.tsx","../../src/pages/notfound.tsx","../../src/pages/privacidade.tsx","../../src/pages/sobre.tsx","../../src/pages/tecnologias.tsx","../../src/pages/termos.tsx","../../src/pages/nichos/advocacia.tsx","../../src/pages/nichos/backupcorporativo.tsx","../../src/pages/nichos/contabilidade.tsx","../../src/pages/nichos/firewallpfsense.tsx","../../src/pages/nichos/monitoramento.tsx","../../src/pages/nichos/voipempresarial.tsx","../../src/pages/services/backup.tsx","../../src/pages/services/cloudcomputing.tsx","../../src/pages/services/consultoria.tsx","../../src/pages/services/noc.tsx","../../src/pages/services/pabx.tsx","../../src/pages/services/redes.tsx","../../src/pages/services/seguranca.tsx","../../src/pages/services/servidores.tsx","../../src/pages/services/suporte.tsx","../../src/pages/services/tigerenciada.tsx","../../src/pages/tech/cisco.tsx","../../src/pages/tech/linux.tsx","../../src/pages/tech/pfsense.tsx","../../src/pages/tech/proxmox.tsx","../../src/pages/tech/sharepoint.tsx","../../src/pages/tech/vmware.tsx","../../src/pages/tech/windowsserver.tsx","../../src/sections/about.tsx","../../src/sections/condominioscta.tsx","../../src/sections/contact.tsx","../../src/sections/footer.tsx","../../src/sections/hero.tsx","../../src/sections/navigation.tsx","../../src/sections/services.tsx","../../src/sections/testimonials.tsx"],"version":"5.9.3"} {"root":["../../src/app.tsx","../../src/global.d.ts","../../src/main.tsx","../../src/components/cookieconsent.tsx","../../src/components/glowbutton.tsx","../../src/components/homologationbanner.tsx","../../src/components/seo.tsx","../../src/components/whatsappwidget.tsx","../../src/components/ui/accordion.tsx","../../src/components/ui/alert-dialog.tsx","../../src/components/ui/alert.tsx","../../src/components/ui/aspect-ratio.tsx","../../src/components/ui/avatar.tsx","../../src/components/ui/badge.tsx","../../src/components/ui/breadcrumb.tsx","../../src/components/ui/button-group.tsx","../../src/components/ui/button.tsx","../../src/components/ui/calendar.tsx","../../src/components/ui/card.tsx","../../src/components/ui/carousel.tsx","../../src/components/ui/chart.tsx","../../src/components/ui/checkbox.tsx","../../src/components/ui/collapsible.tsx","../../src/components/ui/command.tsx","../../src/components/ui/context-menu.tsx","../../src/components/ui/dialog.tsx","../../src/components/ui/drawer.tsx","../../src/components/ui/dropdown-menu.tsx","../../src/components/ui/empty.tsx","../../src/components/ui/field.tsx","../../src/components/ui/form.tsx","../../src/components/ui/hover-card.tsx","../../src/components/ui/input-group.tsx","../../src/components/ui/input-otp.tsx","../../src/components/ui/input.tsx","../../src/components/ui/item.tsx","../../src/components/ui/kbd.tsx","../../src/components/ui/label.tsx","../../src/components/ui/menubar.tsx","../../src/components/ui/navigation-menu.tsx","../../src/components/ui/pagination.tsx","../../src/components/ui/popover.tsx","../../src/components/ui/progress.tsx","../../src/components/ui/radio-group.tsx","../../src/components/ui/resizable.tsx","../../src/components/ui/scroll-area.tsx","../../src/components/ui/select.tsx","../../src/components/ui/separator.tsx","../../src/components/ui/sheet.tsx","../../src/components/ui/sidebar.tsx","../../src/components/ui/skeleton.tsx","../../src/components/ui/slider.tsx","../../src/components/ui/sonner.tsx","../../src/components/ui/spinner.tsx","../../src/components/ui/switch.tsx","../../src/components/ui/table.tsx","../../src/components/ui/tabs.tsx","../../src/components/ui/textarea.tsx","../../src/components/ui/toggle-group.tsx","../../src/components/ui/toggle.tsx","../../src/components/ui/tooltip.tsx","../../src/config/environment.ts","../../src/config/mautic.ts","../../src/config/schema.ts","../../src/config/site.ts","../../src/hooks/use-mobile.ts","../../src/lib/utils.ts","../../src/pages/avaliador.tsx","../../src/pages/blog.tsx","../../src/pages/blogpost.tsx","../../src/pages/cases.tsx","../../src/pages/condominios.tsx","../../src/pages/contato.tsx","../../src/pages/home.tsx","../../src/pages/notfound.tsx","../../src/pages/ondeatuamos.tsx","../../src/pages/privacidade.tsx","../../src/pages/sobre.tsx","../../src/pages/tecnologias.tsx","../../src/pages/termos.tsx","../../src/pages/local-bras.tsx","../../src/pages/local-cerqueira-cesar.tsx","../../src/pages/local-guarulhos.tsx","../../src/pages/local-ipiranga.tsx","../../src/pages/local-mogi-das-cruzes.tsx","../../src/pages/local-ribeirao-preto.tsx","../../src/pages/local-santana.tsx","../../src/pages/local-vila-formosa.tsx","../../src/pages/nicho-clinicas.tsx","../../src/pages/nicho-imobiliarias.tsx","../../src/pages/nicho-industria.tsx","../../src/pages/nicho-portaria-remota.tsx","../../src/pages/nicho-recrutamento-selecao.tsx","../../src/pages/nichos/advocacia.tsx","../../src/pages/nichos/backupcorporativo.tsx","../../src/pages/nichos/contabilidade.tsx","../../src/pages/nichos/firewallpfsense.tsx","../../src/pages/nichos/monitoramento.tsx","../../src/pages/nichos/voipempresarial.tsx","../../src/pages/services/backup.tsx","../../src/pages/services/cloudcomputing.tsx","../../src/pages/services/consultoria.tsx","../../src/pages/services/noc.tsx","../../src/pages/services/pabx.tsx","../../src/pages/services/redes.tsx","../../src/pages/services/seguranca.tsx","../../src/pages/services/servidores.tsx","../../src/pages/services/suporte.tsx","../../src/pages/services/tigerenciada.tsx","../../src/pages/tech/cisco.tsx","../../src/pages/tech/linux.tsx","../../src/pages/tech/pfsense.tsx","../../src/pages/tech/proxmox.tsx","../../src/pages/tech/sharepoint.tsx","../../src/pages/tech/vmware.tsx","../../src/pages/tech/windowsserver.tsx","../../src/sections/about.tsx","../../src/sections/condominioscta.tsx","../../src/sections/contact.tsx","../../src/sections/footer.tsx","../../src/sections/hero.tsx","../../src/sections/navigation.tsx","../../src/sections/services.tsx","../../src/sections/testimonials.tsx"],"version":"5.9.3"}
+21 -21
View File
@@ -1,115 +1,115 @@
{ {
"hash": "ec03a3de", "hash": "bef2a67d",
"configHash": "0c4bfc43", "configHash": "eccf13b4",
"lockfileHash": "c4c8a51c", "lockfileHash": "c4c8a51c",
"browserHash": "905f02ab", "browserHash": "e7109be1",
"optimized": { "optimized": {
"react": { "react": {
"src": "../../react/index.js", "src": "../../react/index.js",
"file": "react.js", "file": "react.js",
"fileHash": "bc3615ed", "fileHash": "dd97ceba",
"needsInterop": true "needsInterop": true
}, },
"react-dom": { "react-dom": {
"src": "../../react-dom/index.js", "src": "../../react-dom/index.js",
"file": "react-dom.js", "file": "react-dom.js",
"fileHash": "b0f7a48e", "fileHash": "8becf687",
"needsInterop": true "needsInterop": true
}, },
"react/jsx-dev-runtime": { "react/jsx-dev-runtime": {
"src": "../../react/jsx-dev-runtime.js", "src": "../../react/jsx-dev-runtime.js",
"file": "react_jsx-dev-runtime.js", "file": "react_jsx-dev-runtime.js",
"fileHash": "20e35079", "fileHash": "2c7217d2",
"needsInterop": true "needsInterop": true
}, },
"react/jsx-runtime": { "react/jsx-runtime": {
"src": "../../react/jsx-runtime.js", "src": "../../react/jsx-runtime.js",
"file": "react_jsx-runtime.js", "file": "react_jsx-runtime.js",
"fileHash": "06d08a64", "fileHash": "e28ec614",
"needsInterop": true "needsInterop": true
}, },
"@radix-ui/react-dialog": { "@radix-ui/react-dialog": {
"src": "../../@radix-ui/react-dialog/dist/index.mjs", "src": "../../@radix-ui/react-dialog/dist/index.mjs",
"file": "@radix-ui_react-dialog.js", "file": "@radix-ui_react-dialog.js",
"fileHash": "8c11471a", "fileHash": "22041c72",
"needsInterop": false "needsInterop": false
}, },
"@radix-ui/react-label": { "@radix-ui/react-label": {
"src": "../../@radix-ui/react-label/dist/index.mjs", "src": "../../@radix-ui/react-label/dist/index.mjs",
"file": "@radix-ui_react-label.js", "file": "@radix-ui_react-label.js",
"fileHash": "f6093ccb", "fileHash": "d33ac0ed",
"needsInterop": false "needsInterop": false
}, },
"@radix-ui/react-radio-group": { "@radix-ui/react-radio-group": {
"src": "../../@radix-ui/react-radio-group/dist/index.mjs", "src": "../../@radix-ui/react-radio-group/dist/index.mjs",
"file": "@radix-ui_react-radio-group.js", "file": "@radix-ui_react-radio-group.js",
"fileHash": "79f80d12", "fileHash": "2be9d4b7",
"needsInterop": false "needsInterop": false
}, },
"@radix-ui/react-select": { "@radix-ui/react-select": {
"src": "../../@radix-ui/react-select/dist/index.mjs", "src": "../../@radix-ui/react-select/dist/index.mjs",
"file": "@radix-ui_react-select.js", "file": "@radix-ui_react-select.js",
"fileHash": "794a13f8", "fileHash": "51dd47da",
"needsInterop": false "needsInterop": false
}, },
"@radix-ui/react-slot": { "@radix-ui/react-slot": {
"src": "../../@radix-ui/react-slot/dist/index.mjs", "src": "../../@radix-ui/react-slot/dist/index.mjs",
"file": "@radix-ui_react-slot.js", "file": "@radix-ui_react-slot.js",
"fileHash": "dbdae2a9", "fileHash": "32dfa860",
"needsInterop": false "needsInterop": false
}, },
"class-variance-authority": { "class-variance-authority": {
"src": "../../class-variance-authority/dist/index.mjs", "src": "../../class-variance-authority/dist/index.mjs",
"file": "class-variance-authority.js", "file": "class-variance-authority.js",
"fileHash": "9b75e9db", "fileHash": "f4a8c6f4",
"needsInterop": false "needsInterop": false
}, },
"clsx": { "clsx": {
"src": "../../clsx/dist/clsx.mjs", "src": "../../clsx/dist/clsx.mjs",
"file": "clsx.js", "file": "clsx.js",
"fileHash": "2b0045d5", "fileHash": "e5a299ae",
"needsInterop": false "needsInterop": false
}, },
"gsap": { "gsap": {
"src": "../../gsap/index.js", "src": "../../gsap/index.js",
"file": "gsap.js", "file": "gsap.js",
"fileHash": "32cc8e4c", "fileHash": "76791308",
"needsInterop": false "needsInterop": false
}, },
"gsap/ScrollTrigger": { "gsap/ScrollTrigger": {
"src": "../../gsap/ScrollTrigger.js", "src": "../../gsap/ScrollTrigger.js",
"file": "gsap_ScrollTrigger.js", "file": "gsap_ScrollTrigger.js",
"fileHash": "590ce89a", "fileHash": "187ec0aa",
"needsInterop": false "needsInterop": false
}, },
"lucide-react": { "lucide-react": {
"src": "../../lucide-react/dist/esm/lucide-react.js", "src": "../../lucide-react/dist/esm/lucide-react.js",
"file": "lucide-react.js", "file": "lucide-react.js",
"fileHash": "e68e426c", "fileHash": "58304198",
"needsInterop": false "needsInterop": false
}, },
"react-dom/client": { "react-dom/client": {
"src": "../../react-dom/client.js", "src": "../../react-dom/client.js",
"file": "react-dom_client.js", "file": "react-dom_client.js",
"fileHash": "05e46311", "fileHash": "b30625c8",
"needsInterop": true "needsInterop": true
}, },
"react-helmet-async": { "react-helmet-async": {
"src": "../../react-helmet-async/lib/index.esm.js", "src": "../../react-helmet-async/lib/index.esm.js",
"file": "react-helmet-async.js", "file": "react-helmet-async.js",
"fileHash": "310b8502", "fileHash": "79a82144",
"needsInterop": false "needsInterop": false
}, },
"react-router-dom": { "react-router-dom": {
"src": "../../react-router-dom/dist/index.mjs", "src": "../../react-router-dom/dist/index.mjs",
"file": "react-router-dom.js", "file": "react-router-dom.js",
"fileHash": "d1ce1cad", "fileHash": "4427109e",
"needsInterop": false "needsInterop": false
}, },
"tailwind-merge": { "tailwind-merge": {
"src": "../../tailwind-merge/dist/bundle-mjs.mjs", "src": "../../tailwind-merge/dist/bundle-mjs.mjs",
"file": "tailwind-merge.js", "file": "tailwind-merge.js",
"fileHash": "d007a231", "fileHash": "9511be49",
"needsInterop": false "needsInterop": false
} }
}, },
+2 -2
View File
@@ -1,5 +1,5 @@
{ {
"version": "1.3.1", "version": "1.3.4",
"date": "2026-06-01", "date": "2026-06-02",
"environment": "auto-detect" "environment": "auto-detect"
} }
+7
View File
@@ -93,6 +93,12 @@ echo -e "${GREEN}OK${NC} 404.html criado"
# Limpar backup # Limpar backup
rm -f "$DIST_DIR/index.html.bak" 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 ""
echo -e "${GREEN}Post-build concluido!${NC}" echo -e "${GREEN}Post-build concluido!${NC}"
echo "" echo ""
@@ -100,4 +106,5 @@ echo "Estrutura gerada:"
echo " dist/index.html (home)" echo " dist/index.html (home)"
echo " dist/404.html (pagina nao encontrada)" echo " dist/404.html (pagina nao encontrada)"
echo " dist/{rota}/index.html (${#ROUTES[@]} paginas estaticas)" echo " dist/{rota}/index.html (${#ROUTES[@]} paginas estaticas)"
echo " dist/{rota}/index.html (HTML com conteudo real para SEO)"
echo "" echo ""
+216
View File
@@ -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');
+11 -4
View File
@@ -15,10 +15,17 @@ const Footer = () => {
const [version, setVersion] = useState(''); const [version, setVersion] = useState('');
useEffect(() => { useEffect(() => {
fetch('/version.json?t=' + Date.now()) // Ler versao da meta tag (mais confiavel que fetch de arquivo separado)
.then(r => r.json()) const metaVersion = document.querySelector('meta[name="app-version"]')?.getAttribute('content');
.then(data => setVersion(data.version)) if (metaVersion && metaVersion !== '1.0.0') {
.catch(() => setVersion('')); setVersion(metaVersion);
} else {
// Fallback: tentar version.json
fetch('/version.json?t=' + Date.now())
.then(r => r.json())
.then(data => setVersion(data.version))
.catch(() => setVersion(''));
}
}, []); }, []);
const scrollToTop = () => { const scrollToTop = () => {