Données structurées des informations sur les cours (Course
et CourseInstance
)
![Illustration montrant comment les informations sur un cours peuvent s'afficher dans la recherche Google](https://developers.google.cn/static/search/docs/images/course-info-rich-result.png?authuser=5&hl=fr)
Vous pouvez aider les internautes à trouver le contenu de votre cours en le décrivant à Google à l'aide des données structurées des informations sur les cours. Lorsque vous fournissez des informations plus détaillées sur un cours, telles que les notes des participants, le prix et les détails du cours, Google peut mieux comprendre celui-ci et présenter une expérience riche aux utilisateurs grâce à un résultat enrichi présentant des informations sur le cours.
Deux fonctionnalités de résultats enrichis pour les cours utilisent le même type schema.org : Course
.
Si votre site fournit des informations sur des cours, il peut être rendu éligible aux deux fonctionnalités en suivant les deux guides d'implémentation :
- Liste des cours : résultat enrichi répertoriant les cours du même site Web.
- Informations sur le cours : carrousel affichant des informations détaillées sur un cours provenant de divers sites Web.
Disponibilité de cette fonctionnalité
Le résultat enrichi de type informations sur les cours est disponible en anglais dans toutes les régions où la recherche Google est disponible. Nous espérons pouvoir prendre en charge plus de cours dans d'autres langues à l'avenir.
Comment ajouter des données structurées
Ces données structurées représentent un format normalisé permettant de fournir des informations sur une page et de classer son contenu. En savoir plus sur le fonctionnement des données structurées
Voici, dans les grandes lignes, comment créer, tester et publier des données structurées. Pour consulter un guide détaillé sur l'ajout de données structurées à une page Web, accédez à cet atelier de programmation.
- Ajoutez les propriétés obligatoires. En fonction du format que vous utilisez, découvrez où insérer des données structurées sur la page.
- Suivez les consignes.
- Validez votre code à l'aide de l'outil de test des résultats enrichis et corrigez les erreurs critiques, le cas échéant. Envisagez également de résoudre les problèmes non critiques que l'outil a pu signaler, car cela peut contribuer à améliorer la qualité de vos données structurées. Toutefois, ce n'est pas nécessaire pour pouvoir bénéficier des résultats enrichis.
- Déployez quelques pages où figurent vos données structurées et utilisez l'outil d'inspection d'URL pour découvrir comment Google voit la page. Assurez-vous que Google peut accéder à votre page et qu'elle n'est pas bloquée par un fichier robots.txt, la balise
noindex
ni par des identifiants de connexion. Si tout semble être en ordre, vous pouvez demander à Google d'explorer de nouveau vos URL. - Pour informer Google des modifications futures de vos pages, nous vous recommandons de nous envoyer un sitemap. Vous pouvez automatiser cette opération à l'aide de l'API Sitemap de la Search Console.
Exemple
Voici un exemple de page d'informations sur un cours unique.
<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>
Consignes
Pour que votre cours puisse apparaître sous forme de résultat enrichi dans la recherche Google, suivez ces consignes.
- Consignes relatives au contenu
- Essentiels de la recherche
- Consignes générales pour les données structurées
Consignes relatives au contenu
Seuls les contenus éducatifs correspondant à la définition suivante d'un cours sont éligibles pour un résultat enrichi de type Course : série ou unité d'un programme comprenant des conférences, des leçons ou des modules sur une matière ou un sujet particulier.
Le balisage Course
doit figurer sur une page Web proposant un cours unique ou un programme de cours complets. Les exemples suivants ne sont pas éligibles pour les résultats enrichis de type Informations sur le cours :
- Une page de résumé d'un diplôme universitaire
- Page d'examen autonome
- Un événement grand public tel que la "Journée de l'astronomie"
- Une vidéo "Comment faire un sandwich" de 2 minutes
Définitions des types de données structurées
Vous devez inclure les propriétés obligatoires Course
et CourseInstance
pour que votre contenu puisse s'afficher sous forme de résultat enrichi dans la recherche Google. Vous pouvez également inclure les propriétés recommandées pour ajouter d'autres informations sur votre contenu et ainsi offrir une meilleure expérience utilisateur.
Course
Un cours est une unité individuelle du programme qui peut être suivie seule ou dans le cadre d'un programme.
La définition complète de l'élément Course
est disponible sur schema.org/Course.
Propriétés obligatoires | |
---|---|
name |
Titre complet du cours. "name": "Intro to Statistics" |
description |
Description du cours.
"description": "This course teaches the basics of statistical thinking." |
provider |
Informations sur l'organisation qui a créé le contenu du cours. "provider": { "@type": "Organization", "name": "Example University", "url": "www.exampleuniversity.com" } |
provider.name |
Text
Nom du fournisseur du cours. |
offers |
Informations sur le prix total pour terminer le cours, frais de service compris. N'indiquez pas un prix uniquement valable pour certains utilisateurs (par exemple, 20 % de remise pour les personne utilisant un service pour la première fois). N'incluez pas de frais de certificat supplémentaires dans ce champ. Si l'obtention d'un certificat entraîne des frais supplémentaires, ajoutez-les à la propriété "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }] |
offers.category |
Text
Catégorie de tarification du cours. Utilisez l'une des valeurs suivantes :
|
hasCourseInstance |
Chaque cours doit comporter au moins une instance de cours avec des informations détaillant l'offre. Consultez les propriétés obligatoires et recommandées dans la section "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" }] }] |
Propriétés recommandées | |
---|---|
about |
Décrit les compétences que l'utilisateur va acquérir en suivant le cours, le cas échéant. "about": ["Quantitative Analysis", "Critical Thinking"] |
aggregateRating |
Informations sur la note moyenne du cours basée sur les notes attribuées par les utilisateurs qui l'ont suivi, le cas échéant. Respectez les Consignes relatives aux extraits d'avis ainsi que la liste des propriétés "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "ratingCount": 255, "reviewCount": 189 } |
availableLanguage |
Les sous-titres ou les autres langues dans lesquels le cours est proposé, le cas échéant. Utilisez les codes à deux lettres de la liste ISO 639-1 alpha-2. "availableLanguage": ["fr", "es", "de"] |
coursePrerequisites |
Toute connaissance préalable nécessaire pour le cours, le cas échéant. Vous pouvez décrire les connaissances requises ou fournir un lien vers un autre cours (ou les deux). "coursePrerequisites": ["Understanding of Algebra concepts like variables and functions", "https://www.coursewebsite.abc/algebra"] |
datePublished |
Date à laquelle le cours a été publié pour la première fois, le cas échéant. Utilisez le format de date 8601 (AAAA-MM-JJ). "datePublished": "2019-03-21" |
educationalCredentialAwarded |
Informations sur le certificat que l'utilisateur peut décrocher en suivant le cours, le cas échéant. Si l'obtention de ce certificat est payante, indiquez le prix. "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.examplecertificate.com", "credentialCategory": "Certificate", "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "USD", "price": 5 }] }] |
educationalCredentialAwarded.credentialCategory |
Text
Type de certificat que l'utilisateur décrochera, le cas échéant. Utilisez l'une des valeurs suivantes :
|
educationalCredentialAwarded.name |
Text
Intitulé du certificat, le cas échéant. |
educationalCredentialAwarded.offers.category |
Text
Le type de tarification du certificat, le cas échéant Utilisez l'une des catégories suivantes :
|
educationalCredentialAwarded.offers.price |
Number
Prix numérique du certificat, le cas échéant. |
educationalCredentialAwarded.offers.priceCurrency |
Text
Devise du prix du certificat, au format ISO 4217 (code à trois lettres), le cas échéant. |
educationalCredentialAwarded.url |
URL
Lien vers la page du certificat, le cas échéant. |
educationalLevel |
Le niveau d'études requis par le cours, le cas échéant Sélectionnez l'une des valeurs suivantes :
"educationalLevel": "Beginner" |
financialAidEligible |
Les éventuelles bourses d'études, plans de paiement spéciaux ou autres aides financières dont peuvent bénéficier les utilisateurs qui souhaitent suivre le cours, le cas échéant. "financialAidEligible": "Scholarships available for eligible users." |
image |
URL d'une image représentative du cours, le cas échéant. Utilisez des images en rapport avec le cours plutôt que des logos ou des légendes. Consignes supplémentaires relatives aux images :
Exemple : "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
inLanguage |
La langue principale dans laquelle le cours est proposé, le cas échéant. Utilisez les codes à deux lettres de la liste ISO 639-1 alpha-2. "inLanguage": "en" |
offers.price |
Number
Le prix du cours au format numérique, le cas échéant. N'incluez pas d'autres informations dans ce champ, comme le symbole de devise. |
offers.priceCurrency |
Text
Devise du prix du cours, au format ISO 4217 (code à trois lettres), le cas échéant. |
provider.url |
URL
URL de la page d'accueil du fournisseur du cours, le cas échéant. |
publisher |
Informations sur l'organisation qui publie et affiche le cours, le cas échéant. "publisher": { "@type": "Organization", "name": "Course Website", "url": "www.example.com" } |
publisher.name |
Text
Le nom de l'éditeur du cours, le cas échéant. |
publisher.url |
URL
URL de la page d'accueil de l'éditeur du cours, le cas échéant. |
review |
Une liste des avis d'utilisateurs sur le cours, le cas échéant. Pour en savoir plus, suivez les consignes relatives aux extraits d'avis. "review": [{ "@type": "Review", "author": { "@type": "Person", "name": "Sasha J." }, "datePublished": "2021-09-22", "reviewRating": { "@type": "Rating", "ratingValue": 4 } }] |
syllabusSections |
Informations sur les différents modules du cours, le cas échéant. "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
Description du thème du module, le cas échéant. |
syllabusSections.name |
Text
Le nom du module du cours, le cas échéant. |
syllabusSections.timeRequired |
Duration
Utilisez le format de durée 8601, le cas échéant.
Par exemple, |
teaches |
Apprentissages ou connaissances spécifiques que l'utilisateur acquerra en suivant le cours, le cas échéant. "teaches": ["How to use visualization tools and graphs", "Why stats is important"] |
totalHistoricalEnrollment |
Nombre total d'utilisateurs inscrits depuis le lancement du cours, le cas échéant. "totalHistoricalEnrollment": 80032 |
video |
Aperçu vidéo ou bande-annonce du cours, le cas échéant. Pour en savoir plus, suivez les consignes "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 définition complète de l'élément CourseInstance
est disponible sur schema.org/CourseInstance.
Chaque cours doit comporter au moins un élément CourseInstance
avec les propriétés obligatoires renseignées.
Propriétés obligatoires | |
---|---|
courseMode |
Support via lequel le cours sera dispensé. Utilisez l'une des valeurs suivantes :
Si la classe est "courseMode": "Online" |
courseSchedule |
Informations sur la durée du cours pour un utilisateur moyen, en fonction du rythme suggéré. Indiquez les dates de début et de fin des cours dont le calendrier est fixe. Voici un exemple de rythme de cours que vous pouvez commencer à tout moment: // This course takes 6 weeks to complete. "courseSchedule": { "@type": "Schedule", "repeatCount": 6 "repeatFrequency": "Weekly", } Voici un exemple de rythme de cours sur une période fixe: // 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
Valeur numérique indiquant la durée du cours, en unités |
courseSchedule.repeatFrequency |
Text
Les propriétés
|
courseWorkload |
Text
Ce champ représente la durée totale pour regarder toutes les vidéos, et terminer tous les devoirs et examens du cours. Utilisez le format de durée 8601. "courseWorkload": "PT22H" |
Propriétés recommandées | |
---|---|
courseSchedule.duration |
Duration
Rythme suggéré pour la durée que l'utilisateur moyen peut s'attendre à passer en N'utilisez pas cette propriété pour spécifier la durée totale du cours. Utilisez plutôt la propriété |
courseSchedule.endDate |
Date
Date de fin du cours, au format de date 8601 (AAAA-MM-JJ), le cas échéant. |
courseSchedule.startDate |
Date
Date de début du cours, au format de date 8601 (AAAA-MM-JJ), le cas échéant. |
image |
URL
URL pointant vers une image du formateur, le cas échéant. Consignes supplémentaires relatives aux images :
Exemple : "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
instructor |
Informations sur le formateur du cours, le cas échéant. "instructor": [{ "@type": "Person", "name": "Dana A.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] |
instructor.description |
Text
La description du formateur et ses qualifications, le cas échéant. |
instructor.name |
Text
Nom du formateur, le cas échéant. |
location |
Le nom ou l'adresse (ou les deux) du lieu physique où le cours sera dispensé, le cas échéant. "courseMode": "Blended", "location": "Example High School" |
Programme du cours
Un programme de cours est un ensemble de cours enfants. Les cours pour enfants doivent être des cours indépendants avec des URL et des pages de destination distinctes.
Si votre page Web est un programme de cours, incluez les propriétés obligatoires suivantes (en plus des autres propriétés obligatoires listées dans les sections Course
et CourseInstance
).
Propriétés obligatoires | |
---|---|
hasPart |
Liste des cours enfants faisant partie de ce programme. "@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
Titre complet du cours pour enfant. |
hasPart.url |
URL
URL qui renvoie vers la page de destination du cours enfant. |
Propriétés recommandées | |
---|---|
hasPart.description |
Text
Brève description des thèmes abordés dans le cours enfant, le cas échéant
|
Suivre les résultats enrichis avec la Search Console
La Search Console est un outil qui vous permet de suivre les performances de vos pages dans la recherche Google. Il n'est pas nécessaire de vous inscrire à la Search Console pour figurer dans les résultats de recherche Google. Cependant, en vous inscrivant, vous comprendrez mieux la façon dont Google interprète votre site et serez plus à même de l'améliorer. Nous vous recommandons de consulter la Search Console dans les cas suivants :
- Après avoir déployé des données structurées pour la première fois
- Après avoir publié de nouveaux modèles ou après avoir mis à jour votre code
- Lors des analyses régulières du trafic
Après avoir déployé des données structurées pour la première fois
Une fois que Google a indexé vos pages, recherchez les problèmes à l'aide du rapport sur l'état des résultats enrichis. Idéalement, il y aura une augmentation du nombre d'articles valides et pas d'augmentation du nombre d'articles non valides. Si vous détectez des problèmes au niveau des données structurées :
- Corrigez les éléments non valides.
- Inspectez une URL active pour vérifier si le problème persiste.
- Demandez la validation à l'aide du rapport d'état.
Après avoir publié de nouveaux modèles ou après avoir mis à jour votre code
Lorsque vous apportez des modifications importantes à votre site Web, surveillez l'augmentation des éléments non valides dans les données structurées.- Si vous constatez une augmentation du nombre d'éléments non valides, vous avez peut-être déployé un nouveau modèle qui ne fonctionne pas, ou votre site interagit différemment et de façon incorrecte avec le modèle déjà disponible.
- Si vous constatez une diminution du nombre d'éléments valides (sans augmentation du nombre d'éléments non valides), vous n'intégrez peut-être plus de données structurées dans vos pages. Utilisez l'outil d'inspection d'URL pour identifier la cause du problème.
Lors des analyses régulières du trafic
Analysez votre trafic de recherche Google à l'aide du rapport sur les performances. Les données indiquent la fréquence à laquelle votre page s'affiche en tant que résultat enrichi dans la recherche Google, ainsi que la fréquence à laquelle les internautes cliquent dessus et la position moyenne à laquelle vous apparaissez dans les résultats de recherche. Vous pouvez également extraire automatiquement ces résultats avec l'API Search Console.Dépannage
Si vous ne parvenez pas à mettre en œuvre ou à déboguer des données structurées, voici quelques ressources susceptibles de vous aider.
- Si vous utilisez un système de gestion de contenu (CMS) ou si une autre personne s'occupe de votre site, demandez à la personne en charge de vous aider. Veillez à lui transmettre tous les messages de la Search Console qui détaillent le problème.
- Google ne garantit pas que les fonctionnalités basées sur les données structurées apparaîtront dans les résultats de recherche. Pour consulter la liste des raisons courantes pour lesquelles Google n'affiche pas toujours votre contenu dans un résultat enrichi, reportez-vous aux consignes générales relatives aux données structurées.
- Vos données structurées comportent peut-être une erreur. Consultez la liste des erreurs de données structurées.
- Si vous avez reçu une action manuelle de données structurées concernant votre page, ces données seront ignorées (mais la page concernée apparaîtra peut-être toujours dans les résultats de recherche Google). Pour résoudre les problèmes de données structurées, utilisez le rapport sur les actions manuelles.
- Consultez à nouveau les consignes pour déterminer si votre contenu est bien conforme. Le problème peut être dû à une page contenant du spam ou à l'utilisation de balises qui en contiennent. Toutefois, il est possible qu'il ne s'agisse pas d'un problème de syntaxe et que le test des résultats enrichis ne puisse pas identifier le problème.
- Découvrez comment résoudre les problèmes liés aux résultats enrichis manquants ou à une baisse du nombre total de résultats enrichis.
- Prévoyez un certain temps avant que la réexploration et la réindexation soient effectuées. Gardez à l'esprit qu'il faut souvent compter plusieurs jours après la publication d'une page pour que Google puisse la trouver et l'explorer. Pour toute question d'ordre général sur l'exploration et l'indexation, consultez les FAQ sur l'exploration et l'indexation dans la recherche Google.
- Posez une question sur le forum Google Search Central.