SchemaValid
ENDE

Course Schema Generator

Create valid Course JSON-LD structured data for your online or in-person courses — with provider, schedule, location and price, ready for Google's course rich results. Instant, in your browser, free.

Try an example

Course info


Provider

Provider type

Delivery


Cost (optional)

Add a price to include an offer. Use 0 for a free course.

JSON-LD code

Fill in the required fields (name, description, provider) to generate the JSON-LD code.

Why Course schema matters for e-learning

Course structured data tells Google that a page describes an educational course and captures its key facts — the title, a description, who provides it, how it is delivered, when it runs and what it costs. Eligible courses can appear as course rich results and in Google's course list experience, shown with the provider name and other details directly in search. For online academies, universities, bootcamps and independent instructors, that visibility is valuable: learners comparing options are far more likely to click a result that already shows the provider and format. It works for free — there is no marketplace fee, just valid markup on an indexable course page.

Online vs. in-person courses

The courseMode property on the course instance signals how the course is delivered. Use Online for fully remote, self-paced or live-streamed courses; Offline for courses taught in person at a physical venue; and Blended for a mix of both. For in-person and blended courses you should also provide a location — a venue name and address — so learners and Google know where it takes place. This tool hides the address fields automatically when you pick Online, because an online course has no physical location. Adding start and end dates is recommended for scheduled cohorts, while evergreen self-paced courses can omit them.

How to add the schema to your site

Copy the generated code and paste it into a script tag of type application/ld+json in the head section of the page describing that course — one course per page. The name, description and price in the markup must match what visitors see. Once the page is indexed, Google can use it for course rich results. A minimal example looks like this:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Course",
  "name": "Introduction to Structured Data",
  "description": "A hands-on course on JSON-LD and schema.org.",
  "provider": {
    "@type": "Organization",
    "name": "SchemaValid Academy",
    "sameAs": "https://www.example.com"
  },
  "hasCourseInstance": {
    "@type": "CourseInstance",
    "courseMode": "Online"
  }
}
</script>

Frequently asked questions

Which fields are required for Course schema?
Google needs a course name, a description and a provider. This tool enforces exactly those three. Adding a course instance with a delivery mode, dates and a price makes the markup far more useful and eligible for richer results.
What is hasCourseInstance for?
hasCourseInstance describes a specific run of the course — how it is delivered (courseMode), when it starts and ends, and where it takes place. Google's course rich results increasingly rely on it, so this tool always includes a course instance with at least the delivery mode.
How do I mark up an online course?
Set the course mode to Online. The tool then hides the physical address fields, since an online course has no venue. The courseMode value Online tells Google the course is delivered remotely.
How do I show that a course is free?
Enter a price of 0 with your currency. The tool outputs an offer with a zero price, which is the correct way to indicate a free course. Leave the price blank if you do not want to publish pricing at all.
How do I validate the markup?
Paste your course page URL or the generated code into Google's Rich Results Test or the schema.org validator. They parse the JSON-LD and report whether the Course structure is valid and eligible for course rich results.
What is Course schema markup?
Course schema markup is a JSON-LD snippet based on the schema.org vocabulary that describes an educational course in a machine-readable way — its name, description, provider and how and when it is delivered. It doesn't change what a visitor sees on the page; it's an extra layer aimed at search engines and AI assistants trying to understand what you're offering.
Should every course have its own page?
Yes. Course rich results are tied to a single indexable page describing one course, so bundling several unrelated courses into one page and marking them all up as Course entities will confuse Google about which course the page is actually about. If you run multiple cohorts of the same course, use hasCourseInstance to list them rather than creating duplicate Course entities.
Can I add ratings or reviews to a course?
Yes — schema.org allows an aggregateRating on a Course, and Google can display it in course rich results if the ratings are genuine and collected the way its guidelines require (for example, gathered directly from verified learners, not self-selected or incentivized). This tool doesn't generate that field; you'd add it to the JSON-LD manually or with the dedicated Review Schema Generator.
Does Course schema affect my search ranking?
Not directly. Structured data doesn't change your ranking position by itself, but it can make your listing eligible for course rich results, which tend to earn a higher click-through rate simply by standing out and showing more information up front. The ranking itself still depends on the usual relevance and quality signals.
What's the difference between Course and EducationEvent?
Course describes an educational offering in general — something learners can enroll in, potentially with several scheduled runs over time. EducationEvent describes one specific, dated occurrence, like a single lecture or a one-off seminar. If your course repeats on a schedule, model it as a Course with one or more hasCourseInstance entries rather than a separate EducationEvent for every date.
Do I need to keep the markup updated as dates change?
Yes, especially the start and end dates and the price. Outdated markup that no longer matches what's shown on the page can lead Google to distrust the structured data on your site, so update the generated code whenever a course's schedule, format or pricing changes.
What are common mistakes when adding Course schema?
The most frequent ones are marking up multiple unrelated courses on a single page, listing a price that doesn't match what visitors actually see at checkout, and forgetting to update the schema when a course moves from in-person to online. Keeping the markup a faithful mirror of the visible page content is the safest rule to follow.

Related tools