Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Diferenciar SSR, SSG e site estático pelo momento em que o HTML é gerado
- Saber o que cada modelo exige de hospedagem, cache e RAM
- Escolher o modelo certo para cada página do seu projeto
Toda página web precisa virar HTML em algum momento. A diferença entre SSR, SSG e site estático está em quando isso acontece: a cada visita, uma vez durante o build ou dentro do navegador. Essa escolha define que tipo de hospedagem você precisa, quanta RAM paga e o que dá para colocar em cache.
Os termos se misturam porque SSG e "site estático" descrevem o mesmo resultado visto de ângulos diferentes. As seções abaixo separam cada um, com tabela e exemplos.
O que é um site estático?#
É um conjunto de arquivos HTML, CSS e JavaScript prontos, entregues exatamente como estão. A MDN resume assim: sites estáticos não têm lógica no servidor, então todo usuário recebe o mesmo conteúdo para uma URL. O servidor só lê o arquivo e envia.
Não há código seu rodando na hospedagem. Isso torna o site barato, fácil de colocar atrás de uma CDN e difícil de derrubar por excesso de acessos. Para o passo a passo de publicar um, veja o que é um site estático.
O que é SSG (static site generation)?#
SSG é o processo que produz o site estático: um comando de build roda seu código uma vez, busca os dados necessários e grava um HTML por rota. Em seguida você publica a pasta gerada.
No Next.js, o App Router renderiza Server Components durante o next build, como num gerador de sites tradicional. A configuração abaixo faz o framework exportar tudo como arquivos:
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
}
module.exports = nextConfigDepois de next build, a pasta out contém os HTML, CSS e JS. Rotas dinâmicas como /blog/[id] só funcionam nesse modo se tiverem generateStaticParams(), que lista quais páginas gerar no build.
O custo do SSG: o conteúdo só muda quando você faz um novo build. Num site com milhares de páginas o build demora mais, e um preço atualizado só aparece no próximo deploy.
O que é SSR (server-side rendering)?#
No SSR o servidor monta o HTML a cada requisição. Ele pode ler o cookie de sessão, consultar o banco de dados e devolver uma página diferente para cada visitante. Por isso precisa de um processo rodando o tempo todo.
No Next.js, ler um dado que só existe no pedido, como um cookie, torna aquele trecho dinâmico:
// app/perfil/page.tsx
import { cookies } from 'next/headers'
import { Suspense } from 'react'
async function Saudacao() {
const tema = (await cookies()).get('tema')?.value ?? 'claro'
return <p>Seu tema: {tema}</p>
}
export default function Page() {
return (
<>
<h1>Perfil</h1>
<Suspense fallback={<p>Carregando...</p>}>
<Saudacao />
</Suspense>
</>
)
}Segundo a documentação do Next.js, com Cache Components ativado (cacheComponents: true no next.config) o título (estático) e o fallback entram num "static shell" gerado no build, e só o trecho que lê cookies é renderizado no pedido. Estático e dinâmico convivem na mesma rota.
O custo do SSR: cada visita consome CPU e RAM de um processo sempre ligado (compare com serverless e containers), o tempo de resposta depende do código e dos dados, e uma página lenta de montar deixa o visitante esperando.
E o CSR, onde entra?#
No CSR (client-side rendering) o servidor envia um HTML quase vazio e o JavaScript monta a tela no navegador. Uma SPA em React puro funciona assim. Na hospedagem ela se comporta como um site estático, porque o que você publica são arquivos prontos. A diferença aparece para quem busca e para quem tem internet lenta: o conteúdo só existe depois que o JavaScript roda.
Qual a diferença na hospedagem?#
| Site estático / SSG | SSR | CSR (SPA) | |
|---|---|---|---|
| Quando o HTML nasce | No build | A cada pedido, no servidor | No navegador |
| Código rodando na hospedagem | Nenhum | Sim, processo Node.js | Nenhum |
| Conteúdo por usuário | Não (só via API no navegador) | Sim | Sim, via API |
| Cache | Total, em CDN e navegador | Parcial, exige cuidado | Total para os arquivos |
| Atualizar o conteúdo | Novo build e deploy | Imediato | Novo build, ou dados via API |
| Custo de infraestrutura | Menor | Maior (CPU e RAM contínuas) | Menor |
Duas consequências práticas. Primeiro, o site estático aceita quase qualquer hospedagem: a documentação do Next.js diz que o resultado pode ser servido por qualquer servidor web capaz de entregar HTML, CSS e JS. Segundo, ao usar output: 'export' você abre mão de recursos que dependem de um servidor Node.js: Server Actions, cookies, redirects, rewrites e headers do next.config, ISR e a otimização de imagens padrão, entre outros.
Como escolher o modelo de cada página?#
Pergunte, página por página, se o conteúdo muda por visitante ou por minuto:
- Blog, documentação, landing page, portfólio: SSG. O conteúdo muda quando você publica. É o caso mais barato e mais rápido.
- Painel, perfil, carrinho, página que depende de login: SSR, ou SPA falando com uma API. O conteúdo é diferente para cada pessoa.
- Catálogo com preços que mudam várias vezes ao dia: SSG com regeneração (ISR) ou SSR com cache. Dá para manter páginas estáticas e atualizá-las em intervalos, mas isso exige um servidor Node.js e não funciona com
output: 'export'. - App com muito JavaScript e pouco SEO: SPA estática costuma bastar.
Uma regra útil: comece estático e adicione servidor só onde um requisito pedir. O meio-termo mais comum é manter o front-end estático e mover a parte dinâmica para uma API separada.
Como saber se o meu site já é estático?#
Rode o build e olhe o resultado. Se ele gera uma pasta só com .html, .css e .js (como out, dist ou build), você pode publicá-la em qualquer servidor de arquivos. Se o framework exige um comando como next start para subir (veja como hospedar um app Next.js), existe um processo Node.js que precisa ficar ligado, e a hospedagem precisa oferecer isso.
Como fazer isso na Square Cloud#
Na Square Cloud, cada modelo tem o seu caminho. Para a parte estática, entre diversos runtimes, há um de sites estáticos: o nginx fica sempre no ar servindo a pasta, e cada atualização entra no ar na hora. Você envia a pasta gerada (out, dist) pelo painel em ZIP, pela CLI, pelo GitHub ou pela extensão do VS Code. O arquivo de configuração squarecloud.app é opcional: o painel o gera no deploy, ou você o escreve na raiz do projeto.
Para SSR, use o runtime de Node.js e rode o servidor do framework, como o next start. A plataforma não tem etapa de build, então rode o next build num CI externo ou no comando de início. No comando de início, as dependências do build (como typescript) precisam estar em dependencies, porque a instalação roda com NODE_ENV=production e pula as devDependencies.
As aplicações ficam em containers sempre ligados, sem cold start nem modo de suspensão, com reinício automático (ligado por padrão no deploy pelo painel) quando o processo encerra com erro. Uma aplicação web precisa de pelo menos 512 MB da RAM do seu plano, que é um pool compartilhado entre as suas aplicações. Não há autoscaling: você ajusta a RAM de cada aplicação nas configurações.
Toda aplicação web ganha um subdomínio *.squareweb.app com HTTPS, em qualquer plano. Domínio personalizado está disponível a partir do plano Standard: você cria os registros DNS no seu registrador, e o TLS é automático. O Hobby, a partir de R$ 12,49 por mês, atende sites, e todos os planos incluem CDN global e analytics web sem cookies. Os detalhes estão na página de Sites.
Hospedagem de sites
Sites estáticos e SSR com TLS automático e CDN global
Perguntas frequentes
SSG e site estático são a mesma coisa?
Quase. SSG (static site generation) é o processo de gerar os HTML no build. Site estático é o resultado: arquivos HTML, CSS e JavaScript prontos. Quem usa SSG acaba publicando um site estático.
SSR é melhor para SEO que SSG?
Nenhum dos dois é melhor por si só. Ambos entregam o HTML pronto ao buscador. O SSG costuma responder mais rápido porque o arquivo já existe, e a velocidade ajuda a experiência do visitante.
Posso misturar SSR e SSG no mesmo projeto?
Sim. Frameworks como o Next.js decidem página por página: o que é conhecido no build vira HTML estático, e o que depende do pedido, como cookies, é renderizado na hora da visita.
Um site com SSR precisa de servidor sempre ligado?
Sim, precisa de um processo Node.js (ou do runtime do framework) rodando para montar o HTML de cada pedido. Um site estático não precisa de código rodando, só de um servidor de arquivos.
Mais em Sites
Ver todos os 20 artigos- 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.
- O que é um servidor web: Nginx, Apache e NodeServidor web é o software que recebe requisições HTTP e devolve páginas, arquivos ou respostas de API. Veja como funciona e quando usar Nginx, Apache ou Node.js.