Staaarter

Course Schema Generator

Fill in a course's name, description, and provider, and this tool builds a complete Course JSON-LD object, with an optional nested CourseInstance (mode and dates), Offer (price), and AggregateRating, wrapped in a ready-to-paste <script type="application/ld+json"> tag for your course page. A free online tool from Staaarter, right in your browser.

Runs locallyUpdated 2026-08-04
By Staaarter Team
generatorjson-ldcourse

Overview

Introduction

Course rich results, the search listings that can show a provider, price, and schedule information for a class or training program, run on Course JSON-LD, and getting Google to actually show one depends on including at least one of two optional nested objects, hasCourseInstance or offers, alongside the required basics.

This generator builds all three commonly used pieces, provider, course instance, and offer, from plain form fields, so the nesting comes out correct without needing to reference the schema.org spec by hand.

What Is Course Schema Generator?

A form-driven generator for Course JSON-LD: name, description, and provider are always included; hasCourseInstance (mode plus start/end dates), offers (price and currency), and aggregateRating are all optional additions.

The output matches the shape Google's course structured data documentation describes as eligible for a course rich result in search.

How Course Schema Generator Works

Name, description, and provider name/URL map directly to their Course properties, with provider nested as an Organization object. Course mode and dates are combined into a nested CourseInstance object only when at least one of those three fields is filled in.

Price and currency build a nested Offer object only when a price is entered, and rating value/count build a nested AggregateRating object only when both are present, following the same pattern used elsewhere in this tool category to avoid emitting incomplete nested objects.

When To Use Course Schema Generator

Publishing a new online course or training program page and wanting it eligible for a course rich result.

Adding schedule and pricing structured data to an existing course catalog, one course template at a time.

Marking up a free course where only the CourseInstance (not an Offer) needs to be present.

Features

Advantages

  • Builds the nested CourseInstance, Offer, and AggregateRating objects automatically, only including each when its relevant fields are actually filled in.
  • Exposes courseMode as a constrained Online/Onsite/Blended choice instead of a free-text field prone to inconsistent capitalization across pages.
  • Produces valid minimal Course markup from just name, description, and provider, letting instance, pricing, and rating data be layered on incrementally.

Limitations

  • Supports a single CourseInstance per course; courses with multiple concurrent offerings (e.g. different cohorts or time slots) need an array of CourseInstance objects added manually after export.
  • Doesn't validate that startDate comes before endDate or that dates are in the future for an upcoming cohort.
  • AggregateRating is only as trustworthy as the review data behind it; this tool doesn't check that visible reviews actually exist on the page.

Examples

A paid, online course with a scheduled instance

Input

Name: Advanced TypeScript for React
Description: A deep dive into TypeScript patterns for large React codebases.
Provider: Acme Devtools Academy, https://example.com
Course mode: Online
Start date: 2026-09-01
End date: 2026-10-15
Price: 199, USD

Output

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Course",
  "name": "Advanced TypeScript for React",
  "description": "A deep dive into TypeScript patterns for large React codebases.",
  "provider": {
    "@type": "Organization",
    "name": "Acme Devtools Academy",
    "url": "https://example.com"
  },
  "hasCourseInstance": {
    "@type": "CourseInstance",
    "courseMode": "Online",
    "startDate": "2026-09-01",
    "endDate": "2026-10-15"
  },
  "offers": {
    "@type": "Offer",
    "price": "199",
    "priceCurrency": "USD"
  }
}
</script>

Both hasCourseInstance and offers are present, giving Google the fullest set of data for a course rich result.

Best Practices & Notes

Best Practices

  • Include at least one of hasCourseInstance or offers alongside the required fields; Google's own guidelines say markup without either won't be considered eligible for the course rich result.
  • Only add aggregateRating when real, visible reviews back it up on the page itself.
  • Keep startDate and endDate accurate and update them each time a course cohort is rescheduled, since stale dates on a rich result mislead prospective students.
  • Use the provider's actual organization name, matching what's shown elsewhere on the page, rather than a marketing-only brand name that differs from the legal or registered entity.

Developer Notes

hasCourseInstance is only emitted when courseMode, startDate, or endDate is filled in (rather than always including an empty CourseInstance object), because Google's course guidelines treat an incomplete CourseInstance as a validation warning rather than silently ignoring it.

Course Schema Generator Use Cases

  • Launching a new online course landing page with schedule and pricing markup
  • Retrofitting Course schema onto an existing training catalog
  • Adding a free CourseInstance-only listing for a course with no direct cost

Common Mistakes

  • Adding offers with a price but no priceCurrency, which is technically incomplete since price alone doesn't specify a currency.
  • Omitting both hasCourseInstance and offers, which produces technically valid but rich-result-ineligible Course markup.

Tips

  • Run the output through the Structured Data Validator tool in this category to confirm Google can parse both the CourseInstance and Offer objects.
  • If a course runs multiple times a year, generate one JSON-LD block per active cohort rather than trying to merge several instances into one CourseInstance object.

References

Frequently Asked Questions