Course schema markup: example, properties and WordPress setup
Course schema describes an educational course: its name, what it covers, who provides it, how it is delivered, and what it costs. The core properties are name, description and provider, with hasCourseInstance for delivery details like online or in person, schedule and instructor, and offers for price.
Set expectations first. In 2025 Google phased out the Course info rich result, one of several structured data features it dropped to simplify search results. That makes Course markup optional for Google today. It still gives any machine reading your page an exact description of the course, which is useful for a training company, school or creator whose pages AI assistants summarize.
JSON-LD example
Copy this into a <script type="application/ld+json"> tag and replace the values with your own.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Intro to Data Analysis with Python",
"description": "A six-week course covering pandas, data cleaning, charts and a final analysis project.",
"provider": {
"@type": "Organization",
"name": "Brightline Academy",
"sameAs": "https://example.com"
},
"educationalLevel": "Beginner",
"inLanguage": "en",
"educationalCredentialAwarded": "Certificate of completion",
"offers": {
"@type": "Offer",
"category": "Paid",
"price": 349,
"priceCurrency": "USD"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "Online",
"courseWorkload": "PT4H",
"instructor": {
"@type": "Person",
"name": "Dr. Samuel Osei"
},
"startDate": "2027-01-12",
"endDate": "2027-02-23"
}
}
Properties
| Property | Status | What it is |
|---|---|---|
name | Recommended | The course title, such as "Intro to Data Analysis with Python". |
description | Recommended | A short, factual summary of what the course covers. |
provider | Recommended | The Organization offering the course, with name and url or sameAs. |
offers | Recommended | An Offer with price, priceCurrency and category (such as Paid or Free). |
hasCourseInstance | Recommended | One or more CourseInstance items with courseMode (Online, Onsite, Blended), schedule or workload, instructor and location. |
educationalLevel | Recommended | Beginner, Intermediate or Advanced, or a level your field uses. |
inLanguage | Recommended | The language the course is taught in. |
educationalCredentialAwarded | Recommended | The certificate or credential earned, if any. |
aggregateRating | Recommended | Ratings from learners, shown on the page. |
When to use it
Use Course on a page describing one course: its landing page, syllabus page or enrollment page. It fits online courses, bootcamps, university modules and multi-session workshops.
Don't use it for:
- A single one-off class with a date. That is closer to an Event, which still has a Google feature.
- A blog post that teaches something. That is an Article.
- A catalog page of many courses. Mark up each course on its own page.
Google has also documented a course list carousel for summary pages that link to several course pages. Check Google's current documentation before building for it, since its structured data features have changed several times since 2023.
Add it in WordPress
By hand. Print the JSON-LD from wp_head on each course page, or generate it from your LMS plugin's course fields if it does not output markup already.
With Hydrogen SEO. Course is one of the documented schema types. Choose it in the course page's SEO Settings sheet and fill in the name, description and provider; smart tags (type @) can insert values such as the page title. If your LMS plugin already prints Course markup, check the page source and keep one block. With a free account, AI-assisted schema can draft the fields from a plain-language description of the course for you to review.
Common mistakes
- Expecting a rich result. Course info is gone; don't prioritize this over types that still earn features.
- Provider missing or vague. Name the organization that actually runs the course.
- Stale dates and prices. Update hasCourseInstance and offers when a new cohort opens.
- Marketing copy as description. Say what the course covers, not how life-changing it is.
- Durations as text. Use ISO 8601, such as
PT4Hfor a weekly workload.
More: invalid structured data.
Test it
Use the Schema Markup Validator (validator.schema.org) to confirm the Course, its provider, offers and course instances parse as expected. Google's Rich Results Test is still worth running on the same live URL to check any other markup on the page, such as breadcrumbs or ratings. Purge page caches before testing, and run a free SEO audit to find course pages with no structured data.
Common questions
Does Google still show course rich results?
Google phased out the Course info rich result in 2025. Course markup remains valid but no longer earns that feature.
Is Course schema still worth adding?
It is optional. If your site sells or runs courses, it gives machines a precise description of each one at low cost. If you are short on time, prioritize types with active Google features.
Should a live workshop use Course or Event?
A single dated session is best described as an Event. A multi-week program with a curriculum fits Course, with each run as a CourseInstance.
What does courseMode accept?
Common values are Online, Onsite and Blended, describing how that instance of the course is delivered.