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.

TL;DR Use @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_teachesJSON (list)["Shopify Liquid","JSON-LD","Product schema"]
seo.educational_levelSingle line text"Beginner" / "Intermediate" / "Advanced"
seo.time_requiredSingle line text (ISO 8601)"PT8H" (8h) / "P4W" (4 weeks) / "PT90M"
seo.course_modeSingle line text"ONLINE" / "ONSITE" / "BLENDED"
seo.credential_awardedSingle 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.