Datos estructurados de la información del curso (Course
y CourseInstance
)
![Una ilustración de cómo puede aparecer la información del curso en la Búsqueda de Google](https://developers-dot-devsite-v2-prod.appspot.com/static/search/docs/images/course-info-rich-result.png?authuser=3&hl=es-419)
Para ayudar a las personas a encontrar el contenido de tu curso, cuéntale a Google sobre él con datos estructurados de la información del curso. Cuando proporcionas información más detallada sobre un curso, como calificaciones de los usuarios, precios y detalles, Google puede comprenderlo mejor y ofrecer una experiencia enriquecida a las personas con el resultado enriquecido de la información del curso.
Hay dos funciones de resultado enriquecido para cursos que usan el mismo tipo de schema.org de Course
.
Si tu sitio proporciona información sobre cursos, puedes reunir los requisitos para acceder a ambas funciones si sigues las dos guías de implementación:
- Lista de cursos: Es un resultado enriquecido que enumera cursos del mismo sitio web.
- Información del curso: Es un carrusel que muestra información detallada del curso de una variedad de sitios web.
Disponibilidad de funciones
El resultado enriquecido de información del curso está disponible en inglés en todas las regiones en las que está disponible la Búsqueda de Google. Esperamos poder ofrecer más cursos en otros idiomas en el futuro.
Cómo agregar datos estructurados
Los datos estructurados son un formato estandarizado para proporcionar información sobre una página y clasificar su contenido. Si aún no estás familiarizado con los datos estructurados, obtén más información sobre su funcionamiento.
A continuación, presentamos una descripción general para aprender a compilar, probar y actualizar datos estructurados.
- Agrega las propiedades obligatorias. Según el formato que uses, obtén información sobre las ubicaciones donde puedes insertar datos estructurados en la página.
- Sigue los lineamientos.
- Valida tu código con la Prueba de resultados enriquecidos y corrige cualquier error crítico. Procura también corregir los problemas no críticos que puedan marcarse en la herramienta, ya que pueden ayudar a mejorar la calidad de los datos estructurados (sin embargo, esto no es necesario para que se muestren los resultados enriquecidos).
- Implementa algunas páginas que incluyan tus datos estructurados y utiliza la Herramienta de inspección de URLs para probar el modo en el que Google ve la página. Asegúrate de que Google pueda acceder a la página y que no esté bloqueada por un archivo robots.txt, una etiqueta
noindex
ni requisitos de acceso. Si la página se ve bien, puedes pedirle a Google que vuelva a rastrear tus URLs. - Para mantener informado a Google sobre los cambios futuros, te recomendamos que envíes un mapa del sitio. Puedes automatizar este proceso con la API de Search Console Sitemap.
Ejemplo
Este es un ejemplo de una página de información de un solo curso.
<html> <head> <title>Introduction to Computer Science and Programming</title> <script type="application/ld+json"> { "@context": "https://schema.org/", "@id": "https://www.example.com/advancedCpp", "@type": "Course", "name": "Learn Advanced C++ Topics", "description": "Improve your C++ skills by learning advanced topics.", "publisher": { "@type": "Organization", "name": "CourseWebsite", "url": "www.examplecoursewebsite.com" }, "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" }, "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ], "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4, "ratingCount": 1234, "reviewCount": 450 }, "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }], "totalHistoricalEnrollment": 12345, "datePublished": "2024-03-21", "educationalLevel": "Advanced", "about": ["C++ Coding", "Backend Engineering"], "teaches": ["Practice and apply systems thinking to plan for change", "Understand how memory allocation works."], "financialAidEligible": "Scholarship Available", "inLanguage": "en", "availableLanguage": ["fr", "es"], "syllabusSections": [ { "@type": "Syllabus", "name": "Memory Allocation", "description": "Learn how memory is allocated when creating C++ variables.", "timeRequired": "PT6H" }, { "@type": "Syllabus", "name": "C++ Pointers", "description": "Learn what a C++ pointer is and when they are used.", "timeRequired": "PT11H" } ], "review": [ { "@type": "Review", "author": { "@type": "Person", "name": "Lou S." }, "datePublished": "2024-08-31", "reviewRating": { "@type": "Rating", "bestRating": 10, "ratingValue": 6 } }], "coursePrerequisites": [ "Basic understanding of C++ up to arrays and functions.", "https://www.example.com/beginnerCpp" ], "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.example.com", "credentialCategory": "Certificate", // offers only needed if the credential costs extra money. "offers": [{ "@type": "Offer", "category": "Paid", "price": 5, "priceCurrency": "USD" }] }], "video": { "@type": "VideoObject", "name": "Video name", "description": "A video previewing this course.", "uploadDate": "2024-03-28T08:00:00+08:00", "contentUrl": "www.example.come/mp4", "thumbnailUrl": "www.example.com/thumbnailurl.jpg" }, "hasCourseInstance": [ { // Blended, instructor-led course meeting 3 hours per day in July. "@type": "CourseInstance", "courseMode": "Blended", "location": "Example University", "courseSchedule": { "@type": "Schedule", "duration": "PT3H", "repeatFrequency": "Daily", "repeatCount": 31, "startDate": "2024-07-01", "endDate": "2024-07-31" }, "instructor": [{ "@type": "Person", "name": "Ira D.", "description": "Professor at X-University", "image": "http://example.com/person.jpg" }] }, { // Online self-paced course that takes 2 days to complete. "@type": "CourseInstance", "courseMode": "Online", "courseWorkload": "P2D" }], // Only required for course programs that link to child courses. "hasPart": [{ "@type": "Course", "name": "C++ Algorithms", "url": "https://www.example.com/cpp-algorithms", "description": "Learn how to code base algorithms in c++.", "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" } }, { "@type": "Course", "name": "C++ Data Structures", "url": "https://www.example.com/cpp-data-structures", "description": "Learn about core c++ data structures.", "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" } }] } </script> </head> <body> </body> </html>
Lineamientos
Debes seguir estos lineamientos para que tu curso sea apto para aparecer como resultado enriquecido de información de cursos en la Búsqueda de Google.
- Lineamientos de contenido
- Conceptos básicos sobre la Búsqueda
- Lineamientos generales de datos estructurados
Lineamientos de contenido
Solo el contenido educativo que se ajuste a la siguiente definición de curso es apto para el resultado enriquecido de la información del curso: una serie o unidad de plan de estudios que contenga clases, lecciones o módulos sobre una asignatura o un tema en particular.
El lenguaje de marcado de Course
debe estar en una página web que ofrezca un curso o un programa de cursos completo y único. Los siguientes ejemplos no son aptos para el resultado enriquecido de la información del curso:
- Una página de resumen de títulos académicos
- Una página independiente para el examen
- Un evento para el público general, como "Día de la Astronomía"
- Un solo video de 2 minutos, "Cómo hacer un sándwich"
Definiciones de tipos de datos estructurados
Debes incluir las propiedades obligatorias Course
y CourseInstance
si quieres que tu contenido sea apto para mostrarse como resultado enriquecido en la Búsqueda de Google. También puedes incluir las propiedades recomendadas para agregar más información sobre tu contenido, lo que podría brindar una mejor experiencia del usuario.
Course
Un curso es una unidad individual del plan de estudios que se puede tomar sola o como parte de un programa.
La definición completa de Course
está disponible en schema.org/Course.
Propiedades obligatorias | |
---|---|
name |
Es el título completo del curso. "name": "Intro to Statistics" |
description |
Es la descripción del curso.
"description": "This course teaches the basics of statistical thinking." |
provider |
Información sobre la organización que creó el contenido del curso. "provider": { "@type": "Organization", "name": "Example University", "url": "www.exampleuniversity.com" } |
provider.name |
Text
Es el nombre del proveedor del curso. |
offers |
Información sobre el precio total para completar el curso, incluidos los cargos del servicio. No incluyas precios que solo sean aptos para algunos usuarios (por ejemplo, un 20% de descuento para usuarios nuevos). No incluyas tarifas adicionales para certificados en este campo. Si hay un cargo adicional para obtener un certificado, agrégalo a la propiedad "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }] |
offers.category |
Text
La categoría de precios del curso. Usa uno de los siguientes valores:
|
hasCourseInstance |
Cada curso debe tener, al menos, una instancia con información que detalle la propuesta del curso. Consulta las propiedades obligatorias y recomendadas en la sección "hasCourseInstance": [{ // Onsite, instructor-led class meeting weekly in August 2023 "@type": "CourseInstance", "courseMode": "Onsite", "location": "Example University", "courseSchedule": { "@type": "Schedule", "duration": "PT5H", "repeatCount": 4, "repeatFrequency": "Weekly", "startDate": "2023-08-01", "endDate": "2023-8-31" }, "instructor": [{ "@type": "Person", "name": "Kai S.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] }] |
Propiedades recomendadas | |
---|---|
about |
Describe las destrezas que el usuario desarrollará al realizar el curso (si corresponde). "about": ["Quantitative Analysis", "Critical Thinking"] |
aggregateRating |
Es la información sobre la calificación promedio del curso según las calificaciones de los usuarios que realizaron el curso (si corresponde). Sigue los lineamientos para los fragmentos de opiniones y la lista de propiedades de "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "ratingCount": 255, "reviewCount": 189 } |
availableLanguage |
Subtítulos y otros idiomas en los que se ofrece el curso, si corresponde Usa los códigos de dos letras de la lista de códigos ISO 639-1 alpha-2. "availableLanguage": ["fr", "es", "de"] |
coursePrerequisites |
Cualquier conocimiento previo necesario para el curso, si corresponde. Para representarlo, se describe el conocimiento previo o se vincula a otro curso (o ambas opciones). "coursePrerequisites": ["Understanding of Algebra concepts like variables and functions", "https://www.coursewebsite.abc/algebra"] |
datePublished |
Es la fecha en que se publicó el curso por primera vez, si corresponde. Usa el formato de fecha 8601 (AAAA-MM-DD). "datePublished": "2019-03-21" |
educationalCredentialAwarded |
Información sobre el certificado o la credencial que el usuario puede recibir al completar el curso, si corresponde. Si estos tienen un costo adicional, especifica el precio. "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.examplecertificate.com", "credentialCategory": "Certificate", "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "USD", "price": 5 }] }] |
educationalCredentialAwarded.credentialCategory |
Text
Indica el tipo de premio que recibirá el usuario, si corresponde. Usa uno de los siguientes valores:
|
educationalCredentialAwarded.name |
Text
Nombre del premio (si corresponde) |
educationalCredentialAwarded.offers.category |
Text
El tipo de precio del premio, si corresponde. Usa una de las siguientes categorías:
|
educationalCredentialAwarded.offers.price |
Number
Es el precio numérico del premio, si corresponde. |
educationalCredentialAwarded.offers.priceCurrency |
Text
Corresponde a la moneda del precio del premio en formato de moneda ISO 4217 (código de 3 letras), si corresponde. |
educationalCredentialAwarded.url |
URL
Es el vínculo a la página del premio (si corresponde). |
educationalLevel |
El nivel de educación objetivo del curso, si corresponde. Selecciona uno de los siguientes valores:
"educationalLevel": "Beginner" |
financialAidEligible |
Becas, planes de pagos especiales y otras oportunidades de ayuda financiera para los usuarios que deseen realizar el curso, si corresponde. "financialAidEligible": "Scholarships available for eligible users." |
image |
Corresponde a la URL de una imagen que representa el curso (si corresponde). Usa imágenes que sean relevantes al curso, en lugar de logotipos o leyendas. Lineamientos de imagen adicionales:
Por ejemplo: "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
inLanguage |
El idioma principal en el que se ofrece el curso, si corresponde. Usa los códigos de dos letras de la lista de códigos ISO 639-1 alpha-2. "inLanguage": "en" |
offers.price |
Number
Es el precio numérico del curso, si corresponde. No incluyas otra información en este campo, como el símbolo de moneda. |
offers.priceCurrency |
Text
Corresponde a la moneda del precio del curso en formato de moneda ISO 4217 (código de 3 letras), si corresponde. |
provider.url |
URL
Es la URL que vincula a la Página principal del proveedor del curso, si corresponde. |
publisher |
Información sobre la organización que publica y muestra el curso, si corresponde. "publisher": { "@type": "Organization", "name": "Course Website", "url": "www.example.com" } |
publisher.name |
Text
Es el nombre del publicador del curso, si corresponde. |
publisher.url |
URL
URL que vincula a la Página principal del publicador del curso, si corresponde |
review |
Una lista de opiniones de usuarios acerca del curso, si corresponde. Para obtener más información, sigue los lineamientos para los fragmentos de opiniones. "review": [{ "@type": "Review", "author": { "@type": "Person", "name": "Sasha J." }, "datePublished": "2021-09-22", "reviewRating": { "@type": "Rating", "ratingValue": 4 } }] |
syllabusSections |
Información sobre los diferentes módulos que conforman el curso, si corresponde. "syllabusSections": [{ "@type": "Syllabus", "name": "Algebra Review", "description": "Review prerequisite Algebra concepts.", "timeRequired": "PT2H30M" }, { "@type": "Syllabus", "name": "Statistics Terms", "description": "Learn the definitions of basic statistics terms.", "timeRequired": "PT5H" }] |
syllabusSections.description |
Text
Es una descripción del tema del módulo, si corresponde. |
syllabusSections.name |
Text
Es el nombre del módulo del curso, si corresponde. |
syllabusSections.timeRequired |
Duration
Usa el formato de duración 8601, si corresponde.
Por ejemplo, |
teaches |
Los resultados del aprendizaje o los conocimientos específicos que adquirirá el usuario al realizar el curso, si corresponde. "teaches": ["How to use visualization tools and graphs", "Why stats is important"] |
totalHistoricalEnrollment |
Indica la cantidad total de usuarios que se inscribieron desde el principio del curso, si corresponde. "totalHistoricalEnrollment": 80032 |
video |
Una vista previa o avance de video del curso, si corresponde. Para obtener más información, sigue los lineamientos de "video": { "@type": "VideoObject", "name": "Video name", "description": "A video previewing this course.", "uploadDate": "2022-03-28T08:00:00+08:00", "contentUrl": "www.videourl.mp4", "thumbnailUrl": "www.thumbnailurl.jpg" } |
CourseInstance
La definición completa de CourseInstance
está disponible en schema.org/CourseInstance.
Cada curso debe tener, al menos, un CourseInstance
con las propiedades obligatorias completadas.
Propiedades obligatorias | |
---|---|
courseMode |
Medio a través del cual se dictará el curso. Usa uno de los siguientes valores:
Si la clase es "courseMode": "Online" |
courseSchedule |
Información sobre cuánto tiempo tarda un usuario promedio en completar el curso, según un ritmo sugerido. Incluye fechas de inicio y finalización para los cursos que tienen un cronograma fijo. Este es un ejemplo de un curso que puedes comenzar en cualquier momento: // This course takes 6 weeks to complete. "courseSchedule": { "@type": "Schedule", "repeatCount": 6 "repeatFrequency": "Weekly", } Este es un ejemplo de un curso durante un tiempo determinado: // This course expects 1 hour per day during July 2023 "courseSchedule": { "@type": "Schedule", "duration": "PT1H", "repeatCount": 31 "repeatFrequency": "Daily", "startDate": "2023-07-01", "endDate": "2023-07-31" } |
courseSchedule.repeatCount |
Integer
Es el valor numérico de la duración del curso, en esta unidad: |
courseSchedule.repeatFrequency |
Text
Las propiedades
|
courseWorkload |
Text
Este campo representa el tiempo total para mirar todos los videos y completar todas las tareas y los exámenes del curso. Usa el formato de duración 8601. "courseWorkload": "PT22H" |
Propiedades recomendadas | |
---|---|
courseSchedule.duration |
Duration
Es el ritmo sugerido para el tiempo que un usuario promedio puede necesitar para unidades de No especifiques la duración completa del curso con esta propiedad. Usa la propiedad |
courseSchedule.endDate |
Date
Es la fecha de finalización del curso, en el formato de fecha 8601 (AAAA-MM-DD), si corresponde. |
courseSchedule.startDate |
Date
Corresponde a la fecha de inicio del curso, en el formato de fecha 8601 (AAAA-MM-DD), si corresponde. |
image |
URL
Es la URL que vincula a una imagen del instructor, si corresponde. Lineamientos de imagen adicionales:
Por ejemplo: "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
instructor |
Información sobre el instructor del curso, si corresponde. "instructor": [{ "@type": "Person", "name": "Dana A.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] |
instructor.description |
Text
La descripción del instructor y sus credenciales, si corresponde. |
instructor.name |
Text
Nombre del instructor, si corresponde. |
location |
El nombre o la dirección (o bien, ambos) de la ubicación física en la que se dicta el curso, si corresponde. "courseMode": "Blended", "location": "Example High School" |
Programa del curso
El programa de un curso es un conjunto de cursos secundarios. Los cursos secundarios deben ser independientes con URL y páginas de destino distintas.
Si tu página web es un programa de cursos, incluye las siguientes propiedades obligatorias (además de las otras que se enumeran en las secciones Course
y CourseInstance
).).
Propiedades obligatorias | |
---|---|
hasPart |
Es la lista de cursos secundarios que forman parte de este programa. "@context": "https://schema.org/", "@type": "Course", "name": "Learning Pathway: Knitting", "url": "www.example.com/knitprogram" // Fill the other required Course and CourseInstance properties "hasPart": [{ "@type": "Course", "name": "Intro to Knitting", "url": "www.example.com/knitbasics", "description": "Learn the basics of how to knit." }, { "@type": "Course", "name": "Knit a Sweater", "url": "www.example.com/knitsweater", "description": "Learn to knit an entire sweater." }] |
hasPart.name |
Text
Es el título completo del curso secundario. |
hasPart.url |
URL
Es la URL que vincula a la página de destino del curso secundario. |
Propiedades recomendadas | |
---|---|
hasPart.description |
Text
Una breve descripción de lo que cubre el curso secundario, si corresponde.
|
Cómo supervisar resultados enriquecidos con Search Console
Search Console es una herramienta que te ayuda a supervisar el rendimiento de tus páginas en la Búsqueda de Google. Si bien no es necesario que te registres en Search Console para que se incluya tu contenido en los resultados de la Búsqueda de Google, puede ayudarte a comprender y mejorar la forma en que Google ve tu sitio. Te recomendamos que revises Search Console en los siguientes casos:
- Después de implementar datos estructurados por primera vez
- Después de lanzar plantillas nuevas o actualizar código
- Para analizar tráfico periódicamente
Después de implementar datos estructurados por primera vez
Después de que Google haya indexado tus páginas, busca problemas con el informe de estado de resultados enriquecidos relevante. Lo ideal es que haya un aumento de los elementos válidos y no de los elementos no válidos. Si encuentras problemas en los datos estructurados, haz lo siguiente:
- Corrige los elementos no válidos.
- Inspecciona una URL publicada para verificar si persiste el problema.
- Solicita una validación desde el informe de estado.
Después de lanzar plantillas nuevas o actualizar código
Cuando realices cambios significativos en tu sitio web, supervisa los aumentos en los elementos no válidos de datos estructurados.- Si notas un aumento en la cantidad de elementos no válidos, tal vez se deba a que implementaste una plantilla que no funciona o a que tu sitio interactúa con la plantilla actual de una forma diferente e incorrecta.
- Si notas una disminución de los elementos válidos (que no coincide con un aumento en la cantidad de elementos no válidos), es posible que ya no estés incorporando datos estructurados en tus páginas. Usa la Herramienta de inspección de URLs para saber cuál es la causa del problema.
Cómo analizar el tráfico periódicamente
Analiza el tráfico de la Búsqueda de Google con el Informe de rendimiento. Los datos te mostrarán con qué frecuencia tu página aparece como resultado enriquecido en la Búsqueda, con qué frecuencia los usuarios hacen clic en ella y cuál es la posición promedio en la que apareces en los resultados de la búsqueda. También puedes extraer esos resultados automáticamente con la API de Search Console.Solución de problemas
Si tienes problemas para implementar o depurar datos estructurados, te brindamos algunos recursos que podrían resultarte útiles.
- Si usas un sistema de administración de contenido (CMS), o si alguien más se encarga de tu sitio, pídele que te ayude. Asegúrate de reenviarle cualquier mensaje de Search Console que detalle el problema.
- Google no garantiza que se muestren en los resultados de la búsqueda las funciones que consumen datos estructurados. Para obtener una lista de los motivos comunes por los que Google podría no mostrar tu contenido en un resultado enriquecido, consulta los Lineamientos generales de datos estructurados.
- Es posible que haya un error en los datos estructurados. Consulta la lista de errores de datos estructurados.
- Si recibiste una acción manual de datos estructurados en tu página, estos datos se ignorarán (aunque la página puede seguir apareciendo en los resultados de la Búsqueda de Google). Para solucionar los problemas con datos estructurados, usa el Informe de acciones manuales.
- Vuelve a consultar los lineamientos para determinar si tu contenido no cumple con ellos. El problema puede deberse a contenido generador de spam o a un uso fraudulento del lenguaje de marcado. Sin embargo, es posible que no sea un problema de sintaxis, por lo que la prueba de resultados enriquecidos no podrá identificar estos problemas.
- Soluciona problemas de resultados enriquecidos faltantes o disminución del total de resultados enriquecidos.
- Espera un tiempo suficiente para que se vuelvan a realizar el rastreo y la indexación. No olvides que pueden transcurrir varios días después de publicar una página para que Google la encuentre y la rastree. Si tienes preguntas generales sobre el rastreo y la indexación, consulta las Preguntas frecuentes sobre el rastreo y la indexación de la Búsqueda de Google.
- Publica una pregunta en el foro de la Central de la Búsqueda de Google.