Acerca de este problema HTML
El atributo itemscope es parte de la especificación HTML Microdata, usado para definir el alcance de datos estructurados en una página. Funciona junto con itemtype e itemprop para proporcionar metadatos legibles por máquina sobre tu contenido, que los motores de búsqueda y otras herramientas pueden usar para entender mejor tus páginas.
En HTML, los atributos booleanos siguen una regla específica: su mera presencia en un elemento representa un estado true, y su ausencia representa false. A diferencia de JavaScript u otros lenguajes de programación donde podrías escribir itemscope="true" o itemscope="false", los atributos booleanos de HTML no funcionan de esta manera. Las únicas formas válidas para un atributo booleano son:
-
Solo el nombre del atributo:
itemscope -
El atributo con un valor vacío:
itemscope="" -
El atributo con su propio nombre como valor:
itemscope="itemscope"
Asignar cualquier otro valor — incluyendo "true" o "false" — es HTML inválido. Esto es especialmente confuso porque itemscope="false" no desactiva el atributo. Dado que el atributo sigue presente en el elemento, el navegador lo trata como activo. Esto puede llevar a que se generen datos estructurados incorrectos, lo que puede hacer que los motores de búsqueda interpreten mal tu contenido.
Este problema es importante por varias razones:
- Cumplimiento de estándares: Los valores de atributo inválidos violan la especificación HTML, causando errores de validación W3C.
- Precisión de datos estructurados: El marcado microdata incorrecto puede resultar en que los motores de búsqueda lean mal el contenido de tu página, potencialmente afectando los resultados de búsqueda enriquecidos.
-
Intención del desarrollador: Escribir
itemscope="false"sugiere que quieres desactivar el atributo, pero en realidad hace lo contrario — el atributo permanece activo.
Para solucionarlo, simplemente usa el nombre del atributo sin valor cuando quieras habilitarlo, o elimínalo completamente cuando no lo necesites.
Ejemplos
Incorrecto: asignar "true" a itemscope
<html itemscope="true" itemtype="https://schema.org/WebPage">
<!-- ... -->
</html>
Incorrecto: asignar "false" a itemscope
Esto no desactiva itemscope — el atributo sigue presente, por lo que el navegador lo trata como activo.
<div itemscope="false" itemtype="https://schema.org/Product">
<span itemprop="name">Widget</span>
</div>
Correcto: usar el atributo sin valor
<html itemscope itemtype="https://schema.org/WebPage">
<!-- ... -->
</html>
Correcto: usar un valor de cadena vacía
Esta es una forma igualmente válida de especificar un atributo booleano, aunque la forma sin valor es más común y legible.
<div itemscope="" itemtype="https://schema.org/Product">
<span itemprop="name">Widget</span>
</div>
Correcto: eliminar el atributo completamente
Si no necesitas itemscope en el elemento, simplemente omítelo.
<html lang="en">
<head>
<title>My Page</title>
</head>
<body>
<p>No microdata here.</p>
</body>
</html>
Correcto: un ejemplo completo con microdata
<!DOCTYPE html>
<html lang="en" itemscope itemtype="https://schema.org/WebPage">
<head>
<title>My Product</title>
</head>
<body>
<div itemscope itemtype="https://schema.org/Product">
<h1 itemprop="name">Super Widget</h1>
<p itemprop="description">The best widget money can buy.</p>
</div>
</body>
</html>
Esta misma regla se aplica a todos los atributos booleanos de HTML, como hidden, disabled, checked, required, readonly, autoplay y defer. Ninguno de ellos acepta "true" o "false" como valores — están presentes o ausentes.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.
Más información: