Structured Data Guide
Shopify Educational Course Schema: Course & LearningResource JSON-LD for AI Agents
Shopify is a popular platform for creators selling online courses, workshops, and masterclasses. But default Shopify JSON-LD outputs Product type — which tells AI agents your course is a physical good. The Course schema.org type lets AI agents read what you teach, who it's for, and how to access it.
@type: Course for online course products on Shopify. Required properties: name, description, provider. Recommended: teaches (skill list), educationalLevel (Beginner/Intermediate/Advanced), timeRequired (ISO 8601 duration), courseMode (ONLINE/ONSITE), hasCourseInstance (for scheduled cohorts). Add an offers block with price. Detect course products in Shopify Liquid by tag or product_type and output Course @type conditionally.
Course vs. LearningResource vs. Product: Which Type to Use
| Type | Use When | Key Differentiator |
|---|---|---|
Course |
Structured online course with defined curriculum and learning objectives | Qualifies for Google Course rich results; has CourseInstance for scheduling |
LearningResource |
Educational content that isn't a formal course: templates, checklists, ebooks, guides | Looser structure; supports learningResourceType and educationalLevel without CourseInstance |
Book |
Published ebooks or physical books sold via Shopify | Supports isbn, bookEdition, bookFormat (EBook/Paperback/Hardcover) |
Product |
Physical goods with inventory: textbooks, course workbooks, physical workshop kits | Correct type for tangible goods; do not use for purely digital/educational offerings |
Course Schema.org Properties Reference
| Property | Type | Description |
|---|---|---|
name |
Text | Full course title |
description |
Text | 200+ character description covering curriculum, audience, and outcomes |
provider |
Organization / Person | Who offers the course: business name and URL |
teaches |
DefinedTerm / Text | Array of skills, technologies, or topics the course covers |
educationalLevel |
Text / DefinedTerm | Beginner, Intermediate, Advanced, or a specific prerequisite description |
timeRequired |
Duration (ISO 8601) | Total course duration: PT8H (8 hours), P4W (4 weeks), PT2H30M (2.5 hours) |
numberOfCredits |
Number | Credits awarded on completion (for accredited courses) |
educationalCredentialAwarded |
Text / EducationalOccupationalCredential | Certificate, diploma, or credential name awarded on completion |
hasCourseInstance |
CourseInstance | Scheduled running of the course with specific dates and delivery mode |
courseMode |
Text (URL) | On CourseInstance: ONLINE, ONSITE, or BLENDED |
inLanguage |
Language / Text | Language of instruction: "en", "fr", "es" |
offers |
Offer | Pricing: price, priceCurrency, availability, url |
aggregateRating |
AggregateRating | Star rating and review count for the course |
image |
ImageObject / URL | Course thumbnail or promotional image |
Course JSON-LD Example: Self-Paced Online Course
This example is for a self-paced course with no fixed start date — students can begin anytime. Use courseMode: ONLINE directly on the Course, omitting hasCourseInstance:
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Shopify SEO Masterclass: AI Agent Optimization",
"description": "A comprehensive 8-hour self-paced course teaching Shopify merchants how to optimize their stores for AI shopping agents, including JSON-LD structured data, product feed setup, schema markup, and LLM-readability scoring. 24 video lessons, downloadable checklists, and a private community.",
"provider": {
"@type": "Organization",
"name": "DigitalCommerce Academy",
"url": "https://dc-academy.myshopify.com"
},
"teaches": [
"Shopify JSON-LD structured data",
"AI shopping agent optimization",
"Product schema markup",
"Schema.org Course type",
"Shopify product feed setup",
"ChatGPT Shopping integration"
],
"educationalLevel": "Intermediate",
"timeRequired": "PT8H",
"inLanguage": "en",
"courseMode": "ONLINE",
"educationalCredentialAwarded": "Certificate of Completion",
"image": "https://dc-academy.myshopify.com/cdn/shop/files/shopify-seo-masterclass-thumb.jpg",
"offers": {
"@type": "Offer",
"price": "197.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://dc-academy.myshopify.com/products/shopify-seo-masterclass"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "284",
"bestRating": "5"
}
}
Course JSON-LD Example: Live Cohort Bootcamp
For a live cohort course with a fixed schedule, use hasCourseInstance to expose dates, delivery mode, and location:
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Shopify Developer Bootcamp — 4-Week Intensive",
"description": "A 4-week live online bootcamp for developers building Shopify apps and themes. Covers Liquid, Shopify APIs, app development, and store optimization. 3 live sessions per week via Zoom. Limited to 20 students per cohort.",
"provider": {
"@type": "Organization",
"name": "ShopifyDev School",
"url": "https://shopifydev-school.com"
},
"teaches": [
"Shopify Liquid templating",
"Shopify Admin API",
"Shopify app development",
"Theme customization",
"Shopify Checkout extensibility"
],
"educationalLevel": "Beginner to Intermediate",
"timeRequired": "P4W",
"inLanguage": "en",
"hasCourseInstance": {
"@type": "CourseInstance",
"courseMode": "ONLINE",
"startDate": "2026-07-07",
"endDate": "2026-08-01",
"location": {
"@type": "VirtualLocation",
"url": "https://zoom.us/j/shopifydevschool"
},
"instructor": {
"@type": "Person",
"name": "Alex Rivera",
"url": "https://shopifydev-school.com/instructors/alex"
},
"maximumAttendeeCapacity": 20,
"offers": {
"@type": "Offer",
"price": "1497.00",
"priceCurrency": "USD",
"availability": "https://schema.org/LimitedAvailability",
"url": "https://shopifydev-school.com/products/bootcamp-july-2026"
}
}
}
Shopify Liquid Template: Course @type Implementation
{% comment %} product.liquid — Course schema for Shopify education products {% endcomment %}
{% assign is_course = false %}
{% if product.tags contains 'schema-course' or product.type == 'Online Course' %}
{% assign is_course = true %}
{% endif %}
{% if is_course %}
{% endif %}
Required course metafields
| Metafield | Type | Example value |
|---|---|---|
seo.course_teaches | JSON (list) | ["Shopify Liquid","JSON-LD","Product schema"] |
seo.educational_level | Single line text | "Beginner" / "Intermediate" / "Advanced" |
seo.time_required | Single line text (ISO 8601) | "PT8H" (8h) / "P4W" (4 weeks) / "PT90M" |
seo.course_mode | Single line text | "ONLINE" / "ONSITE" / "BLENDED" |
seo.credential_awarded | Single line text | "Certificate of Completion" |
LearningResource for Non-Course Educational Products
For educational products that aren't formal courses — ebooks, templates, guides, checklists, swipe files — use LearningResource instead of Course. LearningResource supports:
{
"@context": "https://schema.org",
"@type": "LearningResource",
"name": "Shopify SEO Checklist — 47-Point AI Readiness Audit",
"description": "A downloadable 47-point checklist covering all the schema markup, product feed, and structured data signals AI shopping agents check when evaluating Shopify stores.",
"learningResourceType": ["checklist", "template"],
"educationalLevel": "All levels",
"teaches": ["Shopify SEO", "Structured data", "AI agent optimization"],
"author": {
"@type": "Organization",
"name": "CatalogScan",
"url": "https://catalogscan.com"
},
"inLanguage": "en",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
Common Course Schema Mistakes on Shopify
| Mistake | Effect | Fix |
|---|---|---|
| Using Product @type for course listings | AI agents classify courses as physical goods; Google Course rich results not triggered | Detect course products by tag or type in Liquid; output @type: Course |
| Missing teaches property | AI agents can't match course to skill-based queries ("course on JSON-LD") | Store skill list in seo.course_teaches metafield as a JSON array |
| Missing courseMode on CourseInstance | Google validator warns; agents can't determine if course is online or in-person | Always include courseMode: ONLINE or ONSITE on CourseInstance |
| Incorrect timeRequired format | Duration not parsed; agents can't answer "course under 5 hours" queries | Use ISO 8601: PT8H (8 hours), P2D (2 days), P4W (4 weeks) |
| Missing offers block | AI agents can't filter courses by price | Add offers with price and priceCurrency; use price: 0 for free courses |
| Description too short (<200 chars) | Google Course rich results require 200+ char description | Expand description to cover curriculum, audience, and learning outcomes |
CatalogScan Course Schema Checks
CatalogScan's AI Readiness scan detects Shopify products that appear to be courses (by product_type, tags, or keywords like "course", "masterclass", "workshop", "bootcamp") and checks whether they use Course or Product @type. Course products outputting Product structured data receive a course-type mismatch flag. The scan also validates the presence of teaches, educationalLevel, timeRequired, and provider on Course blocks.
Related guides: Service product schema for Shopify · Digital product delivery schema · Shopify schema markup overview · AI readiness checklist
FAQ
Should Shopify course products use Course or Product schema.org type?
Use Course @type for online courses and educational programs. Product @type is for tangible goods. Course qualifies for Google Course rich results and lets AI agents read what the course teaches, its duration, level, and delivery mode — none of which are available in Product @type.
What are the required Course properties for Google rich results?
Google requires: name, description (200+ characters), and provider (Organization). Recommended: offers (pricing), hasCourseInstance with courseMode, teaches (skills list), educationalLevel, and timeRequired. Test with Google's Rich Results Test to verify your Course markup qualifies.
What is CourseInstance and when do I need it?
CourseInstance represents a scheduled cohort with specific start/end dates and a delivery mode. Use it for live cohort courses, bootcamps, and scheduled workshops. For self-paced on-demand courses (no fixed dates), set courseMode: ONLINE directly on the Course and omit hasCourseInstance.
How do I implement Course JSON-LD in Shopify Liquid?
Tag course products with 'schema-course' or set product.type to 'Online Course'. In product.liquid, detect this tag and output @type: Course instead of Product. Store course metadata in metafields (seo.course_teaches, seo.educational_level, seo.time_required, seo.course_mode) and map them into the Course JSON-LD block conditionally.
What's the difference between Course and LearningResource on schema.org?
Course is a subtype of LearningResource designed for structured educational programs with defined curricula, learning objectives, and completion credentials. LearningResource is broader — use it for ebooks, templates, guides, and checklists that are educational but not formal courses. Course @type enables Google Course rich results; LearningResource does not.