Server Side Rendering virou quase um “default” em muitas discussões sobre frontend moderno. Em algum momento, todo projeto grande passa pela mesma frase:
“A gente precisa de SSR por causa de SEO e performance.”
O problema é que, na prática, essa decisão costuma ser tomada sem que todos entendam o que realmente muda quando você adota SSR — e, principalmente, o que você passa a pagar por isso, em complexidade, custo e manutenção.
Este artigo não é uma defesa do SSR, nem um ataque. A proposta aqui é mais simples e mais difícil ao mesmo tempo: entender SSR como decisão arquitetural, não como feature de framework.
O que realmente acontece quando você usa SSR
Antes de falar de vantagens ou desvantagens, precisamos alinhar uma coisa importante:
SSR não elimina JavaScript, não elimina o browser e não elimina o client-side rendering. Ele apenas muda quando a renderização acontece.
Client Side Rendering (CSR), na prática
- O navegador solicita a página
- Recebe um HTML mínimo (basicamente uma
<div id="root">) - Baixa o bundle JavaScript
- Executa o código
- Faz chamadas de API
- Renderiza a UI
Do ponto de vista do usuário (e do bot), o conteúdo não existe até o JavaScript rodar.
Esse modelo é simples, escalável e barato de servir, mas cria dois problemas bem conhecidos:
- Conteúdo não aparece imediatamente
- Bots e crawlers têm dificuldade para indexar corretamente
Server Side Rendering (SSR), sem abstrações
Quando você usa SSR, o fluxo muda:
- O navegador faz a requisição
- O servidor:
- executa o código do frontend
- resolve dependências
- busca dados
- monta o HTML final
- Envia HTML já renderizado
- O navegador exibe o conteúdo imediatamente
- O JavaScript é carregado e ocorre a hydration
O ponto crítico aqui é este:
o servidor agora executa código que antes só rodava no browser.
Isso muda completamente o perfil do sistema.
O que o SSR resolve de verdade (em cenários reais)
Vamos falar apenas do que SSR de fato resolve, sem promessas exageradas.
SEO: o problema real, não o genérico
SSR resolve SEO quando o problema é a ausência de HTML indexável.
Isso acontece em cenários muito específicos, como:
- Blogs e portais de conteúdo
- Marketplaces
- Landing pages de tráfego pago
- Páginas públicas de produto ou serviço
Nesses casos, bots de busca:
- Recebem HTML completo
- Leem conteúdo sem executar JS
- Conseguem indexar corretamente títulos, descrições e headings
Isso não é teoria. O próprio Google documenta que, embora consiga executar JavaScript, o processamento é atrasado e menos confiável, especialmente para SPAs complexas.
SSR não melhora SEO porque “é melhor”,
melhora porque remove a dependência de execução de JavaScript para indexação.
Performance percebida (e por que isso importa mais que benchmarks)
Um erro comum em discussões sobre SSR é focar apenas em métricas técnicas isoladas.
Na prática, o que SSR melhora é:
- First Contentful Paint (FCP)
- Largest Contentful Paint (LCP)
Ou seja: o momento em que o usuário vê algo útil na tela.
Em projetos reais isso aparece assim:
- O cliente diz que “o site parece lento”
- Mesmo quando o tempo total de carregamento não é alto
- Porque a tela fica vazia por muito tempo
SSR antecipa o HTML e melhora a percepção.
Isso é especialmente relevante em:
- Conexões móveis
- Dispositivos mais fracos
- Países com infraestrutura de rede instável
Mas é importante deixar claro:
SSR não elimina o custo de hidratação, nem reduz automaticamente o tempo total de execução do JavaScript.
Previews sociais e metadados dinâmicos
Outro problema extremamente comum em SPAs:
- Preview errado no WhatsApp
- LinkedIn puxando título genérico
- Facebook sem imagem
Isso acontece porque crawlers de redes sociais não executam JavaScript.
SSR resolve esse problema de forma direta:
- OG tags vêm prontas
- Metadados corretos por rota
- Preview consistente
Esse é um ganho real, simples e mensurável.
Onde o SSR começa a cobrar a conta
Até aqui, o SSR parece ótimo.
O problema é que ele muda a natureza do sistema — e isso tem consequências.
Custo de infraestrutura (o impacto invisível)
Antes do SSR:
- HTML estático
- CDN agressivo
- Escala quase infinita a baixo custo
Depois do SSR:
- Cada request executa código
- Node (ou runtime equivalente) precisa estar sempre disponível
- Escalar custa dinheiro
Em ambientes de alto tráfego, isso se traduz em:
- Mais instâncias
- Mais memória
- Mais cold starts (em ambientes serverless)
SSR não é “mais rápido” por definição.
Ele é mais caro de servir.
Cache deixa de ser trivial
Cache em SSR raramente é simples.
Em projetos reais, páginas dependem de:
- Usuário autenticado
- Localização
- Feature flags
- A/B tests
- Permissões
Cache por URL deixa de funcionar.
Cache por usuário explode a cardinalidade.
O resultado costuma ser:
- Cache inconsistente
- Bugs difíceis de reproduzir
- Comportamentos diferentes entre usuários
Ambientes diferentes, bugs diferentes
Quando você executa frontend no servidor, surgem problemas clássicos:
-
windownão existe -
documentnão existe -
localStoragenão existe - APIs do browser simplesmente não estão lá
Isso gera:
- Condicionais espalhadas pelo código
- Lógicas duplicadas
- Bugs que só aparecem em produção
Debug de SSR é, por natureza, mais complexo.
Hydration mismatch: o problema silencioso
Um dos problemas mais traiçoeiros do SSR.
Se o HTML gerado no servidor não for exatamente igual ao que o client espera:
- Warnings aparecem
- Componentes quebram
- Estado fica inconsistente
Isso costuma acontecer por:
- Datas e timezones
- Valores aleatórios
- Dependência de ambiente
- Dados que mudam entre server e client
É um tipo de bug que não aparece em ambientes simples, mas surge com força em aplicações reais.
SSR não é tudo ou nada: maturidade arquitetural
Um erro comum em times experientes — e não apenas iniciantes — é tratar SSR como uma decisão binária:
ou a aplicação é SSR, ou não é.
Na prática, os sistemas mais bem-sucedidos usam SSR de forma seletiva.
SSR por tipo de página, não por projeto
Em cenários reais de mercado, o padrão mais comum é:
-
SSR
- Home pública
- Landing pages
- Páginas de produto
- Conteúdo indexável
-
CSR
- Dashboards
- Áreas autenticadas
- Fluxos internos
- Telas altamente interativas
Isso não é acaso.
São páginas com objetivos diferentes, usuários diferentes e restrições diferentes.
Static Generation, revalidação e estratégias híbridas
Grande parte dos problemas atribuídos ao “CSR puro” na verdade são resolvidos com geração estática bem feita, não necessariamente com SSR por request.
Na prática, muitos projetos poderiam:
- Gerar HTML no build
- Revalidar sob demanda
- Atualizar conteúdo periodicamente
Isso reduz drasticamente:
- Custo de infraestrutura
- Complexidade de cache
- Superfície de bugs
SSR por request deve ser reservado para quando:
- O conteúdo realmente depende do request
- O dado não pode ser pré-gerado
- O ganho justifica o custo
Como decidir se SSR faz sentido no seu projeto
Antes de escolher SSR, perguntas como estas precisam ser respondidas com clareza:
- Essa página precisa ser indexada por buscadores?
- O conteúdo muda a cada request ou poderia ser gerado antes?
- O ganho de FCP/LCP justifica o custo de execução no servidor?
- O time está preparado para lidar com cache complexo?
- O orçamento de infraestrutura comporta SSR em escala?
- Esse código realmente precisa rodar no servidor?
Se a maioria dessas respostas for “não”, SSR provavelmente está sendo usado como solução genérica para um problema específico.
SSR como decisão de engenharia, não como tendência
SSR não é um avanço natural sobre CSR.
Ele é uma troca consciente.
Você troca:
- Simplicidade → por controle
- Custo baixo → por performance percebida
- Arquitetura simples → por flexibilidade
Em times maduros, SSR não é adotado porque “o framework recomenda”, mas porque:
- Existe um problema claro
- O custo é conhecido
- O time sabe o que está comprando
Conclusão
Entender SSR não é saber configurá-lo em um framework moderno.
É entender quando ele resolve um problema real — e quando apenas adiciona complexidade.
Os melhores sistemas não são aqueles que usam SSR em tudo, mas aqueles que:
- Sabem onde usar
- Sabem onde evitar
- Sabem justificar a escolha
SSR não é uma melhoria automática.
É uma decisão arquitetural que cobra juros.
Referências e leituras recomendadas
- Google Search Central — JavaScript SEO Basics
- W3C — Rendering on the Web
- Martin Fowler — Patterns of Enterprise Application Architecture
- Vercel — Rendering Patterns
- Web.dev — Rendering on the Web
- Addy Osmani — The Cost of JavaScript





Top comments (0)