Skip to main content
Validación HTML

No se permite el atributo “xmlns:m” aquí.

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:m no 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

  1. Elimina el atributo de namespace personalizado del elemento <html> (o del elemento donde aparezca).
  2. 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.
  3. 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.
  4. Si realmente necesitas namespaces XML, sirve tu documento como XHTML con el tipo de contenido application/xhtml+xml en lugar de text/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.

Ayúdanos a mejorar nuestras guías

¿Te ha sido útil esta guía?

¿Listo para validar tus sitios?
Inicia tu prueba gratuita hoy.