Why AI Search Engines Struggle to Recognise Training Content
AI search engines like ChatGPT, Perplexity, and Gemini are increasingly being used to answer questions such as "what's the best course to learn Python?" or "which certifications are worth doing for project management?" These are high-intent queries where your training business could and should be appearing. But for most course providers, AI completely ignores them.
The reason is almost always structural. AI models learn from the web, but they prioritise content they can parse reliably. If your course page is just a wall of marketing copy with no machine-readable signals, an AI has no confident basis to cite you. It does not know whether you are offering a live workshop, a self-paced video course, a university module, or a PDF download. It cannot extract the duration, the instructor, the price, or the learning outcomes. So it skips you entirely and recommends whoever has made their data legible.
Course schema, implemented correctly via JSON-LD, is the fix. It gives AI crawlers the structured signals they need to understand, trust, and cite your training content.
What Course Schema Actually Tells AI Crawlers
Course schema is a vocabulary from Schema.org that lets you formally describe an educational offering. It sits within the broader LearningResource type and can be nested with CourseInstance to describe specific runs or schedules.
At its core, a Course schema block communicates:
- The course name and a clear description
- The provider, which anchors the course to your brand as an entity
- Prerequisites, so AI can match your course to the right audience
- Learning outcomes via
teachesoreducationalLevel - Duration and delivery format (online, in-person, blended)
- Pricing and availability via
Offer - Instructor details, including credentials
Each of these fields is a data point an AI model can index and use. When Perplexity is answering "what's a good beginner copywriting course in the UK?", it is pulling from pages where this information is structured and credible, not just written in prose that needs interpretation.
A Practical JSON-LD Template for Course Schema
Here is a working JSON-LD block you can adapt for your own course pages. Drop it inside a <script type="application/ld+json"> tag in your page's <head> or immediately before </body>.
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Advanced Google Ads for E-commerce",
"description": "A six-week online course teaching e-commerce owners how to build, optimise, and scale profitable Google Ads campaigns without an agency.",
"provider": {
"@type": "Organization",
"name": "Your Training Company",
"sameAs": "https://yourwebsite.com"
},
"instructor": {
"@type": "Person",
"name": "Sarah Flinn",
"jobTitle": "Paid Search Specialist",
"url": "https://yourwebsite.com/team/sarah-flinn"
},
"teaches": "Google Ads campaign strategy, audience targeting, Shopping campaigns, Performance Max",
"educationalLevel": "Intermediate",
"coursePrerequisites": "Basic familiarity with Google Ads interface",
"timeRequired": "PT6W",
"availableLanguage": "en-GB",
"inLanguage": "en-GB",
"courseMode": "online",
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "online",
"startDate": "2025-09-01",
"endDate": "2025-10-13",
"price": "497",
"priceCurrency": "GBP",
"offers": {
"@type": "Offer",
"price": "497",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock",
"url": "https://yourwebsite.com/courses/advanced-google-ads"
}
}
}
A few things worth noting here. The timeRequired field uses ISO 8601 duration format, so "PT6W" means six weeks. If your course is 10 hours of video content, you would use "PT10H". Get this right, because AI models use duration to match searchers who specify "short course" or "multi-week programme" in their queries.
The teaches field is particularly powerful for AI visibility. Think of it as a keyword-rich but honest summary of exactly what skills and topics the course covers. AI engines use this to match your course against specific skill-based queries.
Using CourseInstance to Describe Multiple Runs
Many training providers run the same course multiple times per year, or offer it in both live cohort and self-paced formats. CourseInstance handles this cleanly without you needing a separate schema block per page.
You can include an array of CourseInstance objects within a single Course schema block. Each instance can have its own start date, end date, delivery mode, and price. This is especially useful for:
- Live cohort courses with quarterly intakes
- Courses offered at different price points (early bird vs standard)
- In-person and online versions of the same programme
- Courses delivered in multiple languages
When an AI is asked "are there any project management courses starting in October?", having accurate startDate values in your CourseInstance data makes you a viable answer. Without it, you are invisible to that query, regardless of how good your course actually is.
The Provider Field and Entity Disambiguation
One of the most overlooked aspects of Course schema is using the provider field to establish your brand as a recognised entity. This matters enormously for AI visibility.
AI models build knowledge graphs of entities: organisations, people, products, places. When your schema says "provider": { "@type": "Organization", "name": "Your Training Company", "sameAs": "https://yourwebsite.com" }, you are telling every crawler that these courses belong to a specific, named entity.
You can strengthen this further by adding sameAs references to your LinkedIn company page, your Crunchbase profile, or any other authoritative directory listing. The more consistently your brand name appears across the web with the same identifiers, the more confidently an AI model can attribute your courses to you when generating an answer.
This is closely related to how WebSite schema helps AI identify your brand, a concept worth applying alongside your Course schema for maximum impact.
Writing Course Descriptions That AI Actually Uses
Schema alone is not sufficient. The description field in your Course schema should be written with AI citation in mind, not just for human readers clicking a Google result.
Here is what works well in practice:
- Be specific about outcomes. "You will be able to build and launch a Google Shopping campaign from scratch" is far more citable than "gain a thorough understanding of digital advertising."
- State the audience clearly. "Designed for e-commerce store owners with no prior paid advertising experience" helps AI match your course to the right query intent.
- Include the format and commitment. "Six weekly live sessions, each 90 minutes, with recorded replays available" is exactly the kind of detail AI pulls into answers.
- Keep it under 500 characters for the schema field, then expand in your visible page copy. Schema descriptions are not meta descriptions; they can be longer, but bloated text gets truncated anyway.
Think about what a helpful friend would say if asked to recommend your course to someone. That kind of precise, honest, human summary is exactly what AI search engines are trying to reconstruct, and your schema description can give it to them directly.
Common Course Schema Mistakes to Avoid
If you have already added Course schema and are not seeing any improvement in AI citations, one of the following is likely the cause.
Missing or vague teaches field
Leaving out teaches entirely is the single most common mistake. This field is what allows AI to match your course against skill-specific queries. "Learn marketing" is too vague. "Facebook Ads, Instagram Ads, campaign budgeting, A/B testing creative" is specific enough to be useful.
No instructor data
AI models factor in the credibility of who is delivering training. An instructor with a named profile, a job title, and ideally a link to a bio page or LinkedIn profile signals authority. Anonymous courses feel less trustworthy to both humans and AI.
Outdated CourseInstance dates
If your schema still lists a course instance from January 2024 with no upcoming dates, an AI looking for available courses will skip you. Keep your instance dates current. If you run on-demand courses, set courseMode to "self-paced" and omit fixed dates rather than leaving stale ones in place.
Schema not matching page content
Your schema and your visible page copy must tell the same story. If your schema says the course costs £497 but the page says £550, that inconsistency will confuse crawlers and potentially trigger a manual review penalty from Google. Always keep both in sync.
For a broader look at how these kinds of errors affect your AI visibility, this breakdown of common schema markup mistakes is worth reading before you publish anything.
Testing and Validating Your Course Schema
Once you have added your schema, validate it before assuming it is working. Three tools are worth using:
- Google Rich Results Test (search.google.com/test/rich-results): checks whether your Course schema is eligible for rich results in Google Search. Courses are a supported rich result type, so errors here will tell you exactly what is broken.
- Schema.org Validator (validator.schema.org): checks your JSON-LD against the official schema vocabulary. Useful for catching type mismatches and missing required fields.
- Perplexity and ChatGPT manual checks: once your schema is live and your page has been crawled, run queries like "best [topic] courses in [location]" and see whether you appear. This is not instant, crawl cycles take time, but it is the real-world test that matters most.
If you want a structured view of how your entire site is performing for AI visibility, including whether your schema is being read correctly, a free AI visibility audit from FlinnSchema will surface the specific gaps on your course pages.
Going Further: Aggregating Reviews Into Your Course Schema
One addition that meaningfully increases the likelihood of AI citation is embedding AggregateRating within your Course schema. AI search engines, particularly Perplexity and Gemini, frequently include ratings in their answers to course recommendation queries.
Add a block like this inside your Course schema object:
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "134",
"bestRating": "5"
}
Only use real, verifiable ratings here. If you collect reviews on Trustpilot, Coursecheck, or Google, mirror the aggregate data into your schema and keep it updated. Inflated or invented ratings are detectable inconsistencies that will undermine your credibility.
Reviews also feed directly into how AI models assess whether to recommend a business. The relationship between review signals and AI recommendations is explored in depth in this post on how customer reviews influence AI recommendations.
Frequently Asked Questions
Does Course schema work for self-paced online courses, not just live cohorts?
Yes. Set courseMode to "self-paced" within your CourseInstance and omit the startDate and endDate fields. You can still include duration via timeRequired, pricing via Offer, and all the other fields that make your course citable. Self-paced courses are actually easier to keep current because you do not need to update dates each term.
How long does it take for AI search engines to start citing my course after I add schema?
It depends on how frequently your pages are crawled. For a site with decent authority and regular updates, new schema can be picked up within a few days to a couple of weeks. For newer or less-crawled sites, it may take longer. Running a manual crawl request through Google Search Console will speed up the Google side of things, but AI-specific crawlers like GPTBot and ClaudeBot operate on their own schedules.
Can I use Course schema on a Shopify or WordPress site?
Absolutely. On Shopify, you can add JSON-LD blocks directly to your theme's product.liquid or a custom page template using a <script type="application/ld+json"> tag. On WordPress, plugins like Yoast SEO Premium or Rank Math support Course schema, though manual JSON-LD often gives you more control over the exact fields. Either platform supports the full range of Course schema properties.
Is Course schema the same as using EducationalOccupationalCredential schema?
They are different but complementary. Course describes the learning experience itself. EducationalOccupationalCredential describes the certificate, qualification, or credential a learner earns upon completion. If your courses lead to a formal qualification, using both in tandem gives AI a much richer picture of what you offer and increases the chance of appearing in queries specifically about certifications or qualifications.

