Course Schema — Course List Markup for Google
Course markup describes a course's name, description, and provider. Google's course list uses it, but only when at least three courses are marked up and listed with ItemList markup.
Generate Course JSON-LDWhy course markup doesn't produce a rich result
- Only one course is marked up. Google needs at least three.
- The course pages have Course markup, but no page lists them with ItemList markup.
- The description is long, but Google shows only 60 characters.
- The course name includes a price or a promotion, which Google lists as invalid.
How SwiftSchema helps
The generator below builds the Course for one detail page: name, description, provider, course code, credential, and scheduled sessions. It flags descriptions over 60 characters and a Person provider, since Google documents an Organization.
The second example on this page is the ItemList Google requires on the page that lists your courses. The ItemList generator can build that list.
What is Course schema?
Schema.org's Course describes a course of study. Google uses it for the course list rich result, which shows courses from one provider so prospective students can find them. Google says the course list is available in English in all regions where Google Search is available.
Google's definition of a course is narrow: "A series or unit of curriculum that contains lectures, lessons, or modules in a particular subject and/or topic." It must have an explicit educational outcome and be led by one or more instructors with a roster of students. Google's examples of things that aren't courses are a general public event such as "Astronomy Day" and a single two-minute how-to video.
What Google requires
Course
| Property | Required? | Notes |
|---|---|---|
name | Yes | The course title. |
description | Yes | A description of the course. Google's display limit is 60 characters. |
provider | Recommended | The Organization that publishes the course, such as a university. |
The three-course and ItemList rules
Google's technical guidelines say:
- Mark up at least three courses. They can be on separate detail pages or on one all-in-one page.
- Add carousel (ItemList) markup to either a summary page or an all-in-one page. On the list, each
ListItemneeds apositionand a URL; Google says every item must have a unique URL. On a summary page that's the detail page's URL. On an all-in-one page, Google's example puts theurlon the Course insideitem. Google's carousel rules add that summary-page URLs must point to different pages on the same domain, and all-in-one URLs must point to an anchor on the page that hosts the list, such as#data-101. - Each course needs a valid name and provider. Google's guidelines say each course must have them, although its property table lists provider as recommended. Include it.
There are two valid setups:
- Summary page plus detail pages. Each detail page has its own Course markup (the first example). The summary page has an ItemList whose items point to those URLs.
- All-in-one page. One page has an ItemList with every Course inside it (the second example).
Names Google rejects
Google lists these naming practices as invalid:
- Promotional phrases, such as "Best school in the world"
- Prices in course titles, such as "Learn ukulele - only $30!"
- Something other than a course as the title, such as "Make money fast with this class!"
- Discounts or purchase offers, such as "Leaders in their fields share their secrets — 25% off!"
Course info was retired
Google used to have a second feature, course info, with details such as price, schedule, and workload. In June 2025 Google announced it was phasing it out, and on September 9, 2025, it removed the documentation because course info was no longer shown in search results. If an older tutorial asks for offers, courseSchedule, or courseWorkload to get a rich result, that was for course info.
Those properties are still valid schema.org, so you can keep them to describe the course. They just don't produce a Google feature anymore.
Other useful properties
These are schema.org properties that describe a course well, even though Google's course list doesn't use them:
courseCode: the catalog code, such as "DATA101".hasCourseInstance: a scheduled run of the course, withcourseMode(such as "online"),startDate,endDate, andinstructor. The CourseInstance guide covers it.educationalCredentialAwarded: the certificate or credential earned.teaches,coursePrerequisites, andinLanguage: what the course teaches, what it requires, and its language.
Courses are also a supported item type for Google's review snippets, so an aggregateRating from your own students can be added. See the AggregateRating guide for the rules.
How to build one here
- 01
Enter the course name as your page shows it, without prices or promotions.
- 02
Write a description with the key point in the first 60 characters.
- 03
Choose Organization as the provider and enter its name and website.
- 04
Add the course URL, code, credential, and any scheduled sessions.
- 05
Copy the JSON-LD into the course page. Repeat for at least three courses.
- 06
Add an ItemList to the page that lists the courses, then test both in Google’s Rich Results Test.
Ready to build the markup?
Name, description, provider. Then list three or more.
Common mistakes
- One course only. Google needs at least three.
- No ItemList. Add it to the summary page or the all-in-one page.
- A long description. Google shows 60 characters.
- Promotional names. No prices, discounts, or slogans in the course name.
- Not a course. Webinars, one-off events, and short videos don't qualify.
- Expecting course info details. Prices, schedules, and workload no longer appear in Google Search.
Required properties
namedescription
Recommended properties
provider (Organization)provider.sameAsurlcourseCodehasCourseInstanceeducationalCredentialAwarded
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Introduction to Data Analysis with Python",
"description": "Clean, analyze, and chart data with pandas.",
"url": "https://www.example.edu/courses/data-analysis-python",
"courseCode": "DATA101",
"provider": {
"@type": "Organization",
"name": "Example Institute of Technology",
"sameAs": "https://www.example.edu"
}
}{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Course",
"url": "https://www.example.edu/courses#data-101",
"name": "Introduction to Data Analysis with Python",
"description": "Clean, analyze, and chart data with pandas.",
"provider": {
"@type": "Organization",
"name": "Example Institute of Technology",
"sameAs": "https://www.example.edu"
}
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Course",
"url": "https://www.example.edu/courses#data-201",
"name": "Statistics for Data Analysis",
"description": "Probability, sampling, and hypothesis tests.",
"provider": {
"@type": "Organization",
"name": "Example Institute of Technology",
"sameAs": "https://www.example.edu"
}
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Course",
"url": "https://www.example.edu/courses#data-301",
"name": "Machine Learning Foundations",
"description": "Regression, classification, and model testing.",
"provider": {
"@type": "Organization",
"name": "Example Institute of Technology",
"sameAs": "https://www.example.edu"
}
}
}
]
}{
"@context": "https://schema.org",
"@type": "Course",
"name": "Statistics for Data Analysis",
"description": "Probability, sampling, and hypothesis tests.",
"provider": {
"@type": "Organization",
"name": "Example Institute of Technology",
"sameAs": "https://www.example.edu"
},
"educationalCredentialAwarded": "Certificate of Completion",
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "online",
"startDate": "2027-01-11",
"endDate": "2027-03-19",
"instructor": {
"@type": "Person",
"name": "Dr. Priya Raman"
}
}
}FAQs
What does Google require for Course markup?ShowHide
Each Course needs a name and a description, and Google recommends a provider Organization. You must mark up at least three courses and add ItemList (carousel) markup to a summary page or an all-in-one page.
Why isn't my single course showing a rich result?ShowHide
Google's course list needs at least three marked-up courses and an ItemList on a page that lists them. One Course on its own isn't eligible.
How long should the description be?ShowHide
Google says the course description has a display limit of 60 characters, so put the most useful words first.
What counts as a course?ShowHide
Google defines a course as a series or unit of curriculum with lectures, lessons, or modules in a subject, with an explicit educational outcome, led by one or more instructors with a roster of students. A public event or a single short how-to video is not a course.
What happened to course info rich results?ShowHide
Google announced in June 2025 that it was phasing out course info, and removed its documentation on September 9, 2025, because it was no longer shown in search results. The course list feature is separate and still documented.
Can I put prices or promotions in the course name?ShowHide
No. Google lists promotional phrases, prices, discounts, and non-course titles such as 'Make money fast with this class!' as invalid course names.