Warning Declaración de charset — faltante o demasiado tarde

Por qué <meta charset="UTF-8"> debe aparecer cerca del inicio de <head>, y qué pasa cuando el navegador adivina mal la codificación.

El validador revisa que exista una etiqueta <meta charset> y, cuando está presente, que aparezca dentro de los primeros 1024 bytes del documento (missing-charset / late-charset).

Ejemplo

<head>
  <meta charset="UTF-8">
  <title>Título de la página</title>
  ...
</head>

Debe ser una de las primeras cosas dentro de <head>, antes de cualquier elemento que pueda contener texto no-ASCII (como <title>).

Por qué importa

Un navegador tiene que empezar a renderizar antes de haber descargado toda la página, así que necesita saber la codificación de caracteres de inmediato para interpretar los bytes correctamente. Por eso mismo la especificación HTML exige que la declaración de charset esté totalmente contenida en los primeros 1024 bytes — si aparece más tarde, el navegador puede haber empezado a analizar el documento con una codificación adivinada, y volver a analizarlo desde cero para corregirla desperdicia tiempo y puede hacer que se vea brevemente texto mal decodificado (caracteres acentuados y símbolos convertidos en cuadros ilegibles o signos de interrogación).

Frequently asked questions

¿UTF-8 es el único valor válido?

Para la forma corta <meta charset="...">, la especificación HTML exige que el valor coincida, sin distinguir mayúsculas y solo con caracteres ASCII, con "utf-8" — no se permite ninguna otra codificación aquí. Además, UTF-8 cubre prácticamente todos los caracteres necesarios para cualquier idioma, así que no hay una razón práctica para usar otra cosa.

¿Puedo poner la etiqueta de charset en cualquier parte de <head>?

Tiene que estar dentro de los primeros 1024 bytes del documento y antes de cualquier elemento que probablemente contenga texto, como <title>. Ponerla como el primer hijo de <head> es la opción más segura.