Course Schema Generator

Generate a Course JSON-LD block that qualifies your online or in-person course for Google's course rich results — the carousel that surfaces course name, provider, and pricing directly in search. Fill in name, description, provider, optional pricing, and course instance details. The generator emits a ready-to-paste <script type="application/ld+json"> tag and omits any fields you leave blank.

Provider (required by Google)
Offers (optional)
Course instance (optional)

How to use the Course Schema Generator

Fill in the course name and description — these are required by Google. Under Provider, enter the organization that delivers the course (its name and website URL). Under Offers, add pricing details if the course costs money, or leave blank for a free course (you can still set Category to "Free"). The Course instance section lets you specify delivery mode (online, onsite, or blended) and start/end dates for a specific run of the course — useful for live cohorts. Click Generate. The output wraps the JSON in a <script type="application/ld+json"> tag. Paste it into the <head> of the course landing page. Verify the result at Google's Rich Results Test — Google specifically checks for name, description, and provider before showing the course carousel.

What Course structured data does

Course structured data (schema.org/Course) marks up a course landing page so Google can surface it in the course carousel — a rich-result block that appears above organic listings when users search for learning resources. The carousel shows course name, provider, and pricing, and can dramatically increase click-through from learners comparing options.

Google requires exactly three fields for eligibility: name, description, and provider (an Organization with a name). The offers property unlocks pricing display in the carousel. Adding a hasCourseInstance with startDate and endDate tells Google when a live cohort runs, which is especially valuable for bootcamps, workshops, and scheduled online classes — Google may surface these in "upcoming courses" features.

The courseMode field accepts online, onsite, or blended — exact strings that match Google's recognized values. Use online for self-paced or live-streamed courses, onsite for classroom-only, and blended for hybrid formats. One common mistake is placing the schema on a course catalog page rather than the individual course landing page — Google requires one schema block per course URL.

Common use cases

  • Online learning platforms — Add schema to each course landing page to qualify for the Google course carousel and increase discoverability for high-intent learners.
  • Corporate training providers — Mark up instructor-led cohorts with startDate and endDate so upcoming sessions appear in "courses near me" or "upcoming" filters.
  • University and MOOC programs — Use EducationalOrganization as the provider and include hasCourseInstance for semester-based schedules.
  • Subscription platforms — Set offers.category to "Subscription" and price to the monthly or annual rate to communicate pricing upfront in search results.
  • Free courses — Set category to "Free" and omit price to signal free access — learners searching for free training will see this in the carousel snippet.

Frequently asked questions

Does Course schema improve rankings?

Not directly — schema is not a ranking signal. But the course rich result carousel significantly increases visibility and click-through rate for course-related queries, which over time improves traffic signals.

Can I put Course schema on a category or catalog page?

No. Google requires Course schema on the individual course landing page. One schema block per course URL.

What if my course is free?

Include an Offer with price "0" and priceCurrency your currency, or set the category to "Free". Omitting the offers block entirely is also valid — Google won't show pricing, but the course can still appear in the carousel.

Is hasCourseInstance required?

No, it's optional. Use it when the course has a specific scheduled run (a cohort or live class). For evergreen self-paced courses, omit the instance and only fill name/description/provider.

How do I mark up multiple sessions of the same course?

Use an array for hasCourseInstance — one entry per run. Each entry can have its own courseMode, startDate, and endDate. The generator currently outputs a single instance; for multiple, copy the instance object and extend the array by hand.