Course schema generator
Mark up several courses from the same provider as an ItemList, the structure behind Google's course list results.
Required
8/8
Recommended
6/6
All Google-required properties present. That makes the page eligible, not guaranteed. Google's docs
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Course",
"url": "https://academy.example/sd-foundations",
"name": "Structured Data Foundations",
"description": "JSON-LD, schema.org types and Google's rules.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://academy.example"
}
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Course",
"url": "https://academy.example/product-markup",
"name": "Product Markup for Stores",
"description": "Offers, returns, shipping and variants.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://academy.example"
}
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Course",
"url": "https://academy.example/audit-at-scale",
"name": "Auditing Markup at Scale",
"description": "Crawl, extract and fix structured data.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://academy.example"
}
}
}
]
}
</script>When to use ItemList markup
- A catalogue page listing at least three courses from one provider.
- Each course should also have its own page with a matching URL.
- Not for single course pages alone; the list feature needs several.
Getting it right
- Each Course needs name and description (about 60 characters are shown); provider is recommended.
- Every ListItem needs a position and a unique course URL.
- Google retired the separate "Course info" rich result in 2025; Course list is still documented.
- Use absolute URLs that match each course's canonical URL.
Source: Google Search Central, Carousel / list structured data documentation, and schema.org/ItemList.
Google's property list
| Property | Google says |
|---|---|
itemListElement | required |
itemListElement.position | required |
Example output
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Course",
"url": "https://academy.example/sd-foundations",
"name": "Structured Data Foundations",
"description": "JSON-LD, schema.org types and Google's rules.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://academy.example"
}
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Course",
"url": "https://academy.example/product-markup",
"name": "Product Markup for Stores",
"description": "Offers, returns, shipping and variants.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://academy.example"
}
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Course",
"url": "https://academy.example/audit-at-scale",
"name": "Auditing Markup at Scale",
"description": "Crawl, extract and fix structured data.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://academy.example"
}
}
}
]
}Course schema questions
What happened to Course info markup?
Course info (detailed course pages with pricing and schedules) was retired in June 2025. Course list, an ItemList of courses, remains in Google's documentation.
How many courses do I need?
Google's carousel guidelines expect a list of several items from one site; three or more is the practical minimum.
Can I use it for a university programme?
Yes, if the page lists individual courses from the same provider with their own URLs.