Migrando sites com all-in-one WP migration sem quebrar URL, mídia e login
Voltar para blog

Migrando sites com all-in-one WP migration sem quebrar URL, mídia e login

07/06/2026 · 6 min · WordPress

Migrando sites com All-in-One WP Migration sem quebrar URL, mídia e login#

O plugin All-in-One WP Migration acelera migrações, mas quando usado sem preparação técnica de infraestrutura pode gerar erros de upload, timeouts, links quebrados, mídias invisíveis e loops de login. Este é o procedimento operacional que utilizo para migrar ambientes WordPress com total previsibilidade.


1. Pré-requisitos e verificação de compatibilidade#

Antes de gerar ou importar pacotes de migração, é vital auditar se o ambiente de origem e o de destino são compatíveis para evitar conflitos de banco de dados e bugs de execução PHP.

Verificar versões do WordPress core e banco de dados#

A origem e o destino devem estar preferencialmente na mesma versão do WordPress major:

# Consultar a versão atual do WordPress no destino
wp core version

# Consultar a versão no diretório de origem (se acessível no mesmo servidor)
wp core version --path=/var/www/origem

# Verificar a versão da estrutura do banco de dados registrada
wp option get db_version

# Verificar se há atualizações pendentes
wp core check-update

2. Protocolo de backup mandatório pré-import#

Nunca inicie um processo de importação de arquivo .wpress no WordPress de destino sem antes criar pontos de restauração física e lógica locais. O processo de importação sobrescreve completamente o banco de dados e arquivos existentes.

1. Backup lógico (SQL) e de arquivos do destino#

# Exportar banco de dados atual do destino antes da importação
wp db export /root/destino-pre-import-$(date +%Y%m%d).sql

# Backup completo compactado dos arquivos do WordPress do destino
tar czf /root/wp-backup-$(date +%Y%m%d).tar.gz /var/www/html/

2. Snapshots do hipervisor (se em máquina virtual)#

Se o servidor for hospedado em uma estrutura de virtualização dedicada:

# Exemplo Proxmox VE (por CLI)
vmsnapshot 100 "Pre-migration-$(date +%Y%m%d)"

# Exemplo VMware ESXi (por CLI vmsvc)
vmware-vim-cmd vmsvc/snapshot.create 100 "Pre-migration" "Snapshot antes do import"

3. O motor de importação e limites do PHP#

Se o arquivo .wpress exportado da origem for maior do que os limites de upload configurados por padrão no servidor, configure o arquivo php.ini ou .user.ini do destino:

upload_max_filesize = 2048M
post_max_size = 2048M
max_execution_time = 600
max_input_time = 600
memory_limit = 512M

Após editar estes valores no servidor, recarregue o serviço do PHP-FPM (systemctl reload php-fpm ou similar) para que as diretivas entrem em vigor.


A migração de dados acarreta na importação de URLs e caminhos da estrutura de arquivos da antiga origem. Se o domínio do site mudou, ou se as referências de uploads eram diferentes, é mandatório rodar o wp search-replace via WP-CLI para atualizar todas as referências no banco de dados.

1. Verificar as URLs definidas atualmente#

# Consultar URLs base nas configurações do WordPress
wp option get siteurl
wp option get home

# Verificar as configurações lendo diretamente a tabela do banco
wp db query "SELECT option_value FROM wp_options WHERE option_name IN ('siteurl', 'home')"

2. Localizar referências ao domínio antigo#

Descubra se ainda existem links para a URL antiga salvos no conteúdo de posts:

wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%url-antiga.com%'"

3. Executar o search-replace seguro#

Sempre execute com a flag --dry-run primeiro para verificar a quantidade de alterações que seriam aplicadas:

# Simulação segura (sem gravar no banco de dados)
wp search-replace 'https://url-antiga.com' 'https://url-nova.com' --all-tables --dry-run

# Executar a alteração real em todas as tabelas
wp search-replace 'https://url-antiga.com' 'https://url-nova.com' --all-tables

Após atualizar as URLs, é mandatório regenerar a estrutura de links permanentes (Permalinks) para reconstruir o arquivo .htaccess ou regras do Nginx:

# Atualizar a estrutura de permalinks via CLI
wp rewrite flush --hard

5. Auditoria de permissões de arquivos e diretórios#

Após a importação e descompactação feita pelo plugin, o ownership dos arquivos e as permissões de acesso podem sofrer alterações drásticas. Restabeleça as diretivas seguras de permissão (hardening):

1. Auditoria e validação das permissões atuais#

# Verificar permissões gerais no diretório base do WordPress
find /var/www/html/ -maxdepth 1 -exec stat -c "%a %U:%G %n" {} \;

# Verificar especificamente as permissões e donos do wp-config.php (segurança crítica)
stat -c "%a %U:%G %n" /var/www/html/wp-config.php

# Verificar permissões no diretório de uploads
find /var/www/html/wp-content/uploads -type d -exec stat -c "%a %n" {} \; | head -10

2. Aplicar hardening e permissões seguras#

Diretórios devem ter permissão 755, arquivos normais 644, o arquivo de credenciais wp-config.php deve ser restrito a 600 ou 640, e o dono do diretório deve ser o usuário do servidor web (ex: www-data ou nginx):

# Definir proprietário do diretório de forma recursiva
chown -R www-data:www-data /var/www/html/

# Ajustar permissões para diretórios
find /var/www/html/ -type d -exec chmod 755 {} \;

# Ajustar permissões para arquivos
find /var/www/html/ -type f -exec chmod 644 {} \;

# Proteger o arquivo de configuração
chmod 600 /var/www/html/wp-config.php

6. Configuração e validação de SSL/TLS pós-migração#

A migração muitas vezes aponta o site para HTTPS sem garantir que o novo servidor tenha um certificado SSL/TLS ativo e encadeado de forma íntegra.

1. Auditar certificado SSL via CLI#

Valide o certificado ativo do novo domínio consultando o servidor web de destino:

# Testar a resposta de cabeçalhos HTTPS do site
curl -I https://dominio.com/

# Inspecionar detalhes e validade das datas do certificado SSL
echo | openssl s_client -connect dominio.com:443 2>/dev/null | openssl x509 -noout -subject -dates

# Verificar a quantidade de certificados na cadeia (verificar integridade da chain)
echo | openssl s_client -connect dominio.com:443 -showcerts 2>/dev/null | grep -c "BEGIN CERTIFICATE"

Valide a integridade do arquivo local gerado para o domínio no servidor:

openssl verify /etc/letsencrypt/live/dominio.com/fullchain.pem

2. Configurar novo certificado via let's encrypt#

Caso utilize Certbot nativo em servidor Apache ou Nginx:

# Emitir e aplicar o certificado SSL/TLS automaticamente no Nginx
certbot --nginx -d dominio.com -d www.dominio.com

7. Verificação de DNS e propagação#

Para garantir a virada do tráfego (cutover) sem quedas, verifique as configurações de TTL e propagação de DNS.

# Verificar o tempo de cache (TTL) atual nas zonas DNS do domínio
dig dominio.com | grep -A1 "ANSWER SECTION"

# Consultar se a propagação do IP do novo servidor já atingiu os resolvers públicos primários
for dns in 8.8.8.8 1.1.1.1; do
    echo "Servidor DNS $dns aponta para: $(dig @$dns +short dominio.com)"
done

# Confirmar se o IP final corresponde ao novo servidor
dig dominio.com +short

8. Verificação e limpeza de CDN e cache de borda#

Se o domínio estiver rodando sob serviços de CDN (como Cloudflare), limpe o cache para que o conteúdo dinâmico e estático seja puxado do novo host.

# Verificar se os cabeçalhos de borda da CDN (ex: cf-ray) já respondem a requisição
curl -I https://dominio.com/ | grep -i -E "cf-ray|server"

# Disparar a limpeza (purge) total do cache da Cloudflare via API
curl -X DELETE "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/purge_cache" \
  -H "X-Auth-Email: <EMAIL>" \
  -H "X-Auth-Key: <KEY>" \
  -H "Content-Type: application/json" \
  --data '{"purge_everything":true}'

9. Verificação de cron jobs e e-mails#

Muitas instalações WordPress param de enviar notificações e processar agendamentos após a migração porque as configurações internas de disparo foram corrompidas ou o wp-cron foi desabilitado.

1. Auditoria e execução de cron jobs#

Verifique se a fila de eventos programados do WordPress está em execução regular:

# Listar eventos de cron ativos no WordPress
wp cron event list

# Validar se o wp-cron do sistema do site foi desabilitado em wp-config.php
wp config get DISABLE_WP_CRON

# Forçar a execução de todos os eventos de cron pendentes para teste
wp cron event run --all

# Listar os crontabs do sistema operacional
crontab -l
crontab -l -u www-data

2. Validação da fila de e-mails e SMTP#

Valide se o servidor de destino consegue entregar e-mails e se as configurações de SMTP estão corretas:

# Consultar configurações ativas de SMTP
wp option get smtp_host
wp option get smtp_port

# Enviar e-mail de teste via WP-CLI para verificar o pipeline de envio
wp mail [email protected] "Teste de Servidor" "Este é um e-mail de teste pós-migração."

# Monitorar a fila de e-mails do sistema de e-mail local (Postfix/Exim)
tail -50 /var/log/mail.log

Checklist: migração com all-in-one WP migration#

Fase 1: Pré-migração (origem)#

Fase 2: Preparação do destino#

Fase 3: Importação e ajustes de banco#

Fase 4: Cutover e homologação#


Tabela comparativa de problemas e severidade#

Problema MapeadoSeveridadeCategoriaDescrição e Solução
Falta de backup pré-import no destinoAltaRiscoA importação sobrescreve dados locais de forma irreversível sem backup.
Incompatibilidade de versão do WordPressMédiaCompatibilidadeVersões distantes do Core geram falhas de serialização de tabelas SQL no import.
Permissões inválidas em arquivos pós-importMédiaSegurançaPermissões frouxas ou ownership do wp-config.php expõem dados a outros usuários.
SSL/TLS mal configurado ou inválidoMédiaSegurançaO site quebra com mensagens de "Conexão Não Segura" ou erros de Mixed Content.
Falhas na propagação e TTL do DNSMédiaMigraçãoClientes acessam servidores diferentes de forma alternada devido ao cache de DNS alto.
Cache de CDN (Cloudflare) desatualizadoBaixaCacheVisitantes continuam vendo a versão estática hospedada no host antigo.
WP-Cron desativado ou travadoMédiaFuncionalidadeFalha em posts agendados e disparo de rotinas automáticas de plugins.
Falha no SMTP e envio de e-mailsBaixaConfiguraçãoFormulários de contato e notificações de transações param de funcionar.
URLs antigas remanescentes no bancoMédiaIntegridadeImagens com link quebrado e menus direcionando o usuário para o site antigo.

Rollback#

Sempre mantenha a infraestrutura antiga de origem ativa e intocada por no mínimo 72 horas pós-migração. Em caso de falha sistêmica insustentável no destino, reverta a zona de DNS para apontar para o IP de origem e restabeleça a operação original sem perda de dados.

Este artigo foi útil?

Deixe uma reação rápida para apoiar o conteúdo:

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.

0 comentários