Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Entender o que muda no servidor entre um site estático e um dinâmico
- Comparar velocidade, custo, segurança, SEO e manutenção lado a lado
- Escolher o modelo certo, ou a combinação dos dois, para o seu projeto
Todo site responde a um pedido do navegador com HTML. A diferença entre estático e dinâmico está no que acontece no servidor entre o pedido e a resposta: ou ele só lê um arquivo que já existe, ou roda código para montar aquela página naquele momento.
Essa diferença decide quase tudo o que vem depois: que tipo de hospedagem você contrata, quanto paga, quanto trabalho tem para manter o site seguro e como o conteúdo é atualizado. E muitos projetos hoje ficam no meio do caminho, combinando os dois.
O que é um site estático?#
A MDN define um site estático como aquele que devolve o mesmo conteúdo fixo sempre que um recurso é pedido. O servidor busca o arquivo no disco e responde com 200 OK. Não há linguagem de back-end rodando nem banco de dados consultado.
Os arquivos podem ser escritos à mão ou gerados por uma ferramenta (Astro, Hugo, Eleventy, Vite, Next.js) num passo de build. Depois do build, o resultado é uma pasta com HTML, CSS, JavaScript e imagens, e é essa pasta que vai para o servidor. Os detalhes estão em o que é um site estático.
Estático não significa sem interação. O JavaScript que roda no navegador pode abrir menus, filtrar listas e chamar APIs. "Estático" descreve o servidor, não a página.
O que é um site dinâmico?#
Num site dinâmico, parte da resposta é gerada na hora. Segundo a mesma página da MDN, as páginas costumam ser criadas inserindo dados de um banco em templates HTML, e o site pode devolver conteúdo diferente para a mesma URL conforme o usuário ou as preferências salvas.
Isso exige código no servidor (Node.js, Python, PHP, Ruby, Java e outros), um processo rodando para atender os pedidos e, quase sempre, um banco de dados. Em troca, o site pode fazer o que um conjunto de arquivos não faz: login com sessão, conteúdo personalizado, controle de acesso, carrinho, busca em dados que mudam o tempo todo. Lojas virtuais, redes sociais, painéis e o WordPress são dinâmicos. Como juntar site e banco está em site com banco de dados.
Quais as diferenças lado a lado?#
| Critério | Estático | Dinâmico |
|---|---|---|
| Quando o HTML nasce | No build, uma vez | A cada pedido |
| O que o servidor faz | Lê e envia um arquivo | Roda código, consulta banco, monta a página |
| Banco de dados | Não precisa | Quase sempre precisa |
| Velocidade de resposta | Alta e previsível | Depende do código e das consultas |
| Cache | Simples: tudo pode ir para uma CDN | Só nas partes iguais para todos |
| Picos de acesso | Absorvidos pela CDN ou pelo servidor de arquivos | Exigem mais CPU, RAM e conexões ao banco |
| Superfície de ataque | Pequena | Maior: código, banco, sessões, painel |
| Atualizar conteúdo | Novo build e troca dos arquivos, que valem no próximo pedido | Na hora, pelo painel ou pelo banco |
| Personalização por usuário | Só via JavaScript e API | Nativa |
| Hospedagem | Um servidor web sempre no ar que entrega os arquivos (como o nginx), ou uma CDN | Servidor com runtime e o seu código rodando o tempo todo |
| Manutenção | Baixa | Atualizar runtime, dependências e banco |
Algumas linhas pedem explicação:
- Velocidade. Ler um arquivo é sempre mais barato que rodar código e consultar um banco. Um site dinâmico bem feito pode ser rápido, mas depende de cache e de consultas otimizadas; o estático é rápido por padrão.
- Segurança. Sem código no servidor, não há injeção de SQL, sessão roubada ou plugin desatualizado para explorar. O dinâmico precisa de atualizações constantes e de um checklist de segurança.
- SEO. O Google processa JavaScript em três fases (rastreamento, renderização e indexação), e a própria documentação de busca do Google diz que renderizar no servidor ou pré-renderizar continua sendo uma boa ideia, porque deixa o site mais rápido e nem todo robô executa JavaScript. Tanto o estático quanto o dinâmico que monta HTML no servidor atendem a isso. O que atrapalha é o conteúdo que só aparece depois de rodar JavaScript no navegador.
- Custo. O estático não roda código seu nem banco: basta um servidor web entregando arquivos, o que cabe na hospedagem mais simples. O dinâmico paga RAM e CPU para o processo e para o banco. Os números estão em quanto custa hospedar um site.
Como fica a mesma página nos dois modelos?#
No modelo estático, a página é um arquivo index.html na pasta publicada. Se ela precisa de um dado que muda, o navegador busca esse dado numa API depois de carregar:
<!doctype html>
<meta charset="utf-8">
<title>Status</title>
<h1>Status do serviço</h1>
<p id="status">Carregando...</p>
<script type="module">
const res = await fetch("/api/status.json");
const data = await res.json();
document.querySelector("#status").textContent = data.message;
</script>No modelo dinâmico, o servidor monta o HTML com os dados antes de responder. Um exemplo mínimo com o módulo node:http do Node.js, sem dependências:
import { createServer } from "node:http";
const escapeHtml = (s) =>
s.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`);
const server = createServer((req, res) => {
const url = new URL(req.url, "http://localhost");
const name = url.searchParams.get("nome") ?? "visitante";
const now = new Date().toLocaleTimeString("pt-BR", { timeZone: "America/Sao_Paulo" });
res.writeHead(200, { "content-type": "text/html; charset=utf-8" });
res.end(`<!doctype html><meta charset="utf-8">
<h1>Olá, ${escapeHtml(name)}</h1>
<p>Página gerada às ${now}</p>`);
});
server.listen(process.env.PORT ?? 3000);Cada visita a /?nome=Ana produz um HTML diferente, com o nome e a hora daquele pedido. Repare no escapeHtml: todo dado vindo do usuário precisa ser escapado antes de entrar no HTML, ou o site fica vulnerável a XSS. No modelo estático não há template no servidor para escapar; no JavaScript do navegador, escrever o dado com textContent, como no primeiro exemplo, evita o mesmo problema.
Existe meio-termo entre os dois?#
Existe, e é o que a maioria dos projetos modernos usa. Três combinações comuns:
- Site estático + API. O front-end é estático e uma API separada cuida de login, formulários e dados. O site continua leve e barato, e só a API precisa de servidor. Entenda o lado da API em o que é uma API REST.
- CMS + build automático. O conteúdo fica num CMS ou em arquivos Markdown. Cada publicação dispara um novo build, e o site publicado continua estático.
- Framework híbrido. Next.js, Nuxt, Astro e similares decidem página por página: o que é igual para todos vira HTML no build, e o que depende do pedido é renderizado no servidor. Nesse caso o projeto precisa de um servidor rodando. A documentação do Next.js mostra que, ao exportar só arquivos estáticos, recursos como cookies, Server Actions e Incremental Static Regeneration deixam de funcionar.
A diferença entre gerar no build e gerar a cada pedido está detalhada em SSR, SSG e site estático.
Quando escolher cada um?#
| Projeto | Modelo indicado |
|---|---|
| Portfólio, currículo, landing page | Estático |
| Blog, documentação, site institucional | Estático (com CMS ou Markdown e build) |
| Site de empresa com formulário de contato | Estático + API ou serviço de formulário |
| Loja virtual, área de membros, painel | Dinâmico |
| Rede social, fórum, chat | Dinâmico |
| Catálogo grande que muda pouco, com busca | Híbrido: páginas estáticas e busca via API |
| WordPress já em uso | Dinâmico (ou exportação estática se não houver login nem loja) |
A regra prática: comece pelo estático e só adicione código no servidor quando aparecer algo que dependa de cada visitante ou precise mudar sem novo deploy. Se o conteúdo é igual para todos e muda poucas vezes por dia, um site estático resolve com menos custo e menos risco. Para colocar qualquer um dos dois no ar, veja como hospedar um site.
Como fazer isso na Square Cloud#
A Square Cloud hospeda os dois modelos, e o meio-termo, na mesma conta. Para o estático, entre diversos runtimes, como Node.js, Python e Go, há um para sites estáticos: o nginx fica sempre no ar servindo a pasta gerada pelo build, nenhum código seu roda no servidor, e um novo commit, upload ou edição no gerenciador de arquivos entra no ar na hora. Para o dinâmico, use o runtime da sua linguagem (Node.js, Python, PHP, Ruby, Java, Go e outros), num container sempre ligado, sem cold start nem modo de suspensão. Veja os runtimes disponíveis hoje em Runtimes.
No arranjo estático + API, o front-end e a API viram duas aplicações separadas, cada uma com o próprio subdomínio *.squareweb.app com HTTPS. Cada aplicação web usa no mínimo 512 MB da RAM do plano, que é um pool compartilhado entre elas. O deploy é seu: ZIP no painel, CLI, GitHub ou extensão do VS Code, e o arquivo squarecloud.app é opcional, porque o painel o gera no deploy.
O Hobby, a partir de R$ 12,49 por mês, atende sites e inclui analytics web sem cookies, com visitas, rotas e códigos de status. Domínio personalizado e hospedagem de banco de dados, que um site dinâmico costuma precisar, começam no Standard. Comece pelo runtime de sites estáticos ou veja a página de sites.
Hospedagem de sites
Sites estáticos e SSR com TLS automático e CDN global
Perguntas frequentes
Site estático é melhor para SEO?
Não necessariamente. O que importa para o buscador é receber o HTML com o conteúdo e carregar rápido. Um site estático entrega isso por natureza, e um dinâmico que monta o HTML no servidor também. O risco maior é depender de JavaScript no navegador para mostrar o conteúdo.
WordPress é estático ou dinâmico?
Dinâmico. O WordPress roda PHP e consulta um banco MySQL ou MariaDB para montar cada página. Plugins de cache e geradores de exportação podem transformar as páginas em arquivos estáticos, mas o painel continua dinâmico.
Um site estático pode ter formulário de contato?
Pode. O formulário envia os dados com JavaScript para uma API, sua ou de um serviço externo, que guarda ou encaminha a mensagem. O site continua sendo arquivos; a parte dinâmica fica na API.
Dá para transformar um site dinâmico em estático?
Dá, nas páginas que são iguais para todos os visitantes. Frameworks como Next.js e Astro geram essas páginas no build, e o que depende do usuário, como login e carrinho, continua no servidor ou numa API.
Mais em Sites
Ver todos os 20 artigos- O que é um site estático e onde hospedarSite estático é um conjunto de arquivos HTML, CSS e JavaScript prontos, entregues iguais a todos os visitantes. Veja como funciona, quando usar e onde hospedar.
- Quanto custa hospedar um site?Hospedar um site custa de zero a algumas dezenas de dólares por mês. Veja o que entra na conta: hospedagem, domínio, tráfego e extras, com exemplos e limites.
- Quanto custa hospedar um site estáticoHospedar um site estático custa de zero a algumas dezenas de dólares por mês na maioria dos casos. Veja como o tráfego define o preço, com a conta passo a passo.
- Quanto custa hospedar um app Next.jsHospedar um app Next.js custa de zero, com export estático, a dezenas de dólares por mês com servidor. Veja como cada modelo cobra e os custos escondidos.