A free schema markup generator and JSON-LD builder for online, offline & hybrid courses - with provider, instructor, modules and pricing support.
Fill in your course name, provider, modules and (optionally) a specific batch or run - copy the generated JSON-LD and paste it into your page's <head>. Whether you're building a course schema generator for a single self-paced course or a live cohort with an instructor and fees, this tool builds clean, standards-compliant markup on the exact schema.org/Course spec, instantly, for free.
Based on schema.org/Course · Validated JSON-LD Output
PT10H = 10 hours, P4W = 4 weekshasPart (CreativeWork) to outline the course structure.
Course schema is JSON-LD structured data, based on the Course type on
schema.org/Course,
that describes an educational offering: its name, provider, level, credential, modules, and (optionally)
specific runs of that course with dates, mode, instructor and price. It's added to a page's
<head> as a <script type="application/ld+json"> block.
In short: a "course schema generator" is a tool that turns your course's details
(name, provider, modules, and an optional batch or run) into a ready-to-use JSON-LD block matching the
schema.org Course spec - including the nested CourseInstance object Google looks for when
a course has specific dates, a delivery mode, or a price. This page generates that code instantly,
for free, in your browser.
Course schema helps Google's Course rich results and AI-based answer engines such as AI Overviews understand who offers a course, what it teaches, how it's delivered, and what it costs - which matters for ed-tech platforms, training academies, coaching businesses, and any site that lists courses, cohorts, or workshops.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Mastering Local SEO for Restaurants",
"description": "A practical course on ranking restaurants locally.",
"provider": {
"@type": "Organization",
"name": "Search Savvy Academy",
"url": "https://example.com"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "online",
"startDate": "2026-09-20T09:00:00.000Z",
"endDate": "2026-10-25T09:00:00.000Z"
}
}One describes what you teach. The other describes a specific time you're teaching it.
The reusable description of the course itself on schema.org/Course: its name, provider, level, credential, and modules. It stays the same no matter how many times the course is run.
A nested object describing one specific run: its courseMode (online, onsite, or blended), start and end dates, location or virtual URL, instructor, and offer (price and availability). A course can have zero, one, or several instances.
Rule of thumb: if your course is self-paced with no fixed dates, a bare Course
object is often enough. If it runs in cohorts, batches, or live sessions - or has a mode and a price - add a
CourseInstance so Google and AI systems can surface the "when," "how," and "how much" alongside
the "what."
None of these are separate schema types on this page - they're nested objects inside your Course and CourseInstance. The provider (an Organization or EducationalOrganization) is required and identifies who runs the course. Inside a CourseInstance, the instructor is a nested Person, and offers is a nested Offer describing price, currency and availability.
This generator's location fields also handle online, offline, and hybrid delivery: fill
in a physical address for an in-person location, a virtual URL for an online one, or both for a hybrid
run - the tool nests them correctly as Place and VirtualLocation automatically.
{
"@type": "CourseInstance",
"courseMode": "hybrid",
"startDate": "2026-09-20T09:00:00.000Z",
"location": [
{ "@type": "Place", "name": "Search Savvy HQ, Mumbai" },
{ "@type": "VirtualLocation", "url": "https://zoom.us/j/example" }
],
"instructor": { "@type": "Person", "name": "Trainer Name" },
"offers": {
"@type": "Offer",
"price": "4999",
"priceCurrency": "INR",
"availability": "https://schema.org/InStock"
}
}This JSON-LD builder does the heavy lifting - here's the full technical SEO workflow, start to finish.
Fill in the required fields above: course name, course URL, and provider name.
Add educational level, credential awarded, and optionally break the syllabus into modules.
For cohorts or live sessions, add dates, mode, location or virtual URL, instructor and pricing.
Hit Copy (or Download), paste the script into your course page's <head>, then validate with Google's Rich Results Test.
Implementation note: place one <script type="application/ld+json"> block
per course page, inside <head> (or just before </body> if your CMS
doesn't expose the head). If you list several batches of the same course on one page, repeat the
hasCourseInstance property as an array rather than duplicating the whole Course object.
No sign-up, no watermark, no code editor required - just clean, valid Course JSON-LD you can trust.
Generate unlimited course schema - no account, no email, no usage cap.
Your JSON-LD updates as you type - no waiting, no separate "generate" step. A true instant schema and JSON-LD builder.
Output follows the schema.org Course spec exactly, so it passes Google's Rich Results Test and the Schema Markup Validator.
Break your syllabus into modules, added automatically as hasPart entries in the right order.
Add dates, mode, location, instructor and price for as many real-world runs as you need.
Everything runs client-side. Your course content is never uploaded or stored on a server.
Course schema tells search engines and AI systems the name, provider, level, credential, and structure of an educational offering - helping it qualify for Course-related rich results in Google Search and be understood accurately by AI Overviews and other answer engines.
Course describes the offering itself - name, provider, level, modules - and stays constant. CourseInstance is a nested object describing one specific run of that course, with its own dates, delivery mode, location, instructor, and price. A course can have zero, one, or several instances.
Yes. It's completely free to use, with no sign-up, no watermark, and no limit on how many course schemas you generate.
At minimum: a course name and a provider (organization) name. A course URL, description, and CourseInstance are strongly recommended and this generator will flag missing required fields before you copy or download.
No. A CourseInstance is optional and mainly useful when a course runs on specific dates, in a specific mode, or at a specific price. Fully self-paced, always-available courses can often use just the base Course object.
Set the courseMode field on the CourseInstance (online, offline, or hybrid), then fill in a physical address for an in-person location, a virtual URL for an online one, or both for a hybrid run. This generator nests them as Place and VirtualLocation automatically.
Pricing sits inside a CourseInstance's offers property as a nested Offer object with price, priceCurrency, and availability. It's optional, but including it can make free or paid enrollment status clearer to both search engines and AI systems.
Copy the generated code and paste it inside a single <script type="application/ld+json"> tag in your course page's <head>. If a page lists multiple batches of the same course, use an array of CourseInstance objects rather than duplicating the whole Course.
AI Overviews and similar AI-based answer engines rely on the same crawlable, structured signals as traditional search - including clearly marked-up course names, providers, modules, dates, and pricing. Valid Course schema makes those facts easier to extract accurately alongside clear on-page content, though it doesn't guarantee inclusion.
16 JSON-LD generators in one place - Organization, Article, Product, Review, Event, and more.
Headline, author, publisher & speakable markup for Article, BlogPosting & NewsArticle.
Price, provider & offer markup for Service, ProfessionalService & LocalBusiness.
Turn your Q&A content into valid FAQPage JSON-LD in seconds.
Generate schema.org/Person JSON-LD for instructor bios, team pages, and about pages.
Turn your breadcrumb trail into valid BreadcrumbList JSON-LD in seconds.