Cache Estático com WP Super Cache: A Alternativa Realista ao JAMstack

Explicamos como transformar um site WordPress em um site quase-estático usando o WP Super Cache, com pré-carregamento completo e entrega direta de arquivos HTML pelo Nginx, sem abrir mão do painel administrativo.

Sites estáticos têm ganhado destaque nos últimos anos — e com razão. Eles são rápidos, seguros, exigem pouco do servidor e evitam muita dor de cabeça com plugins, bancos de dados ou picos de tráfego. O problema é que, para a maioria das pessoas que usam WordPress no dia a dia, essa promessa vem acompanhada de uma série de dificuldades: workflows complexos, ferramentas externas, limitações editoriais.

Mas e se fosse possível ter a maior parte dos benefícios de um site estático, sem abandonar o WordPress?

Por Que Sites Estáticos São Desejáveis

Sites que entregam apenas HTML, CSS e JS direto do disco dispensam processamento PHP, conexões com banco de dados e consumo elevado de CPU ou memória. Isso se traduz em:

  • Mais velocidade de carregamento
  • Redução da carga no servidor (ideal para hospedagens com muitos sites)
  • Menos superfície de ataque (nada sendo executado do lado do servidor)

Para a grande maioria dos sites de conteúdo (blogs, portais, sites institucionais), isso é tudo o que se precisa.

A Abordagem JAMstack

JAMstack é um modelo arquitetônico que propõe separar a camada de exibição do backend tradicional, servindo tudo como arquivos estáticos. O acrônimo vem de JavaScript, APIs e Markup. Em vez de renderizar as páginas no servidor a cada requisição, elas são pré-construídas e entregues por um CDN, como se fossem simples arquivos HTML.

Para isso, ferramentas como Hugo, Eleventy, Next.js, Nuxt, entre outras, são usadas para gerar os arquivos do site a partir de fontes dinâmicas — geralmente conteúdo em Markdown ou APIs externas. O deploy acontece por pipelines automatizados, com integração com Git, staging e builds progressivos.

A promessa do JAMstack é: mais velocidade, mais segurança, menos dependência de servidores PHP e bancos de dados. E, de fato, funciona.

O problema com JAMstack no mundo real

Na prática, esse modelo exige uma mudança radical na forma como se trabalha com conteúdo. O painel do WordPress, onde autores e editores estão habituados a escrever, revisar e agendar posts, precisa ser substituído por outros meios — seja por CMS headless, seja por arquivos versionados em repositórios Git.

Isso significa que o time editorial precisa entender conceitos como branchs, merge requests, builds, preview environments, além de conviver com um ciclo de publicação menos imediato.

Para desenvolvedores, esse fluxo pode ser natural. Mas para redatores, jornalistas e equipes de conteúdo que só querem “clicar em Publicar”, o JAMstack é uma barreira. Isso gera atrito, erros, e uma dependência maior da equipe técnica para tarefas simples do dia a dia.

Além disso, nem todo conteúdo precisa ser tão estático assim — e nem todo time pode se dar ao luxo de reestruturar completamente sua operação para isso.

WP Super Cache: Uma Solução que Já Estava Aí

O plugin WP Super Cache existe há anos e é amplamente utilizado para acelerar o carregamento de páginas no WordPress. Seu modo mais poderoso, porém, ainda é pouco explorado: o cache estático via .html, servido diretamente pelo Nginx ou Apache, sem passar pelo PHP.

Essa funcionalidade permite transformar o WordPress em um site quase-estático, mantendo todo o painel de administração e os plugins funcionando normalmente.

Cache Dinâmico ≠ Cache Estático

Muitos plugins de cache dizem oferecer “cache total”, mas na prática apenas armazenam o HTML em memória ou disco para ser entregue por PHP. Isso reduz o custo da renderização da página, mas ainda executa o WordPress a cada requisição.

No modo estático, o servidor web lê diretamente o arquivo .html no disco, sem chamar o PHP nem conectar ao MySQL. É isso que nos aproxima da performance de um site estático de verdade.

Transformando o WordPress em um Site Quase-Estático

Para isso, você precisa:

  1. Instalar e ativar o WP Super Cache
  2. Configurá-lo para usar o modo mod_rewrite (recomendado) ou Serve static html files
  3. Habilitar o cache para visitantes anônimos
  4. Ativar a opção de pré-carregamento (preload) para que todas as páginas sejam geradas

Só que… o preload do plugin tem limitações.

Como Garantir que Todas as Páginas Estejam Sempre Pré-Geradas

O preload do WP Super Cache roda em intervalos longos, não cobre taxonomias, CPTs ou paginações, e às vezes simplesmente deixa de funcionar.

Para resolver isso de forma profissional, criamos um script Bash que:

  • Detecta o domínio automaticamente
  • Gera a lista completa de URLs públicas (posts, páginas, categorias, tags, arquivos, paginações)
  • Faz requisições diretas ao Nginx (bypassa Cloudflare)
  • Evita hits repetidos verificando se o arquivo .html já existe
#!/usr/bin/env bash

info()    { echo -e "\033[1;36m[·] $*\033[0m"; }
ok()      { echo -e "\033[1;32m[✓] $*\033[0m"; }
skip()    { echo -e "\033[1;33m[↷] $*\033[0m"; }
fail()    { echo -e "\033[1;31m[✗] $*\033[0m"; }
section() { echo -e "\n\033[1;34m==> $*\033[0m"; }

detect_wp_root() {
  DIR="$(dirname "$(readlink -f "$0")")"
  while [[ "$DIR" != "/" ]]; do
    if [[ -f "$DIR/wp-load.php" || -f "$DIR/wp-config.php" ]]; then
      echo "$DIR"
      return
    fi
    DIR="$(dirname "$DIR")"
  done
  fail "WordPress root not found."
  exit 1
}

WP_ROOT="$(detect_wp_root)"
cd "$WP_ROOT" || exit 1

USER_AGENT="Cache-PriMer/1.0"
SLEEP_SECONDS=1
CACHE_DIR="wp-content/cache/supercache"

BASE_URL=$(wp option get home --allow-root)
DOMAIN=$(echo "$BASE_URL" | awk -F/ '{print $3}')

section "Starting cache priming for: $DOMAIN"

URLS=$(wp eval --allow-root '
$urls = [];
$posts = get_posts(["post_type" => ["post", "page"], "post_status" => "publish", "numberposts" => -1]);
foreach ($posts as $p) { $urls[] = get_permalink($p); }
$cats = get_terms(["taxonomy" => "category", "hide_empty" => true]);
foreach ($cats as $c) { $urls[] = get_term_link($c); }
$tags = get_terms(["taxonomy" => "post_tag", "hide_empty" => true]);
foreach ($tags as $t) { $urls[] = get_term_link($t); }
$post_types = get_post_types(["public" => true, "_builtin" => false], "names");
foreach ($post_types as $cpt) {
  $url = get_post_type_archive_link($cpt);
  if ($url) $urls[] = $url;
}
$page_for_posts = get_option("page_for_posts");
$base = "";
if ($page_for_posts) {
  $slug = get_post_field("post_name", $page_for_posts);
  $base = "/$slug";
}
$total_posts = wp_count_posts("post")->publish;
$pages = ceil($total_posts / get_option("posts_per_page"));
for ($i = 2; $i <= $pages; $i++) {
  $urls[] = home_url("$base/page/$i/");
}
echo implode("\n", array_filter($urls));
')

COUNT_SKIP=0
COUNT_PRIMED=0
TOTAL=$(echo "$URLS" | grep -c '^')
N=0

while IFS= read -r URL; do
  ((N++))
  RELATIVE_PATH=$(echo "$URL" | awk -F"$DOMAIN" '{print $2}')
  RELATIVE_PATH_CLEAN=$(echo "$RELATIVE_PATH" | sed 's#/$##')
  CACHE_FILE="$WP_ROOT/$CACHE_DIR/$DOMAIN$RELATIVE_PATH_CLEAN/index-https.html"
  if [[ -f "$CACHE_FILE" ]]; then
    skip "($N/$TOTAL) Already cached: $RELATIVE_PATH"
    ((COUNT_SKIP++))
    continue
  fi
  info "($N/$TOTAL) Priming: $URL"
  HTTP_CODE=$(curl -sSL --resolve "$DOMAIN:443:127.0.0.1" \
    -A "$USER_AGENT" -o /dev/null -w "%{http_code}" "$URL")
  if [[ "$HTTP_CODE" =~ ^2 ]]; then
    ok "Cached: $RELATIVE_PATH ($HTTP_CODE)"
    ((COUNT_PRIMED++))
  else
    fail "Failed: $RELATIVE_PATH ($HTTP_CODE)"
  fi
  sleep "$SLEEP_SECONDS"
done <<< "$URLS"

section "Finished"
echo -e "Total: $TOTAL | \033[1;33mSkipped: $COUNT_SKIP\033[0m | \033[1;32mPrimed: $COUNT_PRIMED\033[0m"
Code language: Bash (bash)

Esse script pode ser executado manualmente ou agendado como um cron ou systemd timer. Ele garante que as páginas mais visitadas já estejam no cache antes mesmo do primeiro visitante do dia chegar.

Vantagens Dessa Abordagem Híbrida

  • O painel do WordPress continua funcionando normalmente
  • Plugins, shortcodes e editores visuais seguem operantes
  • Nada precisa ser enviado para GitHub, Netlify ou S3
  • O tempo de carregamento das páginas é igual ao de um site HTML puro
  • Pode ser utilizado com o plugin WP Cloudflare Super Cache, para elevar a eficiência do cache ao nível máximo.

Limitações (Spoiler: Ainda Vale a Pena)

Nem tudo será cacheado: páginas administrativas, áreas com login, formulários e requisições AJAX continuarão dinâmicas. Mas para o público visitante, especialmente em portais, blogs e sites institucionais, essa abordagem entrega os mesmos benefícios de um site estático — sem abrir mão da conveniência do WordPress.

Conclusão: um Meio-Termo Eficaz

Se você precisa da performance de um site estático mas não quer (ou não pode) abandonar o WordPress, usar o WP Super Cache com priming controlado é a alternativa realista e sustentável.

Sem modismos, sem dependências externas, sem quebrar fluxos de trabalho editoriais.

Para clientes da PortoFácil, esse equilíbrio entre desempenho e praticidade já está ao alcance: basta solicitar ao suporte a ativação do cache estático com pré-carregamento. Nossa equipe cuida de todos os ajustes — desde a configuração do WP Super Cache até a instalação do script de priming automatizado — garantindo que seu site ofereça a performance de um site estático, sem abrir mão do conforto do painel do WordPress. Tudo pronto para uso, sem necessidade de tocar em linha de código.

Importante: essa técnica é ideal para blogs, portais e sites institucionais. Em sites de e-commerce — especialmente aqueles que usam WooCommerce — o cache estático completo pode não ser adequado, já que páginas como carrinho, checkout e área do cliente precisam permanecer dinâmicas para funcionar corretamente. Nesses casos, nossa equipe poderá orientar a melhor configuração personalizada.

Quero ser cliente da PortoFácil! Entre em contato

Leia também

Textos que têm a ver com este assunto:
Qual o melhor plugin de cache para o WordPress?

A escolha do melhor plugin de cache para WordPress depende de fatores como a configuração do servidor. Conheça os nossos preferidos!

Como limpar cache da Cloudflare

Neste tutorial vamos ensinar o passo a passo de como limpar cache da Cloudflare em sites e blogs em poucos cliques. Confira!

Como turbinar o WordPress com a Cloudflare

Como configurar a Cloudflare como CDN para todo o conteúdo de um site. Conheça todos os prós e contras, vantagens e desvantagens.