Acerca de este problema HTML
La especificación HTML5 limita estrictamente qué atributos son válidos en el elemento <html>—y en los elementos en general. Se permiten atributos globales estándar como lang, dir, class e id, y en la serialización XHTML se permite el atributo simple xmlns para declarar el namespace XHTML por defecto. Sin embargo, las declaraciones de namespace con prefijo como xmlns:m, xmlns:o, xmlns:v o xmlns:w son construcciones XML que no tienen significado en el modelo de análisis HTML5 (text/html).
Estos atributos de namespace con prefijo aparecen más comúnmente cuando el contenido es generado por o copiado desde productos de Microsoft Office (Word, Excel, PowerPoint). Office usa namespaces XML personalizados como xmlns:m para Office MathML (http://schemas.microsoft.com/office/2004/12/omml) y xmlns:o para marcado específico de Office. Cuando este marcado se guarda como HTML o se pega en una página web, estas declaraciones se incluyen y generan errores de validación.
Por qué es un problema
-
Cumplimiento de estándares: La especificación HTML5 del W3C no admite declaraciones de namespace XML personalizados en la serialización
text/html. Los validadores marcarán cada uno de estos atributos. -
Sin beneficio funcional: Los analizadores HTML5 ignoran completamente los prefijos de namespace. La declaración
xmlns:mno hace nada en un navegador que renderiza una página HTML5, por lo que es código muerto. - Sobrecarga de contenido: El HTML generado por Office a menudo incluye muchas declaraciones de namespace innecesarias, estilos en línea y elementos propietarios que sobrecargan el documento y lo hacen más difícil de mantener.
- Accesibilidad e interoperabilidad: El HTML limpio y válido es más fácil de procesar de manera confiable por tecnologías de asistencia, motores de búsqueda y otros agentes de usuario.
Cómo solucionarlo
-
Elimina el atributo de namespace personalizado del elemento
<html>(o del elemento donde aparezca). -
Elimina cualquier elemento o atributo que dependa de ese prefijo de namespace (ej.
<m:oMath>,<o:p>), ya que no son elementos HTML5 válidos. -
Reemplaza con equivalentes nativos de HTML5 cuando sea posible. Por ejemplo, MathML es compatible nativamente en HTML5 sin ninguna declaración de namespace—puedes usar elementos
<math>directamente. -
Si realmente necesitas namespaces XML, sirve tu documento como XHTML con el tipo de contenido
application/xhtml+xmlen lugar detext/html.
Ejemplos
Incorrecto: Namespace personalizado en el elemento html
Esto genera el error “No se permite el atributo xmlns:m aquí”:
<!DOCTYPE html>
<html xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns:o="urn:schemas-microsoft-com:office:office"
lang="en">
<head>
<title>Office Paste Example</title>
</head>
<body>
<p>Some content with Office markup.</p>
</body>
</html>
Correcto: HTML5 limpio sin declaraciones de namespace
<!DOCTYPE html>
<html lang="en">
<head>
<title>Clean HTML5 Example</title>
</head>
<body>
<p>Some content without Office markup.</p>
</body>
</html>
Correcto: Usando MathML nativamente en HTML5
Si el namespace xmlns:m se estaba usando para contenido matemático, HTML5 admite MathML directamente sin ninguna declaración de namespace:
<!DOCTYPE html>
<html lang="en">
<head>
<title>MathML in HTML5</title>
</head>
<body>
<p>The quadratic formula:</p>
<math>
<mi>x</mi>
<mo>=</mo>
<mfrac>
<mrow>
<mo>-</mo>
<mi>b</mi>
<mo>±</mo>
<msqrt>
<mrow>
<msup><mi>b</mi><mn>2</mn></msup>
<mo>-</mo>
<mn>4</mn><mi>a</mi><mi>c</mi>
</mrow>
</msqrt>
</mrow>
<mrow>
<mn>2</mn><mi>a</mi>
</mrow>
</mfrac>
</math>
</body>
</html>
Incorrecto: Atributo de namespace en un elemento que no es html
El mismo error puede aparecer también en otros elementos:
<div xmlns:o="urn:schemas-microsoft-com:office:office">
<p>Office content</p>
</div>
Correcto: Elimina el atributo de namespace
<div>
<p>Office content</p>
</div>
Si estás limpiando HTML generado por Office, considera usar una herramienta dedicada o una opción de “pegar como texto sin formato” en tu CMS para eliminar el marcado propietario antes de que entre en tus páginas. Esto mantiene tu HTML eficiente, válido y fácil de mantener.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.