Acerca de este problema HTML
El atributo charset en el elemento <script> le dice al navegador qué codificación de caracteres usar al interpretar el archivo de script externo referenciado. Cuando un script se escribe directamente dentro del documento HTML (un script inline), la codificación de caracteres del script es inherentemente la misma que la codificación del documento — no hay un archivo separado que decodificar. Debido a esto, la especificación HTML requiere que charset solo aparezca en elementos <script> que también tengan un atributo src apuntando a un archivo externo.
Incluir charset sin src viola la especificación HTML y señala una malinterpretación de cómo funciona la codificación de caracteres para scripts inline. Los validadores marcan esto porque los navegadores ignoran el atributo charset en scripts inline, lo que significa que no tiene efecto y podría confundir a los desarrolladores haciéndoles pensar que han establecido la codificación cuando no lo han hecho.
También vale la pena señalar que el atributo charset en <script> está obsoleto en el estándar HTML living, incluso para scripts externos. La mejor práctica moderna es servir archivos de script externos con el header HTTP Content-Type correcto (por ejemplo, Content-Type: application/javascript; charset=utf-8) o simplemente asegurar que todos tus archivos usen codificación UTF-8, que es la predeterminada. Si estás trabajando con una base de código antigua que todavía usa charset, considera eliminarlo completamente y confiar en UTF-8 en todo.
Ejemplos
Incorrecto: charset en un script inline
Esto activa el error de validación porque charset se especifica sin un atributo src correspondiente.
<script charset="utf-8">
console.log("Hello, world!");
</script>
Correcto: Eliminar charset de scripts inline
Dado que los scripts inline usan la codificación del documento, simplemente elimina el atributo charset.
<script>
console.log("Hello, world!");
</script>
Correcto: Usar charset con un script externo (obsoleto pero válido)
Si necesitas especificar la codificación de un script externo, tanto charset como src deben estar presentes. Ten en cuenta que este uso, aunque válido, está obsoleto.
<script src="app.js" charset="utf-8"></script>
Recomendado: Script externo sin charset
El enfoque moderno preferido es omitir charset completamente y asegurar que el servidor entregue el archivo con el header de codificación correcto, o simplemente usar UTF-8 para todo.
<script src="app.js"></script>
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: