Acerca de este problema HTML
En HTML5, el único atributo relacionado con namespaces permitido en el elemento <html> es xmlns con el valor http://www.w3.org/1999/xhtml, e incluso ese es opcional—existe únicamente para compatibilidad con la serialización XHTML. Las declaraciones de namespace con prefijo como xmlns:w, xmlns:o, xmlns:v, y atributos similares son características XML que no tienen significado en la sintaxis HTML. Se originan de la exportación HTML de Microsoft Office, que genera marcado conteniendo namespaces XML propietarios como urn:schemas-microsoft-com:office:word para elementos y estilos específicos de Word.
Por qué esto es un problema
Cumplimiento de estándares: El estándar HTML living (WHATWG) explícitamente no soporta declaraciones de namespace personalizadas. Incluirlas hace que tu documento no sea conforme, y el validador W3C reportará un error por cada una.
Sin beneficio para el navegador: Los navegadores modernos que analizan HTML5 ignoran estas declaraciones de namespace completamente. Los atributos no sirven ningún propósito funcional en la web—solo añaden sobrecarga innecesaria a tu marcado.
Mantenimiento y legibilidad: El HTML generado por Office es notoriamente verboso. Dejar las declaraciones de namespace en su lugar a menudo va de la mano con otros artefactos de Office (comentarios condicionales, etiquetas <o:p>, propiedades de estilo mso-) que desordenan tu código y lo hacen más difícil de mantener.
Accesibilidad e interoperabilidad: Aunque los navegadores típicamente toleran estos atributos extra sin problemas visibles, los consumidores de HTML que no son navegadores—como lectores de pantalla, rastreadores de motores de búsqueda, o clientes de correo—pueden manejar atributos inesperados de manera impredecible.
Cómo solucionarlo
-
Elimina el atributo
xmlns:wde tu etiqueta<html>o cualquier otro elemento donde aparezca. -
Elimina declaraciones de namespace relacionadas como
xmlns:o(Office),xmlns:v(VML), yxmlns:m(Math) si están presentes. -
Limpia elementos específicos de Office como
<w:Sdt>,<o:p>, o<v:shape>que dependen de esos namespaces—estos no son elementos HTML válidos. -
Elimina propiedades CSS específicas de Office con prefijo
mso-(ej.,mso-bidi-font-family) que a menudo acompañan las declaraciones de namespace.
Si pegas regularmente contenido desde Microsoft Word, considera usar una función “pegar como texto plano” en tu editor, o usa una herramienta de limpieza HTML para eliminar artefactos de Office automáticamente.
Ejemplos
Inválido: Namespace de Office en el elemento <html>
<!DOCTYPE html>
<html lang="en" xmlns:w="urn:schemas-microsoft-com:office:word">
<head>
<title>Document</title>
</head>
<body>
<p>Content from Word</p>
</body>
</html>
Inválido: Múltiples namespaces de Office
<!DOCTYPE html>
<html lang="en"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>Document</title>
</head>
<body>
<p class="MsoNormal">Content from Word<o:p></o:p></p>
</body>
</html>
Válido: HTML limpio sin declaraciones de namespace
<!DOCTYPE html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<p>Content from Word</p>
</body>
</html>
Válido: Usando el atributo estándar xmlns (opcional)
Si necesitas compatibilidad XHTML, el atributo estándar xmlns (sin prefijo) está permitido:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Document</title>
</head>
<body>
<p>Content from Word</p>
</body>
</html>
Ten en cuenta que este mismo error de validación aplica a cualquier atributo de namespace personalizado con prefijo—no solo xmlns:w. Si ves errores similares para xmlns:o, xmlns:v, xmlns:st1, u otros, la solución es la misma: elimínalos junto con cualquier elemento o atributo que dependa de esos namespaces.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.