Acerca de este problema HTML
El elemento <meta charset> indica al navegador qué codificación de caracteres usar al interpretar los bytes del documento HTML. La especificación HTML establece explícitamente que no debe haber más de un elemento <meta> con un atributo charset por documento. Esta declaración debe aparecer dentro de los primeros 1024 bytes del documento, por lo que colocarla como el primer hijo de <head> (justo después de la etiqueta de apertura <head>) es la práctica recomendada.
Las declaraciones de charset duplicadas suelen ocurrir cuando el código se ensambla a partir de múltiples plantillas, parciales o fragmentos, cada uno contribuyendo con su propio <meta charset>. También puede ocurrir cuando un desarrollador añade manualmente una declaración de charset sin darse cuenta de que ya existe una, o al migrar desde un enfoque más antiguo de <meta http-equiv="Content-Type"> y añadir un nuevo <meta charset> sin eliminar el equivalente anterior.
Por qué esto importa
-
Cumplimiento de estándares: El estándar HTML living de WHATWG exige como máximo un
<meta charset>por documento. Violar esto produce un error de validación. - Comportamiento impredecible: Cuando un navegador encuentra declaraciones de charset conflictivas o duplicadas, el comportamiento no está definido. Aunque la mayoría de navegadores modernos usarán la primera que encuentren, confiar en esto es frágil y podría llevar a texto ilegible o problemas de codificación en casos extremos.
- Mantenibilidad: Múltiples declaraciones de charset señalan lógica de plantilla desorganizada o duplicada, haciendo que el código sea más difícil de mantener.
Cómo solucionarlo
-
Busca en tu documento HTML (incluyendo cualquier plantilla, diseño o parcial que componga la salida final) todas las instancias de
<meta charset>o<meta charset="...">. -
Mantén exactamente una declaración
<meta charset="utf-8">, colocada como el primer elemento dentro de<head>. -
Elimina todos los demás elementos
<meta charset>. -
Si también tienes un
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">heredado, elimínalo: la forma más corta<meta charset="utf-8">es el reemplazo moderno, y tener ambos cuenta como declaraciones de charset duplicadas.
Ejemplos
❌ Incorrecto: múltiples declaraciones de 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>
El segundo <meta charset="utf-8"> desencadena el error de validación, aunque ambos especifiquen la misma codificación.
❌ Incorrecto: mezclando sintaxis antigua y nueva de charset
<!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 elementos declaran una codificación de caracteres, por lo que el validador trata esto como un duplicado.
✅ Correcto: una sola declaración de charset
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Un solo <meta charset="utf-8"> aparece primero en <head>, antes que cualquier otro elemento o contenido. Este es el enfoque correcto y recomendado. UTF-8 es la codificación fuertemente recomendada para todos los documentos HTML nuevos.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: