Acerca de este problema HTML
Microdata es una especificación HTML que te permite incrustar datos legibles por máquina en tu contenido usando tres atributos principales: itemscope, itemtype, e itemprop. El atributo itemscope crea un nuevo ítem (un grupo de pares nombre-valor), itemtype especifica qué tipo de cosa es el ítem (usando una URL de vocabulario como Schema.org), e itemprop define propiedades individuales dentro de ese ítem. Estos atributos funcionan juntos — itemprop solo tiene sentido en el contexto de un itemscope.
Cuando el validador encuentra un atributo itemprop en un elemento que no es descendiente de ningún elemento con itemscope, no tiene forma de asociar esa propiedad con un ítem. La propiedad queda esencialmente huérfana. Esto es un problema por varias razones:
-
Los motores de búsqueda no pueden usar los datos. Los consumidores de datos estructurados como Google, Bing y otros rastreadores dependen de la jerarquía
itemscope/itemproppara entender tu contenido. Unitemprophuérfano es ignorado o malinterpretado. -
Cumplimiento de estándares. El estándar HTML living del WHATWG requiere que un elemento con
itempropdebe ser una propiedad de un ítem — lo que significa que debe tener un ancestro conitemscope, o ser referenciado explícitamente vía el atributoitemrefen un elementoitemscope. -
Problemas de mantenimiento. Los atributos
itemprophuérfanos sugieren que el marcado circundante fue refactorizado y la estructura de microdata se rompió accidentalmente.
Las causas más comunes de este error son:
-
itemscopefaltante — Agregaste atributositemproppero olvidaste definir el ítem contenedor conitemscope. -
Elementos movidos — Un elemento con
itempropfue movido fuera de su contenedoritemscopeoriginal durante una refactorización. -
Errores de copiar y pegar — Copiaste un fragmento que incluía
itemproppero no elitemscopepadre.
Para corregir el problema, envuelve los elementos itemprop dentro de un contenedor itemscope, usa itemref para asociar propiedades distantes con un ítem, o elimina el atributo itemprop si no se pretendían datos estructurados.
Ejemplos
Incorrecto: itemprop sin itemscope
Esto desencadena el error de validación porque no hay un ancestro itemscope:
<div>
<p>Mi nombre es <span itemprop="name">Liza</span>.</p>
</div>
Correcto: itemprop dentro de un contenedor itemscope
Agregar itemscope (y opcionalmente itemtype) a un elemento ancestro corrige el problema:
<div itemscope itemtype="https://schema.org/Person">
<p>Mi nombre es <span itemprop="name">Liza</span>.</p>
</div>
Correcto: ítems anidados con su propio alcance
Cuando un ítem contiene un sub-ítem, el ítem anidado necesita su propio itemscope:
<div itemscope itemtype="https://schema.org/Person">
<p itemprop="name">Liza</p>
<div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
<span itemprop="addressLocality">Portland</span>,
<span itemprop="addressRegion">OR</span>
</div>
</div>
Correcto: usando itemref para propiedades fuera del alcance
Si no puedes reestructurar tu HTML para anidar itemprop dentro de itemscope, usa itemref para referenciar elementos por su id:
<div itemscope itemtype="https://schema.org/Person" itemref="user-name"></div>
<p id="user-name">
Mi nombre es <span itemprop="name">Liza</span>.
</p>
En este caso, el elemento itemprop="name" no es descendiente del elemento itemscope, pero el atributo itemref="user-name" extrae explícitamente el árbol del elemento referenciado hacia el ítem, haciéndolo válido.
Incorrecto: alcance roto después de refactorizar
Un escenario del mundo real común donde aparece el error después de reestructurar:
<div itemscope itemtype="https://schema.org/Product">
<span itemprop="name">Widget</span>
</div>
<!-- Esto fue movido fuera del div de arriba -->
<span itemprop="price">9.99</span>
Corrige esto moviendo el elemento de vuelta dentro del contenedor itemscope, usando itemref, o eliminando el itemprop huérfano.
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: