Acerca de este problema HTML
El atributo xmlns:v declara el namespace XML urn:schemas-microsoft-com:vml, que habilitaba el Vector Markup Language propietario de Microsoft en las versiones 5 a 8 de Internet Explorer. VML era una manera de renderizar formas vectoriales directamente en HTML antes de que SVG obtuviera amplio soporte en navegadores. Cuando se trabajaba con documentos basados en XML (como XHTML), las declaraciones de namespace como xmlns:v eran sintácticamente válidas. Sin embargo, HTML5 no es un lenguaje XML — tiene sus propias reglas de análisis y solo reconoce un conjunto limitado de declaraciones de namespace en el elemento <html>, específicamente xmlns (para el namespace XHTML por defecto) y xmlns:xlink (en ciertos contextos SVG/MathML). Cualquier otro atributo xmlns:*, incluyendo xmlns:v, xmlns:o, y xmlns:w, genera un error de validación.
Por qué esto es un problema
Cumplimiento de estándares: La especificación HTML5 explícitamente no permite declaraciones de namespace XML arbitrarias. El validador de W3C marca xmlns:v porque no es parte del conjunto de atributos HTML5 para ningún elemento.
Sin soporte en navegadores modernos: VML solo era compatible con Internet Explorer, que ha sido descontinuado. Ningún navegador actual renderiza contenido VML, por lo que la declaración de namespace no tiene ningún propósito.
Limpieza de código: Mantener atributos obsoletos y no funcionales desordena tu marcado y puede confundir a los desarrolladores que mantienen el código. También puede causar problemas con analizadores HTML, linters y herramientas de construcción que imponen estricto cumplimiento de HTML5.
Cómo solucionarlo
-
Elimina el atributo
xmlns:vde tu etiqueta<html>(o donde sea que aparezca). -
Elimina cualquier atributo de namespace relacionado como
xmlns:o(namespace de Office) oxmlns:w(namespace de Word), que también son inválidos en HTML5 y a menudo aparecen junto conxmlns:v. -
Reemplaza el contenido VML con SVG si tu página dependía de VML para gráficos vectoriales. SVG es compatible de forma nativa en todos los navegadores modernos y no requiere declaración de namespace en el elemento
<html>. -
Asegúrate de que el atributo
langesté configurado en el elemento<html>por accesibilidad, ya que de todas formas estás editando esa línea.
Ejemplos
Inválido: Usando xmlns:v en el elemento html
<!DOCTYPE html>
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Esto genera múltiples errores de validación — uno por cada atributo xmlns:* que HTML5 no reconoce.
Válido: Atributos de namespace eliminados
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>Hello world</p>
</body>
</html>
Reemplazando VML con SVG
Si tu página usaba VML para dibujar formas, reemplaza el marcado VML con SVG inline. No se necesita declaración de namespace en <html> — el elemento <svg> lleva su propio namespace implícitamente en HTML5.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Vector Graphics with SVG</title>
</head>
<body>
<svg width="200" height="200" aria-label="Blue circle">
<circle cx="100" cy="100" r="80" fill="steelblue" />
</svg>
</body>
</html>
Fuentes comunes de este problema
Este atributo aparece frecuentemente en HTML que fue:
- Exportado desde Microsoft Word o Outlook. Estas aplicaciones generan HTML con declaraciones de namespace VML para formas, efectos de texto y formato de email.
- Copiado de plantillas obsoletas. Plantillas de sitios web y email más antiguas a veces incluían VML para esquinas redondeadas o imágenes de fondo en Internet Explorer.
- Generado por editores WYSIWYG desactualizados que tenían como objetivo versiones anteriores de IE.
Si estás trabajando con plantillas de email HTML, ten en cuenta que algunos clientes de email (notablemente versiones de escritorio anteriores de Outlook) aún usan el motor de renderizado de Word y pueden depender de VML para ciertos efectos como imágenes de fondo. En ese contexto, puedes mantener intencionalmente VML en tu código fuente de email — pero ten en cuenta que el marcado no pasará la validación HTML5. Para páginas web, no hay razón para mantener estos atributos.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.