Acerca de este problema HTML
El atributo xmlns declara el espacio de nombres XML para un documento. El valor http://www.w3.org/TR/REC-html40 es una URL que apunta a la especificación antigua de la Recomendación HTML 4.0 — nunca fue un identificador de espacio de nombres XML apropiado. Probablemente terminó en el código debido a confusión entre URLs de DTD/especificación e URIs de espacio de nombres reales, o copiando marcado de plantillas obsoletas.
En la especificación HTML5 (el Estándar Vivo HTML de WHATWG), el atributo xmlns en el elemento <html> es opcional. Cuando está presente, su valor debe ser exactamente http://www.w3.org/1999/xhtml — no se permite ningún otro valor. Esto es cierto independientemente de si el documento se sirve como text/html o application/xhtml+xml.
Por qué es importante
- Fallo de validación: El validador de W3C rechazará el documento porque el valor del espacio de nombres no es uno de los valores permitidos.
- Cumplimiento de estándares: Usar un espacio de nombres incorrecto puede hacer que los analizadores XML malinterpreten o rechacen el documento, especialmente cuando se sirve con un tipo de contenido XML.
-
Confusión heredada: La URL
http://www.w3.org/TR/REC-html40es una referencia de especificación, no un espacio de nombres. Los espacios de nombres y las URLs de especificación sirven propósitos fundamentalmente diferentes en los estándares web.
Cómo solucionarlo
La solución más simple para un documento HTML5 estándar es eliminar completamente el atributo xmlns. El analizador HTML no lo requiere, y los navegadores procesarán el documento correctamente sin él.
Si tu documento se sirve como XHTML (application/xhtml+xml), o si tienes una razón específica para incluir la declaración del espacio de nombres, actualiza el valor al único permitido: http://www.w3.org/1999/xhtml.
Ejemplos
❌ Incorrecto: URL antigua de HTML 4.0 usada como espacio de nombres
<!DOCTYPE html>
<html xmlns="http://www.w3.org/TR/REC-html40" lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
✅ Opción de solución 1: eliminar el atributo xmlns (recomendado para HTML5)
Para la mayoría de documentos HTML5 servidos como text/html, simplemente omite el atributo:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
✅ Opción de solución 2: usar el valor de espacio de nombres correcto
Si necesitas el atributo xmlns (por ejemplo, para serialización XHTML), configúralo con el único valor permitido:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello, world!</p>
</body>
</html>
Otros valores incorrectos que debes vigilar
Este mismo error puede aparecer con otras URLs de espacio de nombres inválidas. Todas las siguientes están mal:
-
http://www.w3.org/TR/REC-html40(URL de especificación HTML 4.0) -
http://www.w3.org/TR/html4/(otra URL de especificación HTML 4) -
http://www.w3.org/1999/html(espacio de nombres inexistente)
El único valor válido es http://www.w3.org/1999/xhtml. En caso de duda, elimina completamente el atributo xmlns — los documentos HTML5 modernos no lo necesitan.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.