Como corrigir o conflito de GUID após migração no WordPress
O que é o conflito de GUID após migração?
Conflito de GUID após migração é o problema causado por alterar a coluna guid da tabela de posts ao trocar de domínio. O GUID é um identificador único e permanente de cada post, gerado uma vez na publicação e nunca pensado para mudar, mesmo que pareça uma URL. Quando uma busca e substituição troca o domínio também no GUID, leitores de feed RSS, que usam o GUID para saber se já mostraram um item, passam a ver todos os posts como novos e os reentregam duplicados aos assinantes.
Como identificar
- Assinantes do feed RSS e do e-mail recebem todos os posts antigos de novo, como se fossem publicações novas, após a migração.
- Agregadores e leitores de feed listam cada post duplicado, um com o GUID antigo e outro com o novo domínio.
- Na tabela wp_posts, a coluna guid mostra o domínio novo em vez do domínio original em que o post foi publicado.
- Plugins que usam o GUID como referência (alguns de mídia ou importação) apontam para caminhos que retornam 404.
Antes de começar: Nunca rode um UPDATE na coluna guid sem backup completo e sem ter certeza do domínio original exato. Restaurar o GUID para um valor errado piora o problema e pode duplicar os posts uma segunda vez nos leitores de feed.
Como prevenir
- Sempre rode o search-replace com a flag que pula a coluna guid ao trocar de domínio
- Trate o GUID como identificador permanente: ele pode continuar com o domínio antigo sem prejuízo ao site
- Faça backup do banco antes de qualquer migração e confira o feed RSS num leitor logo após a troca de domínio
Causa
- Uma busca e substituição ampla trocou o domínio em todas as colunas, incluindo a coluna guid de wp_posts, que jamais deveria mudar.
- Um UPDATE de SQL cru rodou um REPLACE no campo guid junto com os demais campos, sem excluir essa coluna da operação.
- Um plugin de migração ou de busca e substituição não ofereceu a opção de pular o GUID e o alterou por padrão.
- A migração importou um dump em que o GUID já havia sido editado manualmente no arquivo .sql antes da importação.
- Após a troca de domínio, alguém rodou de novo o search-replace sem a flag que protege o guid, reescrevendo o identificador.
Como resolver
- Faça backup do banco antes de tudo: exporte um dump completo do banco de dados. Qualquer ajuste na coluna guid é delicado e precisa de ponto de retorno antes de qualquer alteração.
- Entenda que o GUID não é URL de verdade: o GUID parece um link, mas serve só como identificador único e permanente do post. Ele não controla onde o conteúdo é exibido. Por isso, mantê-lo com o domínio antigo não quebra nada no site visível.
- Corrija as URLs reais, não o GUID: refaça a troca de domínio com WP-CLI search-replace usando a flag que pula a coluna guid. Isso ajusta os links do conteúdo (post_content, opções) sem tocar no identificador dos posts.
wp search-replace 'https://domínio-antigo.com' 'https://domínio-novo.com' --skip-columns=guid - Restaure o GUID se ele já foi trocado: se o GUID já foi alterado para o domínio novo e o feed duplicou tudo, restaure o backup anterior ou reverta apenas a coluna guid ao domínio original com cuidado, conforme o código abaixo.
- Confirme nos leitores de feed: depois de restaurar o GUID original, abra o feed em seudominio.com/feed e cheque em um leitor que os posts antigos não voltem a ser marcados como novos. A partir daí, não toque mais na coluna guid.
SQL
-- CUIDADO: rode somente com backup do banco e o domINIO antigo EXATO.
-- Reverte a coluna guid ao dominio original, apenas se ela foi trocada por engano.
-- Confira o prefixo de tabela (wp_) e o protocolo (http/https) reais do site antigo.
-- 1. Primeiro, veja o que sera alterado (somente leitura):
SELECT ID, guid FROM wp_posts
WHERE guid LIKE 'https://dominio-novo.com%';
-- 2. Se os resultados estiverem corretos, reverta o GUID ao dominio original:
UPDATE wp_posts
SET guid = REPLACE(guid, 'https://dominio-novo.com', 'https://dominio-antigo.com')
WHERE guid LIKE 'https://dominio-novo.com%';
Perguntas frequentes
O que é o GUID de um post no WordPress?
É um identificador único e permanente, gerado uma vez quando o post é publicado. Apesar de parecer uma URL, ele não controla onde o conteúdo aparece. Leitores de feed RSS usam o GUID para saber se já entregaram um item, por isso ele nunca deve mudar.
Por que não posso trocar o GUID na migração?
Porque os leitores de feed identificam cada post pelo GUID. Se você troca o domínio nele, cada post antigo ganha um GUID novo e os agregadores os tratam como publicações inéditas, reentregando tudo duplicado aos assinantes do feed e do e-mail.
Mas o GUID tem o domínio antigo. Isso não quebra o site?
Não. O GUID não define onde o conteúdo é exibido nem os links visíveis do site, que vêm de post_content e das opções. Manter o GUID com o domínio antigo é o comportamento esperado e recomendado. Quem precisa ser trocado são as URLs reais, não o identificador.
Já troquei o GUID e o feed duplicou tudo. Tem conserto?
Sim. O caminho mais seguro é restaurar o backup do banco anterior à troca. Sem backup, dá para reverter só a coluna guid ao domínio original com um UPDATE cuidadoso, conferindo antes com um SELECT. Depois disso, nunca mais altere o GUID.
Como troco o domínio sem mexer no GUID?
Use o WP-CLI search-replace com a flag --skip-columns=guid. Ela ajusta os links em post_content e nas opções, que são os que importam, e deixa a coluna guid intocada. Plugins como o Better Search Replace também oferecem a opção de não tocar no GUID.
Plugins de migração trocam o GUID automaticamente?
Alguns trocam por padrão, sem avisar. Por isso, prefira ferramentas que ofereçam a opção explícita de preservar o GUID e confirme após a migração que a coluna guid manteve o domínio antigo. Se ela mudou, reverta antes que os feeds reentreguem os posts.














