Sobre este problema HTML
O elemento <meta charset> indica ao navegador qual codificação de caracteres usar ao interpretar os bytes do documento HTML. A especificação HTML declara explicitamente que não deve haver mais de um elemento <meta> com um atributo charset por documento. Esta declaração deve aparecer dentro dos primeiros 1024 bytes do documento, pelo que colocá-la como o primeiro filho de <head> (logo após a tag de abertura <head>) é a prática recomendada.
Declarações charset duplicadas acontecem tipicamente quando o código é montado a partir de múltiplos templates, partials ou snippets — cada um contribuindo com o seu próprio <meta charset>. Também pode ocorrer quando um programador adiciona manualmente uma declaração charset sem perceber que já existe uma, ou ao migrar de uma abordagem mais antiga <meta http-equiv="Content-Type"> e adicionar um novo <meta charset> sem remover o equivalente antigo.
Por que isto importa
-
Conformidade com padrões: O padrão WHATWG HTML living standard determina no máximo um
<meta charset>por documento. Violar isto produz um erro de validação. - Comportamento imprevisível: Quando um navegador encontra declarações charset conflituosas ou duplicadas, o comportamento é indefinido. Embora a maioria dos navegadores modernos use a primeira encontrada, confiar nisto é frágil e pode levar a texto ilegível ou problemas de codificação em casos extremos.
- Manutenibilidade: Múltiplas declarações charset sinalizam lógica de template desorganizada ou duplicada, tornando a base de código mais difícil de manter.
Como corrigir
-
Procure no seu documento HTML (incluindo quaisquer templates, layouts ou partials que compõem a saída final) por todas as instâncias de
<meta charset>ou<meta charset="...">. -
Mantenha exatamente uma declaração
<meta charset="utf-8">, colocada como o primeiro elemento dentro de<head>. -
Remova todos os outros elementos
<meta charset>. -
Se também tiver um
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">legado, remova-o — a forma mais curta<meta charset="utf-8">é o substituto moderno, e ter ambos conta como declarações charset duplicadas.
Exemplos
❌ Incorreto: múltiplas declarações charset
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
O segundo <meta charset="utf-8"> desencadeia o erro de validação, mesmo que ambos especifiquem a mesma codificação.
❌ Incorreto: misturar sintaxe charset antiga e nova
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Ambos os elementos declaram uma codificação de caracteres, pelo que o validador trata isto como um duplicado.
✅ Correto: declaração charset única
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Um único <meta charset="utf-8"> aparece primeiro em <head>, antes de quaisquer outros elementos ou conteúdo. Esta é a abordagem correta e recomendada. UTF-8 é a codificação fortemente recomendada para todos os novos documentos HTML.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.
Saiba mais: