Implantação de WordPress Headless: DNS, SSL e AI
Tech
AI
headless CMS
WordPress
Next.js

Implantação de WordPress Headless: DNS, SSL e AI

Uma implantação real de WordPress headless pode quebrar DNS, SSL, imagens e formulários. Veja como eu consertei isso em produção.

Uygar DuzgunUUygar Duzgun
Mar 27, 2026
Updated 4 de abr. de 2026
8 min read

Esta é a Parte 2 da minha série de migração do WordPress headless. Implantação de WordPress headless é onde os problemas reais começam, porque DNS, SSL, imagens, formulários e redirects quebram de formas diferentes. Na Parte 1, eu reconstruí o frontend em um dia com Claude Code, Stitch MCP e Next.js. Neste artigo, eu mostro os problemas de implantação que enfrentei, como corrigi-los, e por que a IA ainda precisava de julgamento humano.

O Problema de Implantação de WordPress Headless Sobre o Qual Ninguém Fala

Construir o frontend é a parte fácil. Na minha experiência, implantação de WordPress headless fica difícil no momento em que você divide um site em dois sistemas: Vercel para o frontend e WordPress para o backend. Você não tem mais uma stack simples. Você passa a ter DNS, certificados, URLs de mídia, endpoints REST e acesso de admin puxando em direções diferentes.

Quando `optagonen.se` mudou para o Vercel, cada requisição que antes ia para o WordPress começou a cair no novo frontend. Isso quebrou GraphQL, uploads, Contact Form 7 e acesso ao admin de uma vez. Se você está planejando sua própria implantação de WordPress headless, precisa projetar esses pontos de quebra antes de trocar o DNS.

Eu testei isso em uma migração real de produção, não em um ambiente de sandbox. A lição foi clara: o código ficou pronto rápido, mas a infraestrutura levou tempo.

Dividindo DNS para uma Implantação de WordPress Headless

A correção mais limpa foi dar ao WordPress seu próprio subdomínio: `wp.optagonen.se`. Isso separou o frontend e o backend sem me forçar a fazer reverse proxy de tudo por uma única origem. Também deixou a arquitetura mais fácil de raciocinar na hora de depurar SSL e entrega de mídia.

DomínioAponta paraFinalidade
---------
`optagonen.se`VercelFrontend no Next.js
`wp.optagonen.se`Servidor de origemBackend do WordPress

Eu adicionei `wp.optagonen.se` como um alias no Hestia, apontei o registro DNS A para o IP da origem e atualizei a variável de ambiente do frontend:

`WP_URL=https://wp.optagonen.se`
`CF7_FORM_ID=8`
`WP_APP_PASSWORD=...`

Essa parte é simples no papel. Na prática, a implantação de WordPress headless expôs uma reação em cadeia. Todo sistema que assumia o domínio antigo precisava de um novo destino.

Implantação de WordPress Headless e Falhas de Certificado SSL

A primeira coisa que quebrou foi o SSL. O certificado antigo do Let's Encrypt só cobria `optagonen.se` e `www.optagonen.se`, então `https://wp.optagonen.se` falhou imediatamente. Isso é comportamento esperado. O Let's Encrypt valida a propriedade do domínio por hostname, e o navegador rejeita a conexão se o certificado não corresponder.

A renovação embutida do Hestia falhou porque ele ainda tentava validar o domínio principal via HTTP-01, mas o domínio principal agora apontava para o Vercel. O Certbot falhou por outro motivo: o Hestia interceptou o desafio ACME e retornou seu próprio thumbprint em vez do do Certbot. Esse é o tipo de conflito que a IA não consegue inferir a partir de primeiros princípios. Você precisa saber como o painel se comporta.

Eu corrigi isso movendo temporariamente a configuração do desafio ACME do Hestia para fora do caminho include do nginx, emitindo um certificado apenas para `wp.optagonen.se` e, depois, copiando os arquivos renovados de volta para o diretório SSL do Hestia. Também adicionei um hook de renovação para o processo continuar automático.

Para ter confiança, eu me apoiei na documentação oficial do Let's Encrypt e do Certbot. Isso ajudou a confirmar o fluxo ACME antes de eu mexer novamente na produção.

Por que a Implantação de WordPress Headless Rejeitou o Subdomínio

Assim que o SSL funcionou, o WordPress ainda não aceitou o novo host. Em vez de retornar dados de GraphQL, ele redirecionou para `/wp-signup.php`. Isso me disse que o WordPress não gostou do header de host recebido.

A correção foi uma única diretiva do nginx:

`proxy_set_header Host optagonen.se;`

Essa linha fez o WordPress se comportar como se as requisições ainda estivessem vindo do domínio principal, enquanto o navegador permanecia em `wp.optagonen.se`. Em uma implantação de WordPress headless, esse tipo de normalização de host importa mais do que as pessoas esperam. O WordPress é bem opinativo sobre URLs do site.

Eu já vi essa mesma classe de problema aparecer em outras migrações também. O frontend funciona, o backend responde e, então, um header de host que não bate silenciosamente quebra o fluxo de sessão.

As Imagens Quebraram Depois da Implantação de WordPress Headless

Depois do deploy, toda imagem retornou um erro 502. Isso aconteceu porque as URLs de mídia do WordPress ainda apontavam para `/wp-content/uploads/...`, e esses caminhos agora eram resolvidos contra o Vercel em vez do servidor de origem. Na minha configuração, o problema veio de dois lugares: URLs hardcoded em arquivos estáticos e URLs dinâmicas retornadas pelo WPGraphQL.

Eu corrigi primeiro as URLs hardcoded. Substituí todas as referências `https://optagonen.se/wp-content/uploads/` por `https://wp.optagonen.se/wp-content/uploads/` em seis arquivos. Isso cobriu cerca de 70 caminhos de imagens.

Depois, corrigi as URLs dinâmicas de GraphQL com uma rewrite no Next.js:

`/wp-content/uploads/:path*` → `https://wp.optagonen.se/wp-content/uploads/:path*`

Isso manteve o frontend limpo e evitou reescrever dados de mídia dentro do WordPress. Também deixou a implantação de WordPress headless mais fácil de manter, porque o navegador ainda requisita o mesmo caminho enquanto o servidor faz o proxy.

Recommended reading

Se você quiser se aprofundar nesse tipo de design de sistema, eu recomendo ler meu workflow de migração de WordPress com IA e meu pipeline de conteúdo multi-agent. Esses posts mostram como eu estruturo sistemas de infraestrutura e conteúdo em torno de automação.

Formulários de Contato, IDs e o Último Perigo da Implantação

O Contact Form 7 parecia estar tudo bem no começo, mas o formulário parou de funcionar porque o ID no frontend estava errado. O ID padrão do formulário era `1`, mas o formulário real no WordPress era `8`. Uma checagem rápida via API confirmou isso.

Foi um ajuste pequeno, mas importa. Em uma implantação de WordPress headless, um ID errado pode fazer um formulário que funciona parecer quebrado mesmo quando o backend está saudável. Eu defini `CF7_FORM_ID=8` e o formulário voltou a ficar online imediatamente.

É por isso que eu sempre testo o fluxo completo manualmente:

Envie o formulário a partir do frontend ao vivo.
Verifique a requisição de rede.
Confirme a resposta no WordPress.
Verifique se os dados chegam na caixa de entrada ou no CRM.

Essa sequência detecta problemas mais rápido do que ficar adivinhando apenas pelos logs.

O que a IA Ajudou e o que Ela Não Percebeu

Claude Code me ajudou a ir rápido, mas não substituiu entender. Ele lidou bem com as partes repetitivas: buscar em arquivos de configuração, gerar snippets do nginx, ajudar com comandos do certbot e substituir URLs de imagens em lote. Ele também manteve a cadeia de erros na memória, o que economizou tempo quando uma correção criava outro problema.

No entanto, a IA não conseguiu decidir a arquitetura completa. Ela não sabia que o Hestia interceptaria requisições ACME. Ela não sabia quando usar um subdomínio em vez de um reverse proxy. E ela não sabia a ordem das operações que evitaria downtime.

Recommended reading

Esse é o valor real da IA em uma implantação de WordPress headless: ela acelera o diagnóstico, mas você ainda precisa da pessoa que entende a stack. Eu uso o mesmo princípio no meu trabalho construindo sistemas de automação com IA para e-commerce e no meu trabalho com pipeline de conteúdo.

Arquitetura Final Depois da Implantação

Depois das correções, a stack ficou dividida de forma limpa:

ComponenteLocalFinalidade
---------
Frontend Next.jsVercelServe páginas e faz routing
WordPress + WPGraphQL`wp.optagonen.se`API de conteúdo e armazenamento de mídia
Contact Form 7`wp.optagonen.se`Tratamento de formulários
Proxy de imagemRegra de rewrite do Next.jsRoteia uploads para a origem
SSL do frontendVercelGerenciamento automático
SSL do backendCertbot + renewal hookCertificados renovados automaticamente

Essa estrutura é estável e fácil de depurar. Ela também mantém o frontend rápido enquanto preserva o fluxo editorial dentro do WordPress. Em uma implantação de WordPress headless, esse equilíbrio é o objetivo.

Lições Desta Implantação de WordPress Headless

Aqui está o que eu aprendi com a migração:

Mudanças de DNS quebram mais do que você imagina, especialmente quando um domínio agora atende dois sistemas.
SSL geralmente falha primeiro, porque a validação do certificado depende do roteamento.
Painéis de servidor e ferramentas externas de ACME podem entrar em conflito se gerenciam o mesmo domínio.
URLs de imagens vivem em mais lugares do que você imagina, incluindo arquivos estáticos e saída do GraphQL.
IA é útil para depurar, mas não substitui o julgamento de infraestrutura.

Essas lições vieram de uma mudança real em produção, não de um tutorial. Por isso, agora eu aloco tanto tempo para implantação quanto eu aloco para construir.

Conclusão

Implantação de WordPress headless não é difícil por causa do código. É difícil porque DNS, SSL, mídia e headers de host dependem um do outro. Nesta migração, eu corrigi a divisão por subdomínio, a validação de certificado, a entrega de imagens e o Contact Form 7, e aprendi exatamente onde a IA ajuda e onde ela para.

Se você está planejando sua própria migração, leia primeiro a reconstrução do frontend, teste o fluxo de certificado cedo e verifique cada caminho de mídia antes de colocar no ar. Depois, verifique o site ao vivo, confirme os formulários e garanta que o backend ainda se comporte do jeito que o WordPress espera.

Se você quiser mais detalhamentos práticos de implantação, continue lendo os posts relacionados e compare com sua própria stack. Essa é a forma mais rápida de evitar erros na sua próxima implantação de WordPress headless.

Sugestão de texto alternativo para imagem:

Screenshot da arquitetura com split entre Vercel e WordPress mostrando os domínios do frontend e do backend
Configuração de SSL no painel Hestia para renovação do certificado em wp.optagonen.se
Regra de rewrite do Next.js mapeando uploads do WordPress para o servidor de origem