DEV Community

Cover image for Você sabe de fato como SSR funciona — e o que ele resolve?
Vinicios "ViniDev" Coelho
Vinicios "ViniDev" Coelho

Posted on

Você sabe de fato como SSR funciona — e o que ele resolve?

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

csr imagem
Em um SPA clássico:

  1. O navegador solicita a página
  2. Recebe um HTML mínimo (basicamente uma <div id="root">)
  3. Baixa o bundle JavaScript
  4. Executa o código
  5. Faz chamadas de API
  6. 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

ssr image

Quando você usa SSR, o fluxo muda:

  1. O navegador faz a requisição
  2. O servidor:
    • executa o código do frontend
    • resolve dependências
    • busca dados
    • monta o HTML final
  3. Envia HTML já renderizado
  4. O navegador exibe o conteúdo imediatamente
  5. 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)

performance image

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 image

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:

  • window não existe
  • document não existe
  • localStorage nã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

architecture image

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)