¿Por qué mi marcado itemprop = 'image' es incorrecto?

9

He estado experimentando con Microdata y pensé en probarlo en mi blog. Resulta que la plantilla que estaba usando ya agregó algo de marcado. No fue genial y entonces arreglé lo que pude.

Para tratar de forzar mi suerte, he agregado más marcas a mi última publicación, pero la Herramienta de prueba de datos estructurados de Google (SDTT) no está contenta con los itemprop='image'atributos y no estoy seguro de por qué.

Errores de la herramienta de prueba estructurada

Página de resultados .

Tengo entendido, ignorando todo el código intermedio, que he estructurado los datos de esta manera:

<div itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
  <div itemprop='articleBody'>
    <a href="1.png" itemprop="url"><img itemprop="image sharedContent" src="1.png" /></a>
    <a href="2.png" itemprop="url"><img itemprop="image sharedContent" src="2.png" /></a>
    <a href="3.png" itemprop="url"><img itemprop="image sharedContent" src="3.png" /></a>
  </div>
</div>

Y esto me parece correcto. BlogPostingpuede tener las propiedades articleBodyy de imageacuerdo con https://schema.org/BlogPosting , pero de acuerdo con el SDTT:

El atributo itemtype tiene un valor no válido.

De hecho, acabo de probar el SDTT con el código de ejemplo anterior y no se puede validar.

Código de ejemplo en el SDTT

Obviamente me estoy perdiendo algo. ¿Qué estoy haciendo mal?

Ken Sharp
fuente
Algunos de los enlaces en esta pregunta fueron eliminados ya que no son necesarios para responder la pregunta.
John Conde
¿Por qué se eliminaron las etiquetas ampliamente utilizadas entonces?
Ken Sharp

Respuestas:

15

schema.org/BlogPosting image permite ImageObject y URL, sin embargo, Google solo permite ImageObject , de ahí el error. El marcado previsto es:

<!-- my code -->
<div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
  <img src="image.jpg" itemprop="url">
</div>

               

Otra discrepancia es schema.org/ImageObject recomienda contentUrl, pero Google recomienda url, de ahí mi uso anterior.


En respuesta al código de su comentario , su estructura sigue siendo incorrecta. Lo tomaré línea por línea:

<!-- your code -->
<div itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>

Punto menor, pero a menos que vayas por XHTML, itemscope='itemscope'está mal. Uso itemscope(como lo hizo más adelante).

<!-- your code -->
  <div itemprop='articleBody'>
    <div itemscope itemtype="http://schema.org/ImageObject"/>

Su ImageObject es un elemento secundario de la propiedad articleBody, pero no lo ha asociado de esta manera. De esta manera, tiene un articleBody sin propiedades asociadas y un ImageObject no asociado. Deberías usar

<!-- my code -->
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">

Además, />es incorrecto, incluso si está intentando XHTML, ya que este elemento tiene elementos secundarios y un cierre </div>. Solo utilícelo >como lo incluí en el fragmento anterior.

<!-- your code -->
      <a href="1.png" itemprop="url"><img itemprop="image sharedContent" src="1.png" /></a>

¿Qué hace sharedContent aquí? sharedContent espera un CreativeWork cuando se usa como una propiedad de SocialMediaPosting, nunca como una propiedad de ImageObject y nunca en una img.

El otro fragmento de código que coloca la propiedad sharedContent como se muestra a continuación también es incorrecto.

<!-- your code -->
<div itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
  <div itemprop='articleBody'>
    <div itemprop='sharedContent'>
      <div itemscope itemtype="http://schema.org/ImageObject"/>

Si bien sharedContent está ahora en el lugar correcto, aún debe ser CreativeWork. Sus ImageObjects aún no están asociados con BlogPosting, como lo muestra la Herramienta de prueba de datos estructurados.

                                          

El siguiente es el código correcto.

<!-- my code -->
<div itemscope itemtype="http://schema.org/BlogPosting">
  <div itemprop="articleBody">
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
      <a href="1.png" itemprop="url"><img itemprop="image" src="1.png"></a>
    </div>
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
      <a href="2.png" itemprop="url"><img itemprop="image" src="2.png"></a>
    </div>
    <div itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
      <a href="3.png" itemprop="url"><img itemprop="image" src="3.png"></a>
    </div>
  </div>
</div>
grg
fuente
Veo. La adición ImageObjectfalla sharedContentcomo elemento secundario: pastebin.com/cSgVZNyE . La eliminación lo sharedContenthace feliz: pastebin.com/rieWwSM6 . Envolver cada uno imageen un padre sharedContent( pastebin.com/AmpBDqJs ) se valida felizmente, pero ¿es esto porque el STDD de Google simplemente lo ignora? El STDD está bastante contento si contentURLse usa también : pastebin.com/23wBvx8F . Entonces, ¿parece que lo hice correctamente y Google lo hizo incorrectamente? Eso tiene que ser el primero. 😉 Creo que puedo apaciguarlos a todos agregando todas las etiquetas relevantes. ¡Gracias! 😀
Ken Sharp
1
@Ken Vea mi edición para ver mis comentarios sobre su código.
grg
TS utiliza un tipo de plantilla básica de Blogger, por lo que no podrá usar su código sin actualizar toda la plantilla. Los cambios deben realizarse en el nivel de plantilla, no en el nivel de datos estructurados.
Evgeniy
Gracias de nuevo @grgarside. Ciertamente tienes razón sharedContent: he usado todo eso mal. Lo he eliminado por ahora. Al ver otra vez el esquema que veo, no creo que necesite usarlo en a CreativeWork. Simplemente ignore el />, fue escrito a toda prisa 😉, y el código original es XHTML. Acabo de mezclar los dos en mi ejemplo (de ahí las dos versiones de itemscope). El código final es correcto, honesto! 😁
Ken Sharp
@Evgeniy La plantilla se está editando o no funcionaría en absoluto. Mi pregunta original contenía enlaces que cualquiera podría haber revisado fácilmente, pero ahora dos wallies han eliminado los enlaces y estoy harto de editarlos. Así que aquí me estoy explicando una vez más, como predije que tendría que hacerlo.
Ken Sharp
2

Tuve un problema similar con Google Structured Data Tester marcando mis imágenes como no válidas. Aparentemente no acepta imágenes donde la fuente es un dominio localhost. Tan pronto como lo implementé en el servidor provisional, el marcado estructurado pasó la validación.

Miguel
fuente