Course schema is structured data that tells Google and AI assistants that a page describes an educational course — its name, provider, description, and how it's delivered. If you sell or offer online courses, adding Course and CourseInstance markup is the single most reliable way to become the source an assistant names when someone asks "where can I learn X online?" Without it, your course is just prose that machines have to guess at; with it, the price, format, and provider are handed over as clean, labeled facts.
What Course schema actually describes
The schema.org Course type covers the course as a concept: its name, a plain-language description, the provider (an Organization), and increasingly required fields like hasCourseInstance. A CourseInstance describes a specific offering of that course — the courseMode (online, onsite, or blended), the courseWorkload (for example PT10H in ISO 8601 duration), and the schedule. Google's Course enrollment experiences now expect an offers block with price and currency, so an assistant can answer "how much does it cost?" without opening your page.
Keep the markup honest: the name in your JSON-LD must match the visible course title, and the price must match what a student actually pays. Mismatched or inflated data is the fastest way to get a course dropped from rich results and distrusted by AI systems that cross-check structured data against page content.
A minimal Course example that works
Put a JSON-LD block in the head or body of each course page. At minimum, declare the type, the course name and description, the provider with a URL, and one course instance:
- @type: "Course"
- name: the exact visible title, e.g. "Intro to Technical SEO"
- description: one clear sentence about what the learner gains
- provider: an Organization with a "name" and "url"
- hasCourseInstance: a CourseInstance with "courseMode": "online", "courseWorkload", and "offers" (price + priceCurrency)
For courses with multiple start dates or cohorts, add several CourseInstance entries rather than duplicating the whole Course. That structure mirrors how a real catalog works and gives assistants a clean list of "when can I take this?" options. If you run recurring cohorts, tie each instance to its own dates so an AI answer never quotes a session that already ended.
Why this matters more for AI than for blue links
Traditional course rich results have narrowed over the years, but AI answer engines are moving in the opposite direction — they actively assemble comparisons of "best courses for beginners" and want labeled facts to do it. Explicit price, mode, workload, and provider give an assistant everything it needs to include you confidently. Vague marketing copy ("learn at your own pace, transform your career") gives it nothing to cite. The same discipline that wins Product schema placements in AI shopping answers applies here: structured facts beat adjectives.
Course markup also feeds into your broader entity graph. When your provider Organization is consistently identified across pages and connected with a stable identifier, assistants recognize the brand behind the course. Reusing a single provider entity through the @id property keeps that identity stable instead of re-declaring a slightly different organization on every page.
Common mistakes that kill course visibility
The errors are predictable. Marking up a page that lists many courses as a single Course confuses parsers — use an ItemList of courses for catalog pages and full Course markup on each individual course page. Omitting offers on a paid course now blocks eligibility for enrollment experiences. Leaving out hasCourseInstance gives assistants no delivery details, so they skip you in favor of a competitor who specified "online, self-paced, €49." And forgetting to remove or update instances for expired cohorts leaves stale sessions in the index, which erodes trust exactly the way stale content hurts AI citations everywhere else.
Before you ship, validate the markup so you catch missing required fields and type errors before a crawler does. Run every course page through a structured data test and fix errors before warnings.
Want to see whether AI crawlers can actually read your course pages and parse your schema? Run the CheckMy.site scanner to check crawlability, structured data, and how your pages look to the assistants deciding which courses to recommend.