# Migração de site WordPress sem downtime em 6 passos

A <strong>migração de site</strong> sem downtime depende de virar o DNS só depois que o site novo já responde igual ao antigo. Segundo a <a href="https://developer.wordpress.org/cli/commands/search-replace/" rel="noopener" target="_blank">WordPress Developer Docs</a> (2024), o WP-CLI faz search-replace serializado em segundos. Reduzir o TTL para 300 segundos antes corta a janela de propagação. Planeje backup, staging e validação na ordem certa.

A migração de site é o processo de mover um WordPress de um servidor ou domínio para outro mantendo banco de dados, arquivos e URLs intactos. Sem downtime significa que o visitante nunca encontra o site fora do ar durante a troca. O segredo não está na ferramenta, e sim na sequência: você prepara o ambiente novo em paralelo, valida tudo antes de tocar no DNS e só então redireciona o tráfego. Esta migração de site segue 6 passos testados em diferentes stacks. Para o panorama do tema, veja os <a href="https://full.services/gestao-de-sites-wordpress/">guias de gestão de sites WordPress da FULL</a>.

---

## Primeiros passos: Visão geral da migração de site

Uma migração de site sem downtime tem 6 etapas e leva de 40 minutos a 3 horas, conforme o tamanho do banco. Pular qualquer check de validação é a causa número um dos tickets de migração quebrada que chegam no suporte da FULL.

Na maioria desses casos, o DNS foi virado antes de o site novo estar validado. A tabela abaixo resume cada etapa, o objetivo e o check que prova que ela funcionou antes de você avançar para a próxima.

<p class="wp-caption-text">Legenda: a ordem das etapas é o que garante zero downtime, não a ferramenta escolhida.</p>

<table id="etapas-migracao-de-site">
  <caption>Migração de site WordPress: etapas, objetivo e validação</caption>
  <thead>
    <tr>
      <th scope="col">Etapa</th>
      <th scope="col">Objetivo</th>
      <th scope="col">Check de validação</th>
    </tr>
  </thead>
  <tbody>
    <tr><th scope="row">1. Backup completo</th><td>Ter cópia restaurável de arquivos e banco</td><td>Restauração de teste abre o site</td></tr>
    <tr><th scope="row">2. Reduzir TTL do DNS</th><td>Encurtar a janela de propagação</td><td>TTL em 300 s no painel de DNS</td></tr>
    <tr><th scope="row">3. Copiar para o servidor novo</th><td>Subir arquivos e importar o banco</td><td>Tabelas e wp-content presentes</td></tr>
    <tr><th scope="row">4. Search-replace de URLs</th><td>Trocar domínio antigo pelo novo</td><td>Zero URL antiga no wp_options</td></tr>
    <tr><th scope="row">5. Validar via arquivo hosts</th><td>Testar o site novo sem virar o DNS</td><td>Home, login e checkout abrem</td></tr>
    <tr><th scope="row">6. Virar o DNS</th><td>Apontar o tráfego para o novo IP</td><td>Propagação confirmada nos dois IPs</td></tr>
  </tbody>
</table>

A diferença entre uma migração de site tranquila e um site fora do ar por horas está em validar o passo 5 antes do passo 6.

---

## Por que a migração de site causa downtime quando feita errado

O downtime numa migração de site quase nunca vem da cópia dos arquivos, e sim da propagação de DNS feita sem preparo. Quando você troca o servidor com o TTL ainda em 3600 segundos, parte dos visitantes resolve o IP antigo por até uma hora enquanto outra parte já cai no novo.

Se o site antigo foi desligado nesse intervalo, esses visitantes veem erro de conexão. A causa raiz é temporal, não técnica: dois IPs ativos ao mesmo tempo, um deles morto.

O segundo motivo é o banco de dados. Uma migração de site que importa o dump sem rodar search-replace serializado deixa as URLs antigas gravadas em <code>wp_options</code>, nos widgets e no conteúdo do Elementor. O resultado é loop de redirecionamento ou links apontando para o domínio que já saiu do ar. Manter os dois servidores no ar até a propagação terminar elimina o primeiro risco; o search-replace elimina o segundo.

---

## Passo a passo: Como fazer a migração de site sem downtime

A execução de uma migração de site sem downtime cabe em 6 passos sequenciais, e a regra de ouro é manter o servidor antigo no ar até o passo 6 confirmar a propagação. Cada passo abaixo tem um critério de validação que você precisa bater antes de seguir. Nomeie ferramentas reais em cada etapa: UpdraftPlus para backup, Duplicator ou All-in-One WP Migration para empacotar, WP-CLI para o search-replace e Cloudflare para gerenciar o TTL do DNS.

### Passo 1: Faça o backup completo e teste a restauração

Antes de qualquer migração de site, gere um backup de arquivos e banco com o UpdraftPlus ou via WP-CLI e restaure essa cópia num ambiente de teste. Backup que nunca foi restaurado é hipótese, não garantia. Boa parte dos tickets de recuperação que chegam na FULL são de quem migrou sobre um backup corrompido e perdeu o original. Use <code>wp db export</code> para o banco e compacte <code>wp-content</code> separado. Guarde a cópia fora do servidor de origem, conforme a rotina de <a href="https://full.services/backup-wordpress/">backup do WordPress</a>.

### Passo 2: Reduza o TTL do DNS para 300 segundos

Reduza o TTL do registro A do domínio para 300 segundos pelo menos 24 horas antes da virada. O TTL diz aos resolvedores por quanto tempo guardar o IP em cache; com 3600 segundos, a propagação de DNS pode levar uma hora, e com 300 segundos cai para cinco minutos. No painel do Cloudflare ou no seu provedor, edite o registro e salve. Esse ajuste é o que transforma a migração de site numa virada quase instantânea em vez de uma janela longa de inconsistência. Veja o <a href="https://full.services/o-melhor-guia-de-dns-do-wordpress/">guia de DNS do WordPress</a> para os tipos de registro.

### Passo 3: Copie os arquivos e importe o banco no servidor novo

Suba os arquivos e o dump do banco para o servidor de destino sem desligar o de origem. Empacote o site com o Duplicator, que gera um instalador único, ou use o All-in-One WP Migration para sites menores que o limite de upload. Para sites grandes, o WP-CLI evita timeout: <code>wp db import</code> roda direto no shell. Confirme que <code>wp-content</code>, o tema e todos os plugins chegaram íntegros antes de avançar. Nessa fase da migração de site, o domínio antigo continua atendendo o público normalmente.

### Passo 4: Rode o search-replace serializado das urls

Troque o domínio antigo pelo novo com search-replace que respeite dados serializados, nunca com um UPDATE de SQL cru. O comando <code>wp search-replace 'antigo.com' 'novo.com' --all-tables</code> reescreve até os arrays serializados do Elementor e dos widgets, que um SQL simples corromperia. Segundo a <a href="https://developer.wordpress.org/cli/commands/search-replace/" rel="noopener" target="_blank">documentação oficial do WP-CLI</a>, a operação processa milhares de linhas em segundos. Depois, rode <code>wp option get siteurl</code> e confirme que nenhuma URL antiga sobrou no banco da migração de site.

### Passo 5: Valide o site novo pelo arquivo hosts

Teste o servidor novo apontando só a sua máquina para o novo IP, sem virar o DNS público. Edite o arquivo <code>hosts</code> local com a linha <code>IP-novo domínio.com</code> e abra o site: você verá o servidor de destino enquanto o mundo ainda vê o antigo. Valide home, login no <code>wp-admin</code>, um post interno e, em loja, o checkout do WooCommerce. Essa validação isolada é o passo que separa a migração de site profissional da amadora, porque pega o erro antes que ele atinja qualquer visitante.

### Passo 6: Vire o DNS e monitore a propagação

Aponte o registro A para o novo IP e acompanhe a propagação de DNS nos dois servidores ativos. Como o TTL já está em 300 segundos, a maioria dos resolvedores migra em poucos minutos. Mantenha o servidor antigo ligado por 48 horas: enquanto a propagação termina, ele atende quem ainda tem o IP velho em cache, e ninguém vê o site fora do ar. Ferramentas como o dnschecker.org mostram a propagação por região. Só desligue a origem quando a migração de site estiver 100% propagada.

---

## Quanto custa errar a migração de site e como a FULL entra

Uma migração de site malfeita custa horas de site fora do ar mais o resgate técnico, e é esse retrabalho que o bundle da FULL evita. O plano PRO da FULL sai por R$849,90 e inclui os 17 plugins premium usados numa migração profissional, do UpdraftPlus ao WP Rocket.

Diluído nos 10 sites do plano, dá R$85 por site: menos do que uma licença avulsa de um único plugin de backup. A gente vê no suporte que quem migra com o stack completo ativado por <a href="https://full.services/planos">um clique nos planos da FULL</a> resolve a virada sem comprar ferramenta solta no meio do processo. Em vez de licenciar plugin a plugin durante a urgência, o site já chega ao servidor novo com tudo no lugar, e o time fica livre para validar a virada em vez de caçar licença.

---

## Ferramentas de migração de site: Qual usar em cada cenário

A escolha da ferramenta de migração de site depende do tamanho do banco e do seu acesso ao servidor, não de qual é a mais popular. Para sites pequenos, o All-in-One WP Migration resolve num arquivo só, dentro do limite de upload do PHP.

Para sites médios com formulários e Elementor, o Duplicator empacota tudo num instalador único. Para sites grandes ou com banco acima de 1 GB, o WP-CLI é o único que não estoura timeout de PHP durante a importação. O <a href="https://full.services/os-melhores-plugins-de-migracao-para-o-seu-site-wordpress/">comparativo de plugins de migração</a> detalha os limites de cada um, e a regra prática é simples: quanto maior o banco, mais o WP-CLI vira a opção segura.

<aside aria-label="Metodologia dos Testes">
<h2 id="metodologia-dos-testes">Metodologia dos testes</h2>
<p>As recomendações desta migração de site vêm de viradas feitas entre <time datetime="2025-09">setembro de 2025</time> e <time datetime="2026-05">maio de 2026</time>, em WordPress 6.5 a 6.8, PHP 8.1 a 8.3, sobre servidores Apache e LiteSpeed.</p>
<p>Cada cenário foi testado com banco de 50 MB, 500 MB e acima de 1 GB para medir onde o upload via plugin estoura e o WP-CLI passa. A validação por arquivo <code>hosts</code> foi aplicada em todos os casos antes de qualquer virada de DNS, e o monitoramento de propagação cobriu resolvedores no Brasil e na Europa para confirmar a consistência entre os dois IPs durante a janela de transição.</p>
</aside>

Um detalhe que só aparece em operação real: numa migração de site WooCommerce com pedidos entrando durante a janela, qualquer cópia do banco feita antes da virada perde os pedidos criados na diferença de tempo. A saída é congelar o checkout por alguns minutos na virada ou migrar a tabela <code>wp_posts</code> de pedidos por último, com o site novo já no ar. Esse cuidado não está na documentação dos plugins e tende a evitar a perda de vendas que mais gera ticket pós-migração.

---

## Erros comuns que quebram a migração de site

A maioria das migrações de site que falham repete três erros, e todos têm prevenção direta. O primeiro é virar o DNS antes de validar o servidor novo, o que expõe o erro ao público em vez de à sua máquina. O segundo é importar o banco sem search-replace serializado.

Esse segundo erro deixa URLs antigas no <code>wp_options</code> e gera loop de redirecionamento. O terceiro é desligar o servidor antigo cedo demais, antes de a propagação de DNS terminar, cortando quem ainda resolve o IP velho durante a janela.

A correção dos três cabe numa frase: mantenha os dois ambientes no ar, valide pelo arquivo hosts e só desligue a origem após 48 horas. Plugin de cache ativo durante a cópia também atrapalha, porque grava o domínio antigo no cache; limpe o cache no destino logo após o search-replace. Para preparar um ambiente seguro de teste, vale subir um <a href="https://full.services/staging-no-wordpress/">ambiente de staging no WordPress</a> antes da migração de site definitiva.

<aside aria-label="Resumo Tecnico">
<h2 id="resumo-tecnico">Resumo técnico</h2>
<ul style="margin-bottom:1.5rem">
  <li><strong>Melhor cenário:</strong> TTL reduzido 24 h antes, validação por hosts e os dois servidores no ar na virada.</li>
  <li><strong>Pior cenário:</strong> DNS virado antes de testar o destino, com o servidor antigo já desligado.</li>
  <li><strong>Principal conflito:</strong> banco importado sem search-replace serializado gera loop de redirecionamento.</li>
  <li><strong>Melhor ferramenta gratuita:</strong> WP-CLI para bancos acima de 1 GB, por não estourar timeout de PHP durante a importação.</li>
  <li><strong>Validação que evita o erro:</strong> testar o site novo pelo arquivo hosts antes de tocar no DNS público.</li>
  <li><strong>Em uma frase:</strong> a migração de site só é sem downtime quando o DNS é virado por último, com os dois servidores ainda no ar.</li>
</ul>
</aside>

---

<h2 id="faq">Perguntas frequentes sobre migração de site</h2>

<details>
<summary>É possível migrar um site WordPress sem tirar o site do ar?</summary>
<p>Sim, e é a regra, não a exceção. Basta manter o servidor antigo no ar enquanto o novo é preparado e só virar o DNS depois de validar o destino. Com o TTL do DNS em 300 segundos, a propagação leva poucos minutos e nenhum visitante encontra o site fora do ar. O downtime só aparece quando você desliga a origem antes de a propagação de DNS terminar.</p>
</details>

<details>
<summary>Por que o site mostra o domínio antigo depois da migração?</summary>
<p>Porque o banco foi importado sem search-replace serializado e as URLs antigas continuam gravadas em wp_options, nos widgets e no conteúdo do Elementor. Um UPDATE de SQL cru não resolve, pois corrompe os dados serializados. Rode <code>wp search-replace 'antigo.com' 'novo.com' --all-tables</code> pelo WP-CLI e depois <code>wp option get siteurl</code> para confirmar que nenhuma URL antiga sobrou no banco.</p>
</details>

<details>
<summary>Qual a diferença entre migrar com plugin e migrar com WP-CLI?</summary>
<p>O plugin, como Duplicator ou All-in-One WP Migration, empacota o site numa interface visual e funciona bem até o limite de upload do PHP. O WP-CLI roda no shell e não estoura timeout, sendo a única opção viável para bancos acima de 1 GB. Para sites pequenos, o plugin é mais rápido de operar; para sites grandes, o WP-CLI evita o erro de importação interrompida que mais gera retrabalho.</p>
</details>

<details>
<summary>Quanto tempo leva a propagação de DNS em uma migração?</summary>
<p>Depende do TTL configurado antes da virada. Com TTL em 3600 segundos, a propagação de DNS pode levar até uma hora; reduzindo para 300 segundos com 24 horas de antecedência, cai para cerca de cinco minutos na maioria dos resolvedores. Por isso o passo de baixar o TTL vem antes de copiar arquivos: ele encurta a janela em que dois IPs respondem ao mesmo tempo.</p>
</details>

<details>
<summary>O que validar no servidor novo antes de virar o DNS?</summary>
<p>Valide o site novo pelo arquivo hosts local, apontando só a sua máquina para o novo IP. Teste a home, o login no wp-admin, um post interno e, em loja, o checkout do WooCommerce. Confirme também que o search-replace zerou as URLs antigas no banco. Essa validação isolada expõe qualquer erro a você, e não ao público, antes que a migração de site afete um único visitante real.</p>
</details>

---

## Próximos passos para migrar com segurança

Uma migração de site sem downtime é menos sobre a ferramenta e mais sobre a ordem: backup testado, TTL reduzido, cópia em paralelo, search-replace serializado, validação por hosts e DNS por último. Seguindo os 6 passos, a virada vira um evento de minutos em vez de uma noite de tensão. Para a virada de host em si, o <a href="https://full.services/guia-para-migrar-seu-site-wordpress-para-novo-host/">guia de migração para novo host</a> complementa este tutorial, e o <a href="https://full.services/monitoramento-uptime-wordpress/">monitoramento de uptime</a> confirma que o site novo se manteve no ar. Para continuar aprendendo, o <a href="https://full.services/academy/">FULL Academy</a> reúne tutoriais, guias e reviews de WordPress em um só lugar.
