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.

json
{
  "@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

PropertyStatusWhat it is
nameRecommendedThe course title, such as "Intro to Data Analysis with Python".
descriptionRecommendedA short, factual summary of what the course covers.
providerRecommendedThe Organization offering the course, with name and url or sameAs.
offersRecommendedAn Offer with price, priceCurrency and category (such as Paid or Free).
hasCourseInstanceRecommendedOne or more CourseInstance items with courseMode (Online, Onsite, Blended), schedule or workload, instructor and location.
educationalLevelRecommendedBeginner, Intermediate or Advanced, or a level your field uses.
inLanguageRecommendedThe language the course is taught in.
educationalCredentialAwardedRecommendedThe certificate or credential earned, if any.
aggregateRatingRecommendedRatings 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 PT4H for 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.