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.
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.
# 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');














