Datos estructurados de información del curso (Course
y CourseInstance
)
![Ilustración de cómo puede aparecer la información de los cursos en la Búsqueda de Google](https://developers.google.cn/static/search/docs/images/course-info-rich-result.png?authuser=19&hl=es)
Puedes ayudar a los usuarios a encontrar el contenido de tu curso informando a Google sobre él mediante datos estructurados de información del curso. Si proporcionas información más detallada sobre un curso, como las puntuaciones de los autores de las reseñas, los precios y los detalles, Google podrá comprenderlo mejor y ofrecer una experiencia completa a los usuarios con el resultado enriquecido de información del curso.
Hay dos funciones de resultados enriquecidos de cursos que usan el mismo tipo de Course
de schema.org.
Si en tu sitio se proporciona información sobre cursos, puedes usar las dos funciones siguiendo las dos guías de implementación:
- Lista de cursos: un resultado enriquecido que incluye cursos del mismo sitio web.
- Información del curso: un carrusel que muestra información detallada sobre cursos de varios sitios web.
Disponibilidad de la función
Los resultados enriquecidos de información del curso están disponibles en inglés en todos los países en los que se puede usar la Búsqueda de Google. Esperamos poder ofrecer más cursos en otros idiomas que no sean el inglés en el futuro.
Cómo añadir datos estructurados
Los datos estructurados son un formato estandarizado con el que se puede proporcionar información sobre una página y clasificar su contenido. Consulta cómo funcionan los datos estructurados si aún no te has familiarizado con ellos.
A continuación se explica a grandes rasgos cómo crear, probar y publicar datos estructurados. Si necesitas una guía detallada para añadir datos estructurados a una página web, consulta el codelab de datos estructurados.
- Añade las propiedades obligatorias. Consulta más información sobre dónde insertar datos estructurados en una página en función del formato que estés utilizando.
- Sigue las directrices.
- Valida tu código con la prueba de resultados enriquecidos y corrige los errores críticos. Te recomendamos que también corrijas 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).
- Crea varias páginas que incluyan tus datos estructurados y comprueba cómo las ve Google con la herramienta de inspección de URLs. Asegúrate de que Google pueda acceder a tu página y de que no esté bloqueada por un archivo robots.txt, por la etiqueta
noindex
ni por requisitos de inicio de sesión. Si la página se ve bien, puedes solicitar que Google vuelva a rastrear tus URLs. - Para que Google siempre tenga la versión actualizada de tus páginas, te recomendamos que envíes un sitemap. Puedes automatizar este envío con la API Sitemap de Search Console.
Ejemplo
A continuación se muestra un ejemplo de una página de información del curso individual.
<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>
Directrices
Debes seguir estas directrices para que tu curso pueda aparecer como resultado enriquecido de información del curso en la Búsqueda de Google.
- Directrices de contenido
- Directrices básicas de la Búsqueda
- Directrices generales sobre datos estructurados
Directrices de contenido
Solo el contenido educativo que se ajuste a la siguiente definición de curso puede aparecer en el resultado enriquecido de información del curso: "una unidad o conjunto de unidades de un plan de estudios que incluye clases magistrales, lecciones o módulos de una materia o tema en particular".
La etiqueta Course
debe incluirse en las páginas web que ofrezcan un curso o programa de cursos completo y único. Los siguientes ejemplos no pueden aparecer en resultados enriquecidos de información del curso:
- Una página de resumen de títulos académicos
- Una página de examen independiente
- Un evento público general, como el "Día de la Astronomía"
- Un vídeo de 2 minutos titulado "Cómo preparar un bocadillo"
Definiciones de tipos de datos estructurados
Debes incluir las propiedades obligatorias Course
y CourseInstance
para que tu contenido pueda mostrarse como un resultado enriquecido en la Búsqueda de Google. Si quieres, puedes especificar también las propiedades recomendadas para proporcionar más información sobre tu contenido y, así, ofrecer una mejor experiencia a tus usuarios.
Course
Un curso es una unidad individual de un plan de estudios que se puede hacer por sí solo o como parte de un programa.
Puedes consultar la definición completa de Course
en schema.org/Course.
Propiedades obligatorias | |
---|---|
name |
Es el título completo del curso. "name": "Intro to Statistics" |
description |
Indica la descripción del curso.
"description": "This course teaches the basics of statistical thinking." |
provider |
Información sobre la organización que ha creado el contenido del curso. "provider": { "@type": "Organization", "name": "Example University", "url": "www.exampleuniversity.com" } |
provider.name |
Text
El nombre del proveedor del curso. |
offers |
Información sobre el precio total para completar el curso, incluidas las cuotas de servicio. No indiques un precio que solo esté disponible para algunos usuarios (por ejemplo, 20 % de descuento para usuarios nuevos). No incluyas tarifas de certificados adicionales en este campo. Si hay que pagar un suplemento para obtener un certificado, añádelo a la propiedad "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }] |
offers.category |
Text
Es la categoría de precios del curso. Se debe usar uno de los valores indicados a continuación:
|
hasCourseInstance |
Cada curso debe tener al menos una instancia con información detallada sobre la oferta 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 habilidades que el usuario desarrollará al hacer el curso, si corresponde. "about": ["Quantitative Analysis", "Critical Thinking"] |
aggregateRating |
Información sobre la valoración media del curso basada en las puntuaciones que han dejado los usuarios que han hecho el curso, si procede. Sigue las directrices de fragmentos de reseñas y la lista de propiedades de "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "ratingCount": 255, "reviewCount": 189 } |
availableLanguage |
Subtítulos u otros idiomas en los que se ofrezca el curso, si corresponde. Usa los códigos de dos letras de la lista de códigos ISO 639-1 alfa-2. "availableLanguage": ["fr", "es", "de"] |
coursePrerequisites |
Los conocimientos previos que se necesiten para realizar el curso, si corresponde. Para representarlo, puedes describir los conocimientos previos o enlazar otro curso (o hacer ambas cosas). "coursePrerequisites": ["Understanding of Algebra concepts like variables and functions", "https://www.coursewebsite.abc/algebra"] |
datePublished |
La fecha en la 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 credencial que el usuario puede recibir al completar el curso, si corresponde. Si tienen un coste adicional, especifícalo. "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.examplecertificate.com", "credentialCategory": "Certificate", "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "USD", "price": 5 }] }] |
educationalCredentialAwarded.credentialCategory |
Text
El tipo de certificado que recibirá el usuario, si corresponde. Se debe usar uno de los valores indicados a continuación:
|
educationalCredentialAwarded.name |
Text
El nombre del certificado, si procede. |
educationalCredentialAwarded.offers.category |
Text
El tipo de precio del certificado, si procede. Usa una de las siguientes categorías:
|
educationalCredentialAwarded.offers.price |
Number
Precio numérico del certificado, si procede. |
educationalCredentialAwarded.offers.priceCurrency |
Text
Indica la moneda del precio del certificado, expresada en el formato de moneda ISO 4217 (código de 3 letras), si procede. |
educationalCredentialAwarded.url |
URL
El enlace a la página del certificado, si procede. |
educationalLevel |
El nivel educativo objetivo del curso, si corresponde. Selecciona uno de los siguientes valores.
"educationalLevel": "Beginner" |
financialAidEligible |
Cualquier beca, plan de pago especial u otras oportunidades de ayuda económica para los usuarios que quieran realizar el curso, si corresponde. "financialAidEligible": "Scholarships available for eligible users." |
image |
La URL de una imagen que represente el curso, si corresponde. Utiliza imágenes que sean relevantes para el curso, en lugar de logotipos o subtítulos. Directrices de imágenes 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 alfa-2. "inLanguage": "en" |
offers.price |
Number
El precio numérico del curso, si corresponde. No incluyas otros datos en este campo, como el símbolo de la moneda. |
offers.priceCurrency |
Text
Es la moneda del precio del curso, expresada en el formato de moneda ISO 4217 (código de 3 letras), si procede. |
provider.url |
URL
La URL que enlaza a la página principal del proveedor del curso, si procede. |
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
El nombre del editor del curso, si corresponde. |
publisher.url |
URL
La URL que enlaza a la página principal del editor del curso, si procede. |
review |
Una lista con las reseñas de los usuarios sobre el curso, si procede. Consulta las directrices de fragmentos de reseñas para obtener más información. "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 componen el curso, si procede. "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
Una descripción del tema del módulo, si procede. |
syllabusSections.name |
Text
El nombre del módulo del curso, si corresponde. |
syllabusSections.timeRequired |
Duration
Si procede, utiliza el formato de duración 8601.
Por ejemplo, |
teaches |
Los resultados o conocimientos específicos que aprenderá el usuario al hacer el curso, si corresponde. "teaches": ["How to use visualization tools and graphs", "Why stats is important"] |
totalHistoricalEnrollment |
El número total de usuarios que se han inscrito a lo largo del curso, si corresponde. "totalHistoricalEnrollment": 80032 |
video |
Una vista previa o un tráiler del curso, si procede. Para obtener más información, sigue las directrices 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
Puedes consultar la definición completa de CourseInstance
en schema.org/CourseInstance.
Cada curso debe tener al menos un elemento CourseInstance
con las propiedades necesarias rellenadas.
Propiedades obligatorias | |
---|---|
courseMode |
El medio a través del cual se impartirá el curso. Se debe usar uno de los valores indicados a continuación:
Si la clase es "courseMode": "Online" |
courseSchedule |
Información sobre el tiempo que tarda el usuario medio en completar el curso, según el ritmo sugerido. Indica las fechas de inicio y finalización de los cursos que tengan una cronología fija. Aquí tienes un ejemplo de un curso con un ritmo establecido que se puede empezar en cualquier momento: // This course takes 6 weeks to complete. "courseSchedule": { "@type": "Schedule", "repeatCount": 6 "repeatFrequency": "Weekly", } Aquí tienes un ejemplo de un curso con un ritmo establecido 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
Valor numérico que indica la duración del curso, en unidades |
courseSchedule.repeatFrequency |
Text
Las propiedades
|
courseWorkload |
Text
Este campo representa el tiempo total que se tarda en ver todos los vídeos y completar todas las tareas y 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 en unidades de No especifiques la duración total del curso con esta propiedad. Usa la propiedad |
courseSchedule.endDate |
Date
La fecha de finalización del curso, en el formato de fecha 8601 (AAAA-MM-DD), si procede. |
courseSchedule.startDate |
Date
La fecha de inicio del curso, en el formato de fecha 8601 (AAAA-MM-DD), si procede. |
image |
URL
La URL que enlaza a una imagen del profesor, si procede. Directrices de imágenes 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 profesor del curso, si procede. "instructor": [{ "@type": "Person", "name": "Dana A.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] |
instructor.description |
Text
La descripción del profesor y sus credenciales, si procede. |
instructor.name |
Text
El nombre del profesor, si procede. |
location |
El nombre o la dirección (o ambos) de la ubicación física donde se impartirá el curso, si corresponde. "courseMode": "Blended", "location": "Example High School" |
Programa de cursos
Un programa de cursos es un conjunto de cursos secundarios. Los cursos secundarios deben ser cursos independientes con URLs 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 propiedades obligatorias que se indican en las secciones Course
y CourseInstance
).
Propiedades obligatorias | |
---|---|
hasPart |
Lista de los 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
La URL que enlaza con la página de destino del curso secundario. |
Propiedades recomendadas | |
---|---|
hasPart.description |
Text
Una breve descripción de los temas que se tratan en el curso secundario, si procede.
|
Monitorizar resultados enriquecidos con Search Console
Search Console es una herramienta que te ayuda a monitorizar el rendimiento de tus páginas en la Búsqueda de Google. No hace falta que te registres en Search Console para que tu sitio web aparezca en los resultados de la Búsqueda de Google, pero, si lo haces, sabrás cómo lo ve Google y qué puedes hacer para mejorarlo. Te recomendamos que consultes Search Console en los siguientes casos:
- Después de implementar datos estructurados por primera vez
- Después de publicar plantillas nuevas o modificar el código
- Al hacer el análisis periódico del tráfico
Después de implementar datos estructurados por primera vez
Una vez que Google haya indexado tus páginas, puedes comprobar si hay algún problema en el informe de estado de resultados enriquecidos correspondiente. Lo ideal es que haya un aumento en el número de elementos válidos y que no lo haya en el número de elementos no válidos. Si detectas problemas en tus datos estructurados, haz lo siguiente:
- Corrige los elementos no válidos.
- Inspecciona la URL en tiempo real para ver si el problema continúa.
- Solicita que se valide la corrección desde el informe de estado.
Después de publicar plantillas nuevas o modificar el código
Cuando hagas cambios significativos en tu sitio web, observa si se incrementa la cantidad de elementos no válidos de datos estructurados.- Si notas que hay más elementos no válidos, quizá sea porque has implementado una plantilla que no funciona, o puede que tu sitio esté interactuando con la plantilla que utilizas de un modo diferente que no es adecuado.
- Si notas que hay menos elementos válidos, pero no hay un incremento de elementos no válidos, es posible que hayas dejado de insertar datos estructurados en tus páginas. Para saber cuál es la causa del problema, utiliza la herramienta de inspección de URLs.
Al hacer el análisis periódico del tráfico
Consulta el informe de rendimiento para analizar el tráfico de tus páginas en la Búsqueda de Google. En él, verás con qué frecuencia aparece tu página como resultado enriquecido en la Búsqueda, cada cuánto hacen clic en ella los usuarios y cuál es la posición media que ocupa tu sitio web en los resultados de búsqueda. También puedes obtener automáticamente estos resultados con la API de Search Console.Solucionar problemas
Si tienes problemas para implementar o depurar datos estructurados, a continuación se incluyen algunos recursos que pueden serte útiles.
- Si usas un sistema de gestión de contenido (CMS) o alguien se encarga de gestionar tu sitio, pídele ayuda. No olvides reenviarle cualquier mensaje de Search Console que incluya información sobre el problema en cuestión.
- Google no garantiza que las funciones que utilizan datos estructurados aparezcan en los resultados de búsqueda. Para ver una lista con motivos habituales por los que Google no muestra tu contenido en resultados enriquecidos, consulta las directrices generales de datos estructurados.
- Es posible que haya un error en tus datos estructurados. Consulta la lista de errores de datos estructurados.
- Si se ha aplicado una acción manual de datos estructurados a tu página, se ignorarán sus datos estructurados, aunque la página puede seguir apareciendo en los resultados de la Búsqueda de Google. Para corregir problemas de datos estructurados, usa el informe "Acciones manuales".
- Revisa las directrices para comprobar si tu contenido no las cumple. El problema podría deberse a que la página incluye contenido engañoso o etiquetas con contenido fraudulento. No obstante, es posible que el problema no se deba a la sintaxis, por lo que la prueba de resultados enriquecidos no podrá ayudarte a identificarlo.
- Soluciona problemas si faltan resultados enriquecidos o si se ha reducido su número total.
- Dale tiempo a Google para que vuelva a rastrear e indexar tu página. Recuerda que Google puede tardar varios días en encontrar y rastrear una página después de publicarse. Consulta las preguntas frecuentes sobre el rastreo y la indexación de la Búsqueda de Google.
- Publica una pregunta en el foro del Centro de la Búsqueda de Google.