Course Schema Markup for
Online Courses & LMS Sites
If you sell online courses (whether through LearnDash, LifterLMS, Tutor LMS, or a custom build), Course schema is how you make each course discoverable as a distinct offering. It tells Google what the course teaches, who provides it, what it costs, and how learners rate it, making your courses eligible for course-focused rich results and, increasingly, citations when someone asks an AI assistant to recommend a course on a topic.
Get Started FreeWhat is Course schema?
Course schema is structured data describing an educational course. The Course type carries the essentials: name, description, and a provider. It pairs with CourseInstance to describe how the course is delivered: online or in person, its workload, and when it runs. Pricing lives in an offers block, and learner ratings in aggregateRating.
This structure lets Google understand each course as a discrete product with a provider, a price, and a delivery mode: the foundation for course-related rich results and for being surfaced in learning-focused queries.
Why course creators need Course schema
Google supports enriched treatments for course content, listings that can surface the provider, delivery mode, and pricing. Course schema is the entry ticket.
provider and offers tell Google who's behind the course and what it costs, helping you appear for the right "learn X" and "course on X" queries.
"What's a good beginner course on Python" is exactly the kind of question people now ask AI assistants. Those recommendations are assembled from structured course data and provider signals. A course with clean Course markup and a clearly identified provider is easier for an answer engine to understand and name than a page describing the course only in prose.
A complete Course JSON-LD example
Here's correct markup for a paid online course:
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Complete Python for Beginners",
"description": "Learn Python from scratch with hands-on projects and quizzes.",
"provider": {
"@type": "Organization",
"name": "CodeCraft Academy",
"sameAs": "https://codecraft.example.com"
},
"offers": {
"@type": "Offer",
"price": "49.00",
"priceCurrency": "USD",
"category": "Paid"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "Online",
"courseWorkload": "PT10H"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"ratingCount": "352"
}
}provider is required: the organization or person offering the course, ideally with a sameAs link.
offers carries pricing; use "price": "0" with a Free category for free courses, or a real price for paid ones.
hasCourseInstance describes delivery: courseMode (Online, Onsite, Blended) and courseWorkload in ISO 8601 duration (PT10H = 10 hours).
aggregateRating for learner ratings, and it must reflect ratings actually shown on the page.
Provider identity and course instances
Two things separate courses that get surfaced from those that don't. First, a clearly defined provider: treat your academy or brand as an entity with a stable identity and sameAs links, so every course reinforces the same recognizable provider. Second, complete CourseInstance details: delivery mode and workload help Google (and learners) understand what they're signing up for, and they're increasingly part of how course content is evaluated for rich treatment. Accurate pricing in offers rounds it out. Together these turn a course page into a well-defined, comparable offering.
How to add Course schema in WordPress
LMS plugins manage enrollment and content, but they don't always output complete, valid Course schema, and hand-coding it per course doesn't scale as your catalog grows. Your options:
Impractical across a growing course library and easy to get hasCourseInstance wrong.
Course-specific fields are often limited.
Reads each course page and produces complete Course markup with provider, offers, and course-instance details.
Our AI Schema Gen vs Schema Pro comparison shows where coverage differs.
The flow:
- 1Install the plugin and connect your free account.
- 2AI Schema Gen reads your course pages, title, description, price, and provider.
- 3It generates valid Course markup with provider, offers, and hasCourseInstance.
- 4Auto-apply keeps the markup current as courses and pricing change.
- 5Validate before publishing.
Details in the documentation.
Common mistakes that break Course rich results
A required field; without it the markup won't qualify.
Google expects an offers block indicating whether the course is free or paid.
Leaving out delivery mode or workload.
On the page, a policy violation.
Duration format.
As a single Course instead of the individual course pages.
Course schema and AI search
Learning queries are a natural home for AI assistants: people ask for the best course to learn a skill, the right starting point, or a free option. The recommendations that come back are built from structured course data and provider signals. A catalog with clean Course markup, a clearly identified provider, and honest ratings is positioned to be surfaced and cited in those answers rather than passed over. It's the same entity-authority pattern that helps SaaS products and publishers get named, applied to education.
Frequently Asked Questions
Make every course a discoverable, citable offering
Free plan includes 30 AI generations per month. No credit card required.
Explore more use cases.