David Pérez

Charla WordCamp Chiclana: Crea Schemas sin plugins en WordPress

·

·

Este es un resumen de mi charla que he realizado en WordCamp Chiclana 2020, que desde aquí agradezco su confianza para contar conmigo como ponente.

WordCamp Chiclana 2020 Crea schemas sin plugins from Closemarketing

¿Qué son los Schemas?

  • Conjunto de etiquetas para describir nuestro contenido.
  • Ofrece semántica enriquecida para los buscadores.
  • Ayuda a entender y clasificar la información.
  • Podrá aparecer destacado en el buscador.

Tipos de Schemas

En la página de Schema.org, ofrece la jerarquía total de todos los esquemas creados, siendo los de primer nivel los siguientes:

  • Action. Acción realizada por un agente directo o indirecto sobre un objeto directo.
  • CreativeWork. El tipo más genérico para especificar un trabajo creativo, que incluye libros, películas, fotografías, programas de software, etc.
  • Event. Un evento que ocurre en un determinado tiempo y localización, tal como un concierto, clase o festival. La información de las entradas se puede realizar utilizando la propiedad ofertas. Los eventos repetitivos deberán estructurarse como objetos de eventos separados.
  • Intangible. Una clase útil que sirve de paraguas para cosas intangibles como cantidades, valores estructurados, etc.
  • MedicalEntity. El tipo genérico de la entidad relacionada con la salud y la práctica de la medicina.
  • Organization. Una organización como un colegio, ONG, corporación, club, etc.
  • Person. Una persona (viva, muerta, «no muerta», o ficticia).
  • Place. Entidades que están de alguna manera fijas, con un sitio fijo.
  • Product. Un producto o servicio ofertado. Por ejemplo: un par de zapatos, una entrada de concierto, alquiler de coches, un corte de pelo, o un episodio de una serie en streaming online.

Nos ofrece un total de 1022 esquemas diferentes, por lo que podemos darnos cuenta de la versatilidad para utilizar dichos esquemas.

Ejemplo Schema para Recetas

add_action( 'wp_head', 'cmk_add_schema_pages', 20 );
/**
 * Shows Schema depeding of post type in header with LD JSON
 *
 * @return void
 */
function cmk_add_schema_pages() {
      $post_id      = get_the_ID();
      $cook_time    = get_post_meta( $post_id, 'rec_tiempo', true );
      $prep_time    = get_post_meta( $post_id, 'rec_tiempo', true );
      $ingredients  = get_post_meta( $post_id, 'rec_ingredient', false );
      $recipe_inst  = wp_strip_all_tags( get_post_meta( $post_id, 'rec_preparacion', true ) );
      $recipe_yield = get_post_meta( $post_id, 'rec_personas', true );

      if ( is_singular( 'receta' ) ) {
            $sch = '
<script type="application/ld+json"> 
      {
            "@context": "http://schema.org",
            "@type": "Recipe",
            "author": "David Perez",
            "cookTime": "PT' . $cook_time . 'M",
            "datePublished": "2009-05-08",
            "description": " ' . get_the_excerpt() . '",
            "image": "' . get_the_post_thumbnail_url() . '",
            "recipeIngredient": [';
            if ( is_array( $ingredients ) ) {
                  foreach ( $ingredients[0] as $ingredient ) {
                        $sch .= '" ' . $ingredient . '",';
                  }
            }
            $sch .= '],
            "prepTime": "' . $prep_time . '",
            "recipeInstructions": "' . $recipe_inst . '",
            "recipeYield": "' . $recipe_yield . ' persons",
            "suitableForDiet": "http://schema.org/LowFatDiet"
      }
</script>';

            echo $sch;
      } // Recipe schema
}




Ejemplo Esquema Organización

add_action( 'wp_head', 'cmk_add_schema_home_page', 20 );
/**
 * Shows Schema depeding of post type home_page in header with LD JSON
 *
 * @return void
 */
function cmk_add_schema_home_page() {

      if ( is_front_page() || is_home() ) {
            $sch = '
<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Organization",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Granada, España",
    "postalCode": "18006",
    "streetAddress": "Calle Jose Luis Pérez Pujadas, 6 Edificio Forum Oficina B29"
  },
  "email": "info@closemarketing.es",
  "url": "https://www.closemarketing.es/",
  "description": "Agencia de Marketing Online, Diseñamos Web en WordPress para Granada y Málaga.",
  "taxID": "ESB19618909",
  "employee": [
    {
      "@type": "Person",
      "name": "David Pérez"
    },
    {
      "@type": "Person",
      "name": "Sacra Jáimez"
    }
  ],
  "member": [
      {
            "@type": "Organization",
            "name": "AJE Granada"
      },
      {
            "@type": "Organization",
            "name": "WordPress Granada"
      }
    ],
  "name": "Closemarketing",
  "telephone": "+34858958383"
}
</script>';
            echo $sch;
      } // home_page schema
}

Ejemplo Esquema Cursos

add_action( 'wp_head', 'cmk_add_schema_courses', 20 );
/**
 * Shows Schema depeding of post type in header with LD JSON
 *
 * @return void
 */
function cmk_add_schema_courses() {
      if ( is_singular( 'formacion' ) ) {
            $post_id   = get_the_ID();
            $price_raw = get_post_meta( $post_id, '_listing_price', true );
            $time_raw  = get_post_meta( $post_id, 'for_dura', true );
            $time      = substr_replace( $time_raw, '', -1 );
            if ( date( m ) > 6 ) {
                  $year_start = date( 'Y' );
                  $year_end   = date( 'Y' ) + 1;
            } else {
                  $year_start = date( 'Y' ) - 1;
                  $year_end   = date( 'Y' );
            }
            $start_date = $year_start . '-09-01';
            $end_date   = $year_end . '-06-20';
            $sch        = '<script type="application/ld+json">
{
  "@context": "http://schema.org/",
  "@id": "./",
  "@type": "Course",
  "name": "' . get_the_title( $post_id ) . '",
  "description": "' . get_the_excerpt( $post_id ) . '",
  "hasCourseInstance": [
    {
      "@type": "CourseInstance",
      "name": "' . get_the_title( $post_id ) . '",
      "location": {
            "@type": "Place",
            "address": {
              "@type": "PostalAddress",
              "addressLocality": "Granada",
              "addressRegion": "ESP"
            }
      },
      "description": "' . get_the_excerpt( $post_id ) . '",
      "startDate": "' . $start_date . '",
      "startDate": "' . $end_date . '",
      "timeRequired": "' . $time . '",
      "about": "' . get_post_meta( $post_id, 'for_ncursos', true ) . '"
    }
  ]
}
</script>';

            echo $sch;
      } // Course schema
}
51 respuestas a «Charla WordCamp Chiclana: Crea Schemas sin plugins en WordPress»
  1. Avatar de WordCamp Chiclana

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  2. Avatar de Sacra Jáimez

    Resumen y presentación de la ponencia de @davidperezmk en #WCChiclana

  3. Avatar de Rocío Valdivia

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  4. Avatar de Closemarketing

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  5. Avatar de WordPress Cartagena

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  6. Avatar de zonadam

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  7. Avatar de Santiago Alonso ?

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  8. Avatar de Cesar SEO

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  9. Avatar de Antonio MSP ?

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  10. Avatar de Jesús Yesares García

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  11. Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  12. Avatar de PresupuestoWP.com

    Este Article fue mencionado en brid-gy.appspot.com

  13. Avatar de Mercedes Romero

    Este Article fue mencionado en brid-gy.appspot.com

  14. Avatar de Isa

    Este Article fue mencionado en brid-gy.appspot.com

  15. Avatar de Jesús Yesares García

    Este Article fue mencionado en brid-gy.appspot.com

  16. Avatar de Antonio MSP ?

    Este Article fue mencionado en brid-gy.appspot.com

  17. Avatar de Santiago Alonso ?

    Este Article fue mencionado en brid-gy.appspot.com

  18. Avatar de Nahuai Badiola

    Este Article fue mencionado en brid-gy.appspot.com

  19. Avatar de Miguel Ángel

    Este Article fue mencionado en brid-gy.appspot.com

  20. Avatar de Lola Martínez

    Este Article fue mencionado en brid-gy.appspot.com

  21. Avatar de GamiPress

    Este Article fue mencionado en brid-gy.appspot.com

  22. Avatar de Isabel_gitanilla

    Este Article fue mencionado en brid-gy.appspot.com

  23. Avatar de WordPress Cartagena

    Este Article fue mencionado en brid-gy.appspot.com

  24. Avatar de Closemarketing

    Este Article fue mencionado en brid-gy.appspot.com

  25. Avatar de Miguel Ángel Moreno

    Este Article fue mencionado en brid-gy.appspot.com

  26. Avatar de Francesc Barbero ?

    Este Article fue mencionado en brid-gy.appspot.com

  27. Avatar de Diegol

    Este Article fue mencionado en brid-gy.appspot.com

  28. Avatar de Fernando G.Rebolledo

    Este Article fue mencionado en brid-gy.appspot.com

  29. Avatar de Jesús Nuño

    Este Article fue mencionado en brid-gy.appspot.com

  30. Avatar de SiteGround España

    Este Article fue mencionado en brid-gy.appspot.com

  31. Avatar de WordCamp Chiclana

    Este Article fue mencionado en brid-gy.appspot.com

  32. Avatar de Sacra Jáimez

    Este Article fue mencionado en brid-gy.appspot.com

  33. Avatar de zonadam

    Este Article fue mencionado en brid-gy.appspot.com

  34. Avatar de Manuel Puerto

    David, que no tuvimos ocasión de preguntarte ayer. ¿Por qué el logo de magento? 😀

    1. Avatar de David Pérez
      David Pérez

      Buenas! Ese logo es también el de Schema.org. Lo encontré navegando por Internet. La verdad, no sé porqué se parecen tanto..
      Aquí tienes un ejemplo…:
      https://jaaadesign.nl/en/blog/schema-org/

  35. Avatar de Paqui Oviedo

    Este Article fue mencionado en brid-gy.appspot.com

  36. Avatar de FireBear Studio

    Este Article fue mencionado en brid-gy.appspot.com

  37. Avatar de Thomas Fanchin

    Este Article fue mencionado en brid-gy.appspot.com

  38. Avatar de Pablo GonSan

    Este Article fue mencionado en brid-gy.appspot.com

  39. Avatar de Pepe Márquez

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  40. Avatar de Pepe Márquez

    Este Article fue mencionado en brid-gy.appspot.com

  41. Avatar de WordPress Griñón

    Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  42. Avatar de Salir en buscadores

    Este Article fue mencionado en brid-gy.appspot.com

  43. Os dejo a continuación el resumen de la ponencia y la presentación de #WCChiclana Abierto a comentarios!
    davidperezgar.com/blog/charlas/w…

  44. Avatar de aletecno ?

    Este Article fue mencionado en brid-gy.appspot.com

  45. Este Article fue mencionado en brid-gy.appspot.com

  46. Avatar de Eduardo

    Buen día.

    Gusto en saludar, tenemos una página web para ofertar cursos presenciales, queremos incluir las siguientes propiedades a»image», «url», «las 5 estrellitas de valorización» y «cantidades de horas del curso».
    Abajo dejo el código base, a ese código queremos incorporar las propiedades descritas anteriormente, el código será agregado con el plugin: Insert Headers and Footers
    Los cursos fueron creados con el plugin Woocommerce dado que son de pago.
    Nos puedes colaborar con el código que incluyan las propiedades y si nos recomiendas otras propiedades, bienvenidas serán,
    CÓDIGO:

    {
    «@context»: «https://schema.org»,
    «@type»: «Course»,
    «name»: «Técnicas de masaje Hindú Champi»,
    «description»: «Esta ocupación ha sido diseñada para adquirir los conocimientos fundamentales de la actividad de Técnicas de masaje Hindú Champi.»,
    «provider»: {
    «@type»: «Organization»,
    «name»: «Ickurd Capacitaciones»,
    «sameAs»: «https://www.ickurd.cl/inscripciones/masoterapia/tecnicas-de-masaje-hindu-champi/»,
    «telephone»: «+569 8143 5170»
    }
    }

    1. Avatar de Eduardo

      Tu código de ejemplo para curso no funciono, solamente copie el script y lo pegue en footer.php y nos dio mucho errores al consultar en https://search.google.com/structured-data/testing-tool?utm_campaign=devsite&utm_medium=jsonld&utm_source=job-posting#

      NUESTRO CÓDIGO ENTERO:

      {
      «@context»: «https://schema.org»,
      «@type»: «Course»,
      «name»: «Técnicas de masaje Hindú Champi»,
      «description»: «Esta ocupación ha sido diseñada para adquirir los conocimientos fundamentales de la actividad de Técnicas de masaje Hindú Champi.»,
      «provider»: {
      «@type»: «Organization»,
      «name»: «Ickurd Capacitaciones»,
      «sameAs»: «https://www.ickurd.cl/inscripciones/masoterapia/tecnicas-de-masaje-hindu-champi/»,
      «telephone»: «+569 8143 5170»
      }
      }

      1. Avatar de David Pérez
        David Pérez

        Buenas Eduardo, ¿Qué tipo de problemas os dio? El código al copiar y pegar, ten cuidado con las comillas.
        Tampoco te lo recomiendo en el footer.php, sino más bien en mu-plugins/functions.php para que prevalezca independientemente del tema.
        Saludos.

        1. Avatar de Eduardo

          Gracias por tu respuesta.
          La carpeta mu-plugins de mi Worpress esta vacía y nunca la hemos utilizado , pensamos que estos tipos de códigos se agregaban dentro del tema hijo en el archivo **.php
          Nuestro servicio es Capacitaciones, Cursos o Talleres.
          Comprendimos la lógica de construir los códigos (en la generalidad, no tan puntual) de forma manual a través de campos personalizados explicado en: https://digitalmarketcol.com/blog/como-agregar-datos-estructurados-a-wordpress-manualmente/
          Creamos un campo personalizado llamado Schemamarkup tal como en la explicación, y copiamos el siguiente código en la caja valor:
          {
          «@context»: «https://schema.org»,
          «@type»: «Course»,
          «name»: «Técnicas de masaje Hindú Champi «,
          «description»: «Esta ocupación ha sido diseñada para adquirir los conocimientos fundamentales de la actividad de Técnicas de masaje Hindú Champi. «,
          «provider»: {
          «@type»: «Organization»,
          «name»: «Ickurd Capacitaciones»,
          «sameAs»: «https://www.ickurd.cl/inscripciones/masoterapia/tecnicas-de-masaje-hindu-champi/»,
          «telephone»: «+569 8143 5170»
          },
          «image»: {
          «@type»: «ImageObject»,
          «contentLocation»: «Región Metropolitana»,
          «contentUrl»: » https://www.ickurd.cl/wp-content/uploads/2020/05/Técnicas-de-masaje-Hindú-champi.png «,
          «name»: «Técnicas de masaje Hindú Champi»
          },
          «aggregateRating»:{
          «@type»:»AggregateRating»,
          «ratingValue»:»4″,
          «ratingCount»:»1004″,
          «bestRating»:»5″
          }
          }
          }

          Revisamos el código shema.org en https://search.google.com/structured-data/testing-tool?hl=es#
          y todo bien, reconoce «@type»: «Course».
          Luego en el archivo header.php antes de la etiqueta de cierre copiamos:

          $schemamarkup = get_post_meta(get_the_ID(), ‘schemamarkup’, true);
          if(!empty($schemamarkup)) {
          echo $schemamarkup;
          }
          Luego nos fuimos a probar la URL de la página del producto donde aplicamos el campo personalizado: https://search.google.com/structured-data/testing-tool?hl=es#, el resultado de la URL indica @type Product, y no «@type»: «Course», es ahí en donde nos perdemos.
          Los producto fueron realizados a través del plugin woocommerce, no se si este plugin ya trae shema.org o no?
          Luego de esto dejamos los archivo como ants, eliminamos el campo personalizado Schemamarkup y el codigo del archivo header.php:
          $schemamarkup = get_post_meta(get_the_ID(), ‘schemamarkup’, true);
          if(!empty($schemamarkup)) {
          echo $schemamarkup;
          }
          Probamos nuevamente la URL en https://search.google.com/structured-data/testing-tool?hl=es#, y nos arrojo el mismo resultado que la vez anterior, nos muestra @type Product, aunque ya eliminamos todo pero igual lo sigue mostrando.
          Finalmente scaneamos la web en https://www.woorank.com/es/ y no reconoce ningún shema.org
          Nuestra web https://www.ickurd.cl
          La capacitación donde aplicamos el campo personalizado es en:
          https://www.ickurd.cl/inscripciones/masoterapia/tecnicas-de-masaje-hindu-champi/
          Esto es lo que realizamos, ahora lo dejamos como antes, desahicimos todo, pero cuando consulto la URL del curso en https://search.google.com/structured-data/testing-tool?hl=es# me indica que si hay shema.org pero de Prodcut, pero cuando realizo el scan, no me aparece que tenga shema.org.
          Gracias de antemanos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.