Como corrigir erro de serialização após migração
O que é o erro de serialização após migração?
O WordPress guarda muitos dados em formato serializado: uma string PHP que carrega o tamanho de cada valor, como s:21:”https://exemplo.com/”. Quando uma migração troca a URL com find-and-replace cru, o texto muda mas o número do tamanho não, e o PHP não consegue mais ler aquela estrutura. O resultado e widgets, opções de tema e ajustes de plugin que somem ou voltam ao padrão.
Como identificar
- Os widgets das áreas de widget desaparecem ou voltam vazios após a migração.
- As opções do tema (cores, logo, layout) resetam para o padrão mesmo sem terem sido alteradas.
- Configurações de plugins se perdem e algumas áreas do painel mostram aviso de dado corrompido.
- No banco aparecem strings serializadas com tamanho errado, como a:1:{s:21:”…”} com contagem incorreta.
Antes de começar: Faca backup completo do banco antes de qualquer substituicao: a operacao altera milhares de linhas e e irreversivel sem copia. Nunca edite a URL serializada manualmente no dump nem rode UPDATE cru, pois e exatamente isso que gera a corrupcao.
Como prevenir
- Sempre troque URLs com WP-CLI search-replace ou Better Search Replace, nunca com UPDATE de SQL ou edição do .sql
- Use um plugin de migração que já faz a substituicao tratando dados serializados ao importar
- Faca backup do banco antes e rode a substituicao em modo de teste para conferir o resultado
Causa
- Find-and-replace cru de URL feito via SQL (UPDATE) sem tratar a serialização, quebrando o tamanho das strings.
- Troca de domínio feita editando o arquivo .sql do dump em editor de texto antes de importar.
- Diferenca de tamanho entre a URL antiga e a nova (http para https, com ou sem www) alterando a contagem de caracteres.
- Plugin de busca e substituicao que não reconhece dados serializados usado na migração.
- Caminho absoluto do servidor (ex.: /home/usuário-antigo/) substituido em massa sem recontar o serializado.
Como resolver
- Restaure o backup do banco: se você ainda tem o dump original (antes do replace cru), restaure-o para partir de dados serializados integros antes de refazer a troca da forma correta.
- Use uma ferramenta que trata serialização: refaca a substituicao de URL com WP-CLI search-replace ou o plugin Better Search Replace, que recontam o tamanho das strings serializadas automaticamente.
- Rode em modo de teste primeiro: execute o search-replace com --dry-run (WP-CLI) ou marque "executar como teste" no Better Search Replace para conferir o volume antes de gravar.
- Reconfigure o que já quebrou: para widgets e opções de tema já corrompidos por um replace cru anterior, reconstrua-os manualmente, pois o dado serializado pode estar perdido.
- Limpe o cache de objetos: limpe o cache (object cache e plugin de cache) para o WordPress reler as opções já corrigidas no banco.
BASH
# CERTO: search-replace que reconta o tamanho das strings serializadas
wp search-replace 'https://dominio-antigo.com' 'https://dominio-novo.com' --all-tables --report-changes-only
# Confira antes com --dry-run, sem gravar nada:
wp search-replace 'https://dominio-antigo.com' 'https://dominio-novo.com' --all-tables --dry-run
# ERRADO (NAO faca): UPDATE cru quebra a serializacao
# UPDATE wp_options SET option_value = REPLACE(option_value,'antigo','novo');
Perguntas frequentes
O que e um dado serializado no WordPress?
E uma string PHP que armazena estruturas (arrays, objetos) com o tamanho de cada valor embutido, como s:5:"valor". Widgets, opções de tema e configurações de plugin usam esse formato. Por isso a troca de URL precisa recontar o tamanho, ou o PHP não le mais o dado.
Por que o UPDATE de SQL quebra a serialização?
Porque o UPDATE troca o texto da URL mas não atualiza o número do tamanho gravado antes da string. Se a URL nova tem comprimento diferente, a contagem fica errada e o PHP descarta a estrutura inteira, fazendo widgets e opções sumirem ou resetarem.
Já fiz o replace cru e quebrou tudo. Tem volta?
A forma mais segura e restaurar o backup do banco anterior ao replace e refazer a troca com WP-CLI search-replace. Sem backup, o dado serializado corrompido geralmente esta perdido e os widgets e opções de tema afetados precisam ser reconfigurados manualmente.
Better Search Replace e seguro para serializados?
Sim. Tanto o Better Search Replace quanto o WP-CLI search-replace reconhecem dados serializados e recalculam o tamanho das strings ao substituir. Use a opção de teste antes de gravar para conferir quantas linhas serão alteradas e em quais tabelas.
Trocar http por https também pode quebrar?
Pode, se feito com replace cru: https tem um caractere a mais que http, mudando o comprimento da string serializada. Mesmo nessa troca aparentemente simples, use search-replace que reconta o tamanho, em vez de UPDATE ou edição do dump.
Preciso de SSH para corrigir a serialização?
Não obrigatoriamente. O WP-CLI via SSH e o caminho mais robusto, mas o plugin Better Search Replace faz a mesma substituicao tratando serialização pelo painel. Em ambos, faca backup do banco antes e rode primeiro em modo de teste.














