What the Course Schema Generator does
This tool builds Course structured data in JSON-LD, the markup that tells Google and other engines a page describes an educational course: a structured series of instruction toward learning a skill or subject, whether it is an online video bootcamp, a university class, a weekend workshop, or a multi-week cohort. You supply the course name, what it teaches, who provides it, and how it is delivered, and the generator returns a code block you paste into the page. With it in place, your course becomes eligible for Google's course rich results and the course list experience, where learners see the course title, the provider, and key details surfaced directly in search.
Course schema sits at the heart of one of Google's more developed rich- result programs because the education space is crowded and people compare options heavily before enrolling. Marking up a course well helps it appear in the dedicated course listing, distinguishes a genuine educational offering from a generic landing page, and increasingly feeds AI tools that recommend learning paths. For course providers, edtech platforms, and creators selling cohorts, it is one of the highest-leverage schema types available.
The required properties Course must have
At minimum, a Course needs a name, a description, and a provider. The name is the course title as a prospective learner would search for it, clear and specific rather than clever. The description explains what the course covers and what someone will be able to do after completing it, in at least a sentence or two of real substance that matches the page. provider is the organization or institution offering the course, given as an Organization object with a name and ideally a url and sameAs link, because Google wants to know who stands behind the education being marked up.
Google's guidance has evolved toward expecting more than these basics for full eligibility, particularly the addition of course instance details and offers. The provider especially deserves care: a well-known, clearly identified provider with a consistent presence across the web is a strong trust signal in a category where credibility is everything. A vague or missing provider weakens the markup and the offering's perceived legitimacy in equal measure.
Course instances, mode, and schedule
The property that has become central to modern Course markup is hasCourseInstance, which describes a concrete offering of the course: a specific run with a delivery mode, a schedule, and sometimes a location. Each CourseInstance carries a courseMode such as Online, Onsite, or Blended, which is critical because learners filter heavily on whether a course is remote or in person. For scheduled cohorts, the instance also carries start and end dates and a courseWorkload describing the expected time commitment, for example "PT4H per week".
Distinguishing the abstract Course from its concrete instances is the part people most often get wrong, yet it is exactly what lets a single course page represent both an evergreen self-paced version and a series of dated live cohorts. A self-paced online course is typically one instance with an online mode and a flexible schedule, while a course that runs in scheduled sessions should list each session as its own instance with real dates. Getting this structure right is what makes the markup accurately reflect how learners actually enroll.
Offers, pricing, and prerequisites
Google increasingly expects price information for course rich results, and the offers property supplies it: an Offer with price, priceCurrency, and a url to enroll. For free courses, set the price to 0 and still include the currency. Including honest pricing is what makes a course listing actionable and is now effectively part of the eligibility bar for the course experience. As always, the price in the markup must match the price a visitor sees, and invented or bait pricing is a policy violation.
Beyond pricing, properties like coursePrerequisites, educationalCredentialAwarded, and about let you describe what a learner needs going in, what credential or certificate they earn coming out, and the subject matter the course addresses. These are not all strictly required, but they meaningfully improve how clearly the course is classified and matched to learner intent. A course that awards a recognized credential, in particular, benefits from saying so explicitly, since that is a major decision factor for many learners.
A few more properties help learners self-select. teaches names the specific skills or outcomes the course delivers, which is more concrete than a general description and maps neatly to "learn to do X" searches. educationalLevel signals whether the course is beginner, intermediate, or advanced, sparing a beginner from clicking into a course that assumes prior expertise. inLanguage states the language of instruction, which matters for a global audience and for AI tools filtering by language. timeRequired or the instance-level courseWorkload sets the time commitment up front. None of these is mandatory, but each removes a reason a learner might bounce, and together they make the offering far easier for both search engines and AI recommenders to match to the right person.
How to read the generated output
The output is a single script block with type application/ld+json holding an object whose @context is schema.org and @type is Course. Inspect it and confirm three things: the provider is a proper Organization object with a name, at least one hasCourseInstance is present with a courseMode, and any offers include both a price and a currency. Dates inside course instances should be ISO 8601, and the courseWorkload, if present, uses the same PT duration format as other schema times. Empty fields should be omitted rather than left blank.
Sanity-check that the instance structure matches reality. If your course is purely self-paced, you should not have a string of dated cohort instances; if it runs in live sessions, those sessions should appear as distinct instances rather than being flattened into one. The single most common reason a course page fails to earn the rich result is that the markup lacks instance and offer detail Google now expects, so verify those sections are genuinely populated.
Common mistakes specific to Course schema
The most frequent Course-specific mistake is confusing the type entirely. Course is for actual structured education that teaches a skill or subject. A single how-to blog post should use HowTo or Article, a product training video might be better as VideoObject, and a page that merely sells access to a tool is not a course at all. Applying Course schema to non-course content, or to a thin page with no real curriculum, is a structured-data violation and increasingly a reason Google withholds the rich result.
The second big mistake is omitting hasCourseInstance and offers, then wondering why the course rich result never appears; modern eligibility leans on both. A third is mismatching courseMode with reality, labeling an in-person workshop as Online or vice versa, which confuses the filters learners rely on. A fourth is stale dates: live cohorts whose start dates are long past but still marked as upcoming. And as everywhere, fabricated ratings or prices that do not match the enrollment page put the markup and the whole site at risk.
Course schema in 2026 and AI learning recommendations
Education is one of the categories where AI assistants are most actively asked to recommend. People prompt these tools with "what's a good course to learn data analysis" or "find me a beginner Python class that's self-paced and under fifty dollars", and the systems answering depend on structured course data to respond with specifics. A course marked up with a clear provider, an explicit delivery mode, a real schedule, a credential, and an honest price gives an AI engine everything it needs to surface and compare the offering, which is far more than it can extract from a wall of sales copy.
As AI-driven learning recommendations grow, the providers whose courses are cleanly described in machine-readable form will have an edge in being recommended, just as they already have an edge in Google's course experience. Course schema is therefore not just about a current rich result; it is about being legible to the next generation of search and recommendation surfaces that learners are starting to trust for guidance.
What to do after you generate it
Paste the generated block into the head of the specific course page, then run it through Google's Rich Results Test, which has dedicated support for Course markup and will confirm whether the page is eligible for the course rich result. The test flags exactly which property is missing or malformed if eligibility fails, and in practice the failure is usually an absent course instance, a missing offer, or an incomplete provider.
Once it is live, watch the Course report in Search Console's Enhancements section to confirm Google has validated your courses and to catch errors across many course pages at once. Keep instance dates and pricing current as cohorts come and go, retire or update instances whose dates have passed, and make sure the markup always agrees with what a prospective learner sees on the page. A course offering changes over time more than most content, so the schema needs the same regular upkeep as the enrollment page itself.