A course page ranks well when it answers everything a learner needs to decide: what they will learn, who it suits, how long it takes, how it is taught, what it costs and who teaches it. Course structured data then describes those same facts in a form search engines can read. Content comes first; markup only describes what is already visible on the page.
What should a course page contain?
A strong course page has the full decision-making detail as visible HTML text, not hidden in a brochure PDF or a pop-up. Learners compare courses side by side, and the page that answers their questions first usually wins.
- A descriptive title and H1 with the course name, for example "Digital Marketing Course (Online, 4 Months)"
- A short summary of outcomes: the skills or credential the learner gets
- Who it is for, and prerequisites
- Syllabus by module, as text
- Duration, weekly hours and schedule
- Mode: online, classroom or blended, and the city for classroom batches
- Fee in ₹, instalments and what is included
- Instructor names and experience
- Upcoming batch dates
- Reviews from real learners and answers to common questions
One course should have one URL. Do not create separate indexable pages for each batch with near-identical text; list batches on the course page instead.
Does Google still show course rich results?
Partly. Google documents a course list rich result, a carousel of courses from one provider, in its course list documentation. In June 2025 Google announced it was phasing out several structured data features, including the separate Course info rich result, to simplify search results.
Rich result support changes over time, so check the Search Gallery before relying on any feature. Even where no rich result appears, accurate Course markup still helps search engines and other systems understand what you offer.
Which Course properties should you use?
For Google's course list, name and description are required for each Course, and provider is recommended. Google's documentation explains how to combine these with an ItemList on a summary page or an all-in-one page.
| Property | What it holds |
|---|---|
name | The course title as shown on the page |
description | A short, accurate description of the course |
provider | The organisation offering it, with name and sameAs |
offers | Price, currency and availability |
hasCourseInstance | One or more scheduled runs of the course |
inLanguage | Language of instruction, for example hi or en |
educationalCredentialAwarded | The certificate or qualification earned |
coursePrerequisites | What learners should know before starting |
What is CourseInstance and when should you use it?
CourseInstance describes a specific run or format of a course, such as the weekend online batch starting in January. Use it when one course has several batches, modes or instructors, and nest each one under hasCourseInstance.
Useful CourseInstance properties on schema.org include courseMode (for example online, onsite or blended), courseWorkload (an ISO 8601 duration such as PT6H), courseSchedule, instructor and location for classroom batches.
What does Course markup look like?
Here is an example for a single course page with one online instance and a fee in rupees.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Digital Marketing Course",
"description": "A four-month online course covering SEO, Google Ads, social media and analytics, with live projects.",
"provider": {
"@type": "Organization",
"name": "Example Academy",
"sameAs": "https://www.example.in/"
},
"inLanguage": "en",
"educationalCredentialAwarded": "Certificate in Digital Marketing",
"offers": {
"@type": "Offer",
"price": "35000",
"priceCurrency": "INR",
"availability": "https://schema.org/InStock"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "Online",
"courseWorkload": "PT6H",
"instructor": {
"@type": "Person",
"name": "Priya Sharma"
}
}
}
Every value in the markup must match what a visitor sees on the page. If the fee changes, update both. The structured data guide explains how to add JSON-LD to a page.
How do you test course markup?
Paste the URL into Google's Rich Results Test to see which features the page is eligible for, and into the Schema Markup Validator to check general schema.org syntax. After publishing, watch Search Console's enhancement reports for errors across all course pages. The structured data errors guide covers the common warnings.
Common mistakes
- Marking up a price, rating or instructor that is not visible on the page
Coursemarkup on category or blog pages that are not about one course- Old batch dates and fees left in the markup after the page text changes
- A
descriptionthat is just the course name repeated - Ratings marked up from reviews collected on other websites
Course page checklist
- Course name in the title tag, H1 and
nameproperty. - Full syllabus, duration, mode and fee visible as text.
- One URL per course, with batches listed on the page.
CourseJSON-LD withname,descriptionandprovider, plusoffersandhasCourseInstancewhere they apply.- Markup validated, and re-checked whenever fees or dates change.
Spider's page audit checks structured data, titles, headings and Core Web Vitals on each course page, and scheduled re-audits flag regressions after site updates.
Check this on your own site
Spider's free check tests this and about 100 other things on any page, and links each problem to a guide like this one.