¿El marcado Schema.org funciona si el marcado se construye dinámicamente con JavaScript?
html microdata (3)
Depende de qué tipo de marcado sea. De Google :
JSON-LD es compatible con todas las funciones de Knowledge Graph, cuadros de búsqueda de enlaces de sitio, fragmentos enriquecidos de eventos y fragmentos enriquecidos de recetas; Google recomienda el uso de JSON-LD para esas funciones. Para los restantes tipos de Rich Snippets y migas de pan, Google recomienda el uso de microdatos o RDFa.
Debería funcionar, pero sé que las personas han reportado problemas con la herramienta de prueba.
Tengo una página donde algunos eventos se cargan dinámicamente leyendo algunos JSON con JavaScript.
Construyo un
div
para cada evento con el marcado
Event
Schema.org.
La herramienta de prueba de Google no lee este marcado. ¿Se debe a un error en el marcado o a la carga dinámica?
El código HTML de un
Event
es:
<div class="evento well" itemscope itemtype="http://schema.org/Event">
<meta itemprop="startDate" content="2015-03-20T20:00:00.000Z">
<meta itemprop="endDate" content="2015-01-21T20:00:00.000Z">
<div class="dataEvento">
<div class="dayWeekEvento">venerdì</div>
<div class="dayNumEvento">20</div>
<div class="monthEvento">Marzo</div>
</div>
<div class="datiEvento">
<div class="oraEvento">ore 21:00</div>
<div class="titoloEvento"><span itemprop="name">Titolo evento</span></div>
<div class="luogoEvento" itemprop="address" itemscope="" itemtype="http://schema.org/PostalAddress"><a href="https://www.google.it/maps/place/Milano" target="_blank"><span class=" glyphicon glyphicon-map-marker" aria-hidden="true"></span> <span itemprop="addressLocality">Milano</span></a></div>
</div>
</div>
Si tiene problemas para validar el marcado de esquema con la herramienta de prueba de Google, puede crear el fragmento json-ld con JS, que también le permite manipular los datos si es necesario, como:
<script>
(function(){
var data = {
"@context": "http://www.schema.org",
...
}
var script = document.createElement(''script'');
script.type = "application/ld+json";
script.innerHTML = JSON.stringify(data);
document.getElementsByTagName(''head'')[0].appendChild(script);
})(document);
</script>
La documentación de Google solo menciona que pueden consumir datos estructurados agregados dinámicamente si se usa la sintaxis JSON-LD:
Además, Google puede leer datos JSON-LD incluso cuando se inyectan dinámicamente en el contenido de la página, como por ejemplo mediante código Javascript o "widgets" incrustados.
Esto no significa necesariamente que no puedan leerlo en el caso de otras sintaxis (como Microdata o RDFa), pero al menos no lo documentan.
Que su herramienta de prueba no lo lea puede o no significar algo ( podría ser que la herramienta no maneje esto, pero su sistema interno sí). Sin embargo, no debería haber ningún problema con su marcado real, ya que puede probarlo usted mismo fácilmente pegando su marcado en lugar de ingresar su URL.