Agregar datos estructurados JSON a WordPress

Solucionar errores en Search Console debido a hentry y hatom y generar el marcado de metadatos en posts y páginas, ajustándose al formato que exige Google.

Google aconseja incluir en todas las páginas de un blog que deseen beneficiarse apareciendo en los resultados de las búsquedas, un marcado de datos estructurados, preferiblemente en formato JSON.
Las páginas creadas con WordPress incluyen los marcados hEntry, hAtom y hCard de microformats.org, pero son incompletos y muchas veces provocan mensajes de error en Search Console.
Podemos tratar de solucionarlos modificando el código fuente, lo que es algo complejo o eliminar completamente estas clases y generar los datos estructurados correctos usando JSON.
En este artículo comparto como hacer lo anterior.


Errores de metadatos en Google Search Console

Las páginas creadas con WordPress incluyen los marcados hEntry, hAtom y hCard de microformats.org.
El marcado hAtom es usado en archivos (etiquetas, categorías y otros) y el marcado hEntry es usado en post y páginas.
hEntry es la evolución de hAtom, usados ambos para marcado de contenido sindicado como blogs.
hCard es usado solo para datos personales (nombres, direcciones, números de teléfono, etc.).
Desafortunadamente la información que generan los dos primeros, muchas veces es incompleta, lo que provoca mensajes de error en Search Console en “Aparición en búsquedas -> Datos estructurados”.
Los mensajes más frecuentes es que faltan los parámetros: author, update y otros.
Errores en datos estructurados hEntry en WordPress, en Search Console
Para solucionar estos mensajes de error podemos simplemente eliminar la clase “hentry” de nuestro blog y usar otra alternativa para crear los metadatos necesarios.


Eliminar la clase hEntry para solucionar errores en Google Search Console

Para remover las clases hEntry y hAtom, debemos agregar las siguientes instrucciones al archivo de configuración “functions.php”, en nuestro Tema Child o en un plugin personal.

//Eliminar las clases hentry y hatom
function remove_hentry_post_class( $classes ) {
    $classes = array_diff( $classes, array( 'hentry' ) );
    return $classes;
}
add_filter( 'post_class', 'remove_hentry_post_class' );

Después de hacerlo podemos verificar en la herramienta de Prueba de Datos Estructurados, que ya no se toman como referencia y gradualmente desaparecerán los mensajes de error en Search Console.
No obstante debemos de tener presente, que ahora necesitamos agregar los datos estructurados necesarios.


Generar los datos estructurados JSON para Google

Después de eliminar la clase hEntry (incluyendo a hAtom), para que Google no extraiga los metadatos de nuestras páginas usando este método, debemos de incluir el marcado correcto.
Podemos hacerlo usando un plugin o manualmente.
En este artículo comparto el script que empleo en este blog, para generar automáticamente los datos estructurados en formato JSON, para posts (publicaciones), páginas y archivos.


Metadatos que exige Google

En caso de Artículos, en páginas que no son AMP, Google exige los siguientes parámetros, para que nuestras páginas puedan aparecer en los snipetts de datos enriquecidos o en el carrusel de búsquedas.

– Fecha de creación (datePublished)
– Fecha de modificación (dateModified)
– Encabezado (headline), descripción con menos de 110 caracteres.
– Imagen, con un mínimo de 300 000 pixeles (ancho por altura)
– Datos del Publisher, incluyendo el logo del sitio.

Los requisitos anteriores no se aplican a las páginas en formato AMP, las que deben incluir datos adicionales.
Los que usan el plugin AMP for WordPress, para crear versiones adicionales en dicho formato, no deben preocuparse, porque en ellas se adicionan automáticamente los metadatos correctos.


Código para generar automáticamente los datos estructurados JSON

Usando el siguiente script en PHP, podemos generar e insertar en todas las publicaciones, los metadatos necesarios.
Agrega el marcado dentro de una etiqueta <script type=”application/ld+json”> en el área del footer o pie de página.

function de_json() {
    if ( is_single() ) { 
	if ( has_post_thumbnail() ) {	
        $thumb_id = get_post_thumbnail_id();
        $thumb_url = wp_get_attachment_image_src($thumb_id,'full', true);
		$thumb_url = $thumb_url[0];		
		} else {
		$thumb_url = "https://norfipc.com/blog/wp-content/uploads/RUTA A IMAGEN PREDETERMINADA.jpg";
		}	
?>
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "BlogPosting",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "<?php echo get_permalink(); ?>"
 },
  "headline": "<?php the_title(); ?>",
  "image": {
    "@type": "ImageObject",
    "url": "<?php echo $thumb_url ; ?>",
    "height": 1200,
    "width": 2000
  },
  "datePublished": "<?php echo get_the_time( 'c' ); ?>",
  "dateModified": "<?php echo get_the_modified_date( 'c' ); ?>",
  "author": {
    "@type": "Person",
    "name": "<?php the_author(); ?>"
  },
  "publisher": {
    "@type": "Organization",
    "name": "<?php bloginfo(); ?>",
    "logo": {
      "@type": "ImageObject",
      "url": "https://norfipc.com/logo.jpg",
      "width": 420,
      "height": 60
    }
  }
}
</script> <?php 
	}
	}
add_action('wp_footer','de_json');	

Parámetros a sustituir:
Algunos parámetros como la dirección URL de las páginas, el titulo usado en el “headline”, las fechas de creación y modificación, así como la dirección URL de la imagen destacada, se generan automáticamente.
Es necesario sustituir manualmente los siguientes datos:
– Ruta y nombre de la imagen predeterminada.
Es necesario para evitar error en las entradas que no posean una imagen destacada.
En este caso las dimensiones se fijan en 2000 x 1200, las que requiere el tema Twenty Seventeen, pero se pueden usar otras dimensiones, siempre que su ancho sea igual o mayor que 696 pixeles.
Se debe tener presente que Google exige que la imagen destacada, la que representa a las publicaciones, debe tener un mínimo de ancho de 696 pixeles.
– También se debe especificar manualmente a ruta al logotipo del sitio y sus dimensiones.
Este dato no se obtiene por el script, porque el logotipo usado por WordPress y que se puede subir desde el panel de control en Apariencia –> Identidad del sitio –> Elegir logo, no cumple con los requerimientos de Google.

Especificaciones para el logotipo

Google exige que el logotipo del sitio o blog, debe ser rectangular, con una altura mínima de 60 pixeles, con una altura mínimo del texto de 48 pixeles.
El ancho debe ser de 600 pixeles o menos, pero siempre respetando la altura.


Probar los datos estructurados JSON en Google

Después de integrar el marcado en las páginas del blog, podemos comprobarlas en la herramienta de Prueba de Datos Estructurados.
Comprobar y validar los datos estructurados JSON
El botón “Obtener una”, permite ver una vista previa del resultado.
Los metadatos agregados usando este método a este blog, puede comprobarlo observando el código fuente de esta misma página, en el navegador (Control + U).
Más información detallada en el sitio de Desarrolladores de Google.

Minimizar el código JSON

Después de comprobar que los datos estructurados agregados por este método son correctos, tenemos la opción adicional de minimizar el código.
Para eso podemos seleccionar todo el código fuente comprendido entre las etiquetas script y minimizarlo usando una herramienta online como JSON Minifier.

Agregar otros marcadores de datos estructurados

El método anterior nos permite agregar los datos estructurados del objeto Articulo (Article) para las publicaciones del blog.
Las páginas y archivos (Categorías y Etiquetas) no necesitan metadatos, porque nunca aparecerán en el carrusel de noticias.
No obstante podemos adicionar independientemente otros objetos como Video, Local Business, Productos, Reviews y muchos otros.
Además marcadores para mostrar Breadcrumbs, Perfiles sociales, Logos, etc. en los resultados de las búsquedas.
En las páginas Index o Home (si se emplea una página estática) y en la página de autor, se puede incluir el marcador de Perfiles sociales.
Para eso yo uso el siguiente script.

// Agregar datos estructurados social a Home y Sobre mi
function social_json() {
    if ( is_page( 'sobre-mi' ) || is_front_page() ) { 
?>
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Person",
  "name": "Norfi Carrodeguas",
  "url": "https://norfipc.com/blog",
  "sameAs": [
    "https://www.facebook.com/norfipc",
    "https://www.instagram.com/norfipc",
	"https://twitter.com/NorfiPC",
	"https://pinterest.com/norfipc/",
	"https://www.linkedin.com/in/norfipc",
	"https://norfi-carrodeguas.tumblr.com",
    "https://plus.google.com/+NorfiCarrodeguas"
  ]
}
</script> <?php 
	}
	}
add_action('wp_footer','social_json');	

Reemplaza los datos necesarios y agrega el código, bajo el anterior.
También se pueden agregar otros perfiles sociales. Lee más información.
Recomiendo en Github una excelente recopilación: Structured Data – JSON-LD

Más información relacionada

Solucionar errores de datos estructurados AMP en WordPress
Configurar y personalizar las paginas AMP en WordPress

Estoy en: NorfiPC | Notas | WordPress | Agregar datos estructurados JSON a WordPress



Páginas relacionadas

Buscar con Google