Skip to main content
Validación HTML

Valor X incorrecto para el atributo “href” en el elemento “a”: carácter ilegal en los datos del esquema: no se permite espacio.

Acerca de este problema HTML

El estándar de URL (definido por WHATWG) especifica un conjunto estricto de caracteres permitidos en cada parte de una URL. Un carácter de espacio no está entre ellos. Cuando el validador encuentra un espacio literal en un valor href, reporta el error “Carácter ilegal en los datos del esquema: no se permite espacio”. Esto se aplica a los espacios en cualquier lugar de la URL — la ruta, cadena de consulta, fragmento, o incluso después del esquema (ej., https:).

Aunque la mayoría de navegadores modernos son tolerantes e intentarán corregir URLs malformadas codificando espacios automáticamente, depender de este comportamiento es problemático por varias razones:

  • Cumplimiento de estándares: Las URLs inválidas violan la especificación HTML, y el marcado que depende de la corrección de errores del navegador es frágil e impredecible.
  • Accesibilidad: Las tecnologías de asistencia, como los lectores de pantalla, pueden no manejar URLs malformadas de la misma manera que los navegadores. Esto puede resultar en enlaces rotos para usuarios que dependen de estas herramientas.
  • Interoperabilidad: Los consumidores de tu HTML que no son navegadores — rastreadores de motores de búsqueda, verificadores de enlaces, clientes de correo electrónico, lectores RSS y APIs — pueden no realizar la misma corrección automática, llevando a enlaces rotos o contenido perdido.
  • Copiar-pegar y compartir: Cuando los usuarios copian una URL malformada de la fuente, el espacio puede causar que el enlace se rompa al pegarlo en otras aplicaciones.

Cómo solucionarlo

La solución depende de dónde aparezca el espacio:

  1. En la ruta o fragmento: Reemplaza cada espacio con %20. Por ejemplo, /mi archivo.html se convierte en /mi%20archivo.html.
  2. En la cadena de consulta: Puedes usar %20 o, si el valor es parte de datos application/x-www-form-urlencoded, + también es aceptable para espacios dentro de valores de parámetros de consulta. Sin embargo, %20 es universalmente seguro.
  3. Programáticamente: Usa encodeURI() en JavaScript para codificar una URL completa (preserva caracteres estructurales como /, ? y #). Usa encodeURIComponent() para codificar valores individuales de parámetros de consulta. En el lado del servidor, usa la función de codificación de URL equivalente de tu lenguaje.

Si estás escribiendo URLs a mano en HTML, simplemente encuentra cada espacio y reemplázalo con %20. Si las URLs se generan dinámicamente (desde una base de datos, CMS o entrada de usuario), asegúrate de que tu código de plantillas o del lado del servidor las codifique antes de insertarlas en el marcado.

Ejemplos

Inválido — espacio en la ruta

<a href="https://example.com/docs/Mi Reporte.pdf">Descargar Reporte</a>

El espacio literal entre “Mi” y “Reporte” desencadena el error del validador.

Corregido — espacio codificado como %20

<a href="https://example.com/docs/Mi%20Reporte.pdf">Descargar Reporte</a>

Inválido — espacio en un parámetro de consulta

<a href="https://example.com/search?q=hola mundo">Buscar</a>

Corregido — espacio codificado en la cadena de consulta

<a href="https://example.com/search?q=hola%20mundo">Buscar</a>

Inválido — múltiples espacios en diferentes partes de la URL

<a href="https://example.com/mi carpeta/página dos.html?ref=algún valor#mi sección">Enlace</a>

Corregido — todos los espacios codificados

<a href="https://example.com/mi%20carpeta/página%20dos.html?ref=algún%20valor#mi%20sección">Enlace</a>

Codificando URLs con JavaScript

Si estás construyendo URLs dinámicamente, usa las funciones de codificación integradas en lugar de hacer reemplazo manual de cadenas:

<script>
  // encodeURI codifica una URL completa pero preserva :, /, ?, #, etc.
  const url = encodeURI("https://example.com/docs/Mi Reporte.pdf");
  // Resultado: "https://example.com/docs/Mi%20Reporte.pdf"

  // encodeURIComponent codifica un valor individual (para parámetros de consulta)
  const query = encodeURIComponent("hola mundo");
  // Resultado: "hola%20mundo"
</script>

Ten en cuenta que encodeURI() es apropiado para codificar una URL completa, mientras que encodeURIComponent() debe usarse para componentes individuales como valores de parámetros de consulta — codifica caracteres como / y ? que tienen significado estructural en una URL.

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.