Acerca de este problema HTML
En XML y XHTML, el atributo xmlns se utiliza para declarar namespaces que permiten que elementos y atributos de diferentes vocabularios coexistan sin conflictos de nomenclatura. El prefijo xmlns:o específicamente declara el namespace de Microsoft Office (urn:schemas-microsoft-com:office:office), que habilita elementos y atributos específicos de Office como <o:p> (marcadores de párrafo de Office) dentro del documento.
Sin embargo, HTML5 no es un lenguaje XML. La especificación HTML5 solo permite el atributo xmlns en el elemento <html> (y solo con el valor http://www.w3.org/1999/xhtml), junto con xmlns:xlink en elementos SVG. Los prefijos de namespace personalizados como xmlns:o, xmlns:v (VML) y xmlns:w (Word) no se reconocen como atributos válidos en ningún elemento HTML5 y generarán errores de validación.
Por qué ocurre esto
Este problema ocurre más comúnmente cuando:
- Se pega contenido desde Microsoft Word en un editor WYSIWYG o CMS. Word genera su propia versión de HTML que incluye declaraciones de namespace de Office y elementos propietarios.
- Los archivos HTML se exportan desde aplicaciones de Office como Word, Excel u Outlook. Estas exportaciones producen marcado que depende en gran medida de namespaces específicos de Office.
- Las plantillas de email se construyen usando herramientas que generan HTML compatible con Office, llevando el lastre de namespace a páginas web estándar.
Por qué es importante
- Conformidad con estándares: HTML5 no admite declaraciones de namespace XML arbitrarias, por lo que estos atributos hacen que tu documento no sea válido.
- Marcado inflado: El HTML generado por Office a menudo incluye no solo las declaraciones de namespace sino también grandes cantidades de elementos específicos de Office, comentarios condicionales y estilos en línea que aumentan significativamente el tamaño de la página.
- Dificultad de mantenimiento: El HTML con sabor Office es más difícil de leer, editar y mantener en comparación con el marcado limpio que cumple con los estándares.
-
Problemas potenciales de renderizado: Aunque los navegadores generalmente ignoran los atributos no reconocidos, los elementos específicos de Office que los acompañan (como
<o:p>) ocasionalmente pueden causar comportamientos inesperados de espaciado o diseño.
Cómo solucionarlo
-
Elimina todos los atributos
xmlns:ode tus elementos HTML. -
Elimina cualquier elemento específico de Office como
<o:p>,<o:SmartTagType>o etiquetas similares que dependan del namespace de Office. -
Verifica otros namespaces de Office como
xmlns:v,xmlns:w,xmlns:myxmlns:st1— estos también deben eliminarse. - Limpia el contenido pegado antes de insertarlo en tu HTML. Muchos editores de texto y plataformas CMS ofrecen una opción de “Pegar como texto sin formato” que elimina el formato de Office.
- Si usas un CMS o editor de texto enriquecido, busca una función de “Limpiar HTML de Word” o similar para eliminar automáticamente los artefactos de Office.
Ejemplos
❌ Inválido: declaraciones de namespace de Office en elementos
<!DOCTYPE html>
<html lang="en">
<head>
<title>Company Report</title>
</head>
<body xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:w="urn:schemas-microsoft-com:office:word">
<h1>Quarterly Report</h1>
<p class="MsoNormal">Revenue increased by 15% this quarter.<o:p></o:p></p>
<p class="MsoNormal">Expenses remained stable.<o:p></o:p></p>
</body>
</html>
Este marcado contiene tres declaraciones de namespace de Office en el elemento <body> y usa elementos <o:p> dentro de párrafos — todo lo cual es inválido en HTML5.
✅ Válido: HTML limpio sin namespaces de Office
<!DOCTYPE html>
<html lang="en">
<head>
<title>Company Report</title>
</head>
<body>
<h1>Quarterly Report</h1>
<p>Revenue increased by 15% this quarter.</p>
<p>Expenses remained stable.</p>
</body>
</html>
❌ Inválido: namespace en un elemento div
<div xmlns:o="urn:schemas-microsoft-com:office:office">
<p class="MsoNormal">Meeting notes from Tuesday.<o:p></o:p></p>
</div>
✅ Válido: versión limpia
<div>
<p>Meeting notes from Tuesday.</p>
</div>
Observa que en los ejemplos corregidos, también se eliminó el atributo class="MsoNormal". Aunque MsoNormal es técnicamente un nombre de clase válido que no causará un error de validación, es una clase generada por Office sin propósito a menos que tengas reglas CSS correspondientes — eliminarla mantiene tu marcado limpio.
Si realmente necesitas soporte de namespace XML para procesamiento de documentos, usa un documento XHTML apropiado servido con el tipo de contenido application/xhtml+xml, o maneja el procesamiento XML por separado de tu HTML de cara al web.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.