Conteúdo misto (mixed content) no WordPress: como corrigir
Passou o site para HTTPS, mas o cadeado não aparece, faltam imagens ou o browser mostra "Não seguro"? O mais provável é ter conteúdo misto (mixed content). Este guia explica o que é e como o resolver.
O que é o conteúdo misto
Conteúdo misto acontece quando uma página carregada por HTTPS vai buscar alguns ficheiros (imagens, scripts, folhas de estilo, fontes) por HTTP. A ligação deixa de ser totalmente segura e os browsers reagem de duas formas:
- Bloqueiam os recursos mais críticos, como scripts, folhas de estilo e iframes. O site pode ficar sem formatação ou com funcionalidades partidas.
- Avisam nos recursos menos críticos, como imagens: o cadeado desaparece ou surge um aviso de "Não seguro".
É muito comum depois de instalar um certificado SSL ou de migrar um site de HTTP para HTTPS, porque o conteúdo antigo continua a apontar para endereços http://.
1. Encontre o problema
No browser, abra as ferramentas de programador (tecla F12) e vá ao separador Consola. Cada recurso problemático aparece com uma mensagem do tipo "Mixed Content: The page was loaded over HTTPS, but requested an insecure resource...", com o endereço exato do ficheiro.
Depois de identificar o padrão (normalmente o próprio domínio em http://), já sabe o que procurar e substituir.
2. Corrija
Se for só uma imagem ou um ficheiro
Edite a página ou o artigo e altere o link diretamente para https://.
Se forem muitos: procurar e substituir na base de dados
Faça sempre uma cópia de segurança da base de dados antes. Tem duas opções:
- Plugin. O Better Search Replace procura todas as referências a
http://o-seu-dominio.pte substitui-as porhttps://o-seu-dominio.pt. Use primeiro a opção "Executar em modo de teste" para ver quantas alterações vai fazer. - WP-CLI. Mais rápido e sem plugins. Veja antes o resultado com
--dry-run:
wp search-replace 'http://o-seu-dominio.pt' 'https://o-seu-dominio.pt' --all-tables --dry-run
wp search-replace 'http://o-seu-dominio.pt' 'https://o-seu-dominio.pt' --all-tables
Ambas as opções tratam corretamente os dados serializados do WordPress, o que uma substituição direta em SQL não garante. Consulte também o nosso guia de utilização do WP-CLI.
Confirme os endereços do site
Em Definições → Geral, verifique que o "Endereço do WordPress" e o "Endereço do site" começam por https://.
3. Se o problema continuar
Se depois disto ainda aparecerem avisos, procure a origem noutros locais:
- Tema ou plugins com endereços
http://escritos no código (logótipos, fontes, scripts). Atualize-os ou peça correção ao autor. - Recursos externos (imagens, scripts, iframes de outros sites) que só existem em HTTP. Procure a versão em HTTPS, aloje o ficheiro no seu site ou remova-o.
- CSS gerado por construtores visuais (Brizy, Elementor, etc.) e cache. Depois de corrigir, regenere os ficheiros CSS do construtor e limpe as caches do site, do plugin de cache e da CDN.
- Redirecionamento de HTTP para HTTPS em falta. Confirme que quem entra por
http://é redirecionado parahttps://.
Solução provisória
É possível pedir ao browser para tentar carregar por HTTPS tudo o que esteja em HTTP, com o cabeçalho Content-Security-Policy: upgrade-insecure-requests. Serve para reduzir o problema enquanto corrige a origem, mas não o resolve: se o recurso não existir em HTTPS, continua a falhar.
4. Verifique o resultado
Volte a abrir o site, limpe a cache do browser (ou use uma janela anónima) e confirme que o cadeado está ativo e que a consola já não mostra avisos. Teste várias páginas, sobretudo as mais antigas, porque é aí que o conteúdo antigo costuma estar.
Precisa de ajuda com o HTTPS do seu site? Fale connosco.
Precisa de ajuda com wordpress?
Oferecemos soluções profissionais para WordPress. Fale connosco!
Suporte WordPress