XooCode(){

EducationEvent

EducationEvent is an Event subtype for workshops, training sessions, lectures, seminars, and any event where the primary purpose is learning. It has 3 properties of its own: teaches (what competencies the event covers), assesses (what the event evaluates), and educationalLevel (beginner, intermediate, advanced). These give search engines and course aggregators structured information about the educational content, not just the date and venue.

The type hierarchy is Thing → Event → EducationEvent. All Event properties apply. The properties most relevant for educational events are performer (used for the instructor, since EducationEvent has no dedicated instructor property), offers (registration/tickets), maximumAttendeeCapacity (class size), and inLanguage (teaching language).

Full example of schema.org/EducationEvent json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/EducationEvent
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://xoocode.com/workshops/schema-markup-2026-08#event",
  "@type": "EducationEvent",
  "name": "Hands-On Schema Markup Workshop",
  "url": "https://xoocode.com/workshops/schema-markup-2026-08",
  "description": "A full-day workshop on implementing JSON-LD structured data for Google rich results. Write markup for Product, Event, Article, and FAQ types. Bring a laptop.",
  "image": [
    "https://xoocode.com/workshops/schema-markup-2026-08/photo-1x1.jpg",
    "https://xoocode.com/workshops/schema-markup-2026-08/photo-4x3.jpg",
    "https://xoocode.com/workshops/schema-markup-2026-08/photo-16x9.jpg"
  ],
  "teaches": [
    "JSON-LD structured data syntax",
    "Schema.org vocabulary for common types",
    "Google rich result requirements and testing"
  ],
  "assesses": "Ability to write valid JSON-LD markup for Product, Event, Article, and FAQ schema types",
  "educationalLevel": "Beginner",
  "startDate": "2026-08-15T09:00:00-04:00",
  "endDate": "2026-08-15T17:00:00-04:00",
  "doorTime": "2026-08-15T08:30:00-04:00",
  "duration": "PT8H",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@id": "https://xoocode.com/shop/dunmore-1290",
    "@type": "LocalBusiness",
    "name": "Xoo Code Shop Dunmore",
    "url": "https://xoocode.com/shop/dunmore-1290",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "355 Eagle Butte Ave",
      "addressLocality": "Dunmore",
      "addressRegion": "AB",
      "postalCode": "T1B 0K2",
      "addressCountry": "CA"
    }
  },
  "performer": {
    "@type": "Person",
    "name": "Tomás Herrera",
    "url": "https://xoocode.com/team/tomas-herrera",
    "jobTitle": "Developer Advocate",
    "worksFor": {
      "@id": "https://xoocode.com#organization"
    }
  },
  "organizer": {
    "@id": "https://xoocode.com#organization",
    "@type": "Organization",
    "name": "Xoo Code Inc.",
    "url": "https://xoocode.com"
  },
  "offers": {
    "@type": "Offer",
    "name": "Workshop Registration",
    "price": "199.00",
    "priceCurrency": "CAD",
    "availability": "https://schema.org/InStock",
    "url": "https://xoocode.com/workshops/schema-markup-2026-08/register",
    "validFrom": "2026-06-01"
  },
  "maximumAttendeeCapacity": 20,
  "remainingAttendeeCapacity": 8,
  "isAccessibleForFree": false,
  "inLanguage": "en",
  "typicalAgeRange": "18-"
}
</script>

teaches

teaches describes the competencies or learning outcomes the event covers. It takes a DefinedTerm or plain text. You can pass a single string ("JSON-LD structured data") or an array for multi-topic workshops. Be specific about what attendees will learn, not vague ("web development"). Google and educational aggregators read this to match the event to skill-based searches.

assesses

assesses describes what competencies the event evaluates or tests. Not every educational event assesses anything. A lecture does not. A workshop with a hands-on exercise does. A certification exam definitely does. If your event has no evaluation component, leave this out. If it does, describe what is being tested, not how: "Ability to write valid JSON-LD" rather than "Multiple-choice quiz."

educationalLevel

educationalLevel indicates the target difficulty level. It takes a DefinedTerm, plain text, or URL. Common values are "Beginner", "Intermediate", "Advanced", or formal levels like "Undergraduate", "Graduate". Google reads this to filter educational content by level. Use language that matches how people search: "Beginner" is more searchable than "Introductory" or "Level 1."

EducationEvent vs Course

An EducationEvent is a single event with a date and location. A Course is a structured curriculum that may run across multiple sessions. A one-off workshop on Saturday is an EducationEvent. A 12-week evening class is a Course. If your workshop is a single session that repeats monthly with the same content, each occurrence is an EducationEvent. If it is a progressive series where session 3 builds on session 2, it is a Course with CourseInstances.

Instructor in performer

EducationEvent inherits from Event but does not inherit from CourseInstance, so it has no instructor property. The instructor goes in performer (the person performing/presenting at the event). This is not a workaround; schema.org defines performer as "a presenter, musician, or actor" at an event, which includes lecturers and workshop leaders. Use a Person object with name, url, and jobTitle.

Minimal valid version

The smallest markup that still produces a valid EducationEvent entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/EducationEvent (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "EducationEvent",
  "name": "Hands-On Schema Markup Workshop",
  "startDate": "2026-08-15T09:00:00-04:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Xoo Code Shop Dunmore",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "355 Eagle Butte Ave",
      "addressLocality": "Dunmore",
      "addressRegion": "AB",
      "addressCountry": "CA"
    }
  },
  "teaches": "JSON-LD structured data for Google rich results",
  "educationalLevel": "Beginner",
  "image": "https://xoocode.com/workshops/schema-markup-2026-08/photo-16x9.jpg",
  "description": "Full-day workshop on implementing JSON-LD structured data. Bring a laptop."
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common EducationEvent mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Using Event instead of EducationEvent for a workshop

    Wrong
    "@type": "Event" for a training workshop or seminar
    Right
    "@type": "EducationEvent"

    EducationEvent gives you teaches, assesses, and educationalLevel. Generic Event has none of these. Without the subtype, you cannot express what the workshop covers or who it is for. Educational aggregators filter on EducationEvent specifically.

  2. 02

    teaches as a vague paragraph

    Wrong
    "teaches": "This workshop will cover various aspects of web development and SEO best practices"
    Right
    "teaches": ["JSON-LD structured data syntax", "Schema.org vocabulary for common types", "Google rich result requirements"]

    teaches should list specific competencies or learning outcomes, not vague descriptions. An array of focused topics is more useful than a sentence. Google and course aggregators match these against skill-based search queries, so specificity matters.

  3. 03

    Confusing EducationEvent with Course

    Wrong
    "@type": "EducationEvent" for a 12-week evening class
    Right
    "@type": "Course" with CourseInstances for each session

    EducationEvent is a single event with a date. Course is a structured curriculum that may span multiple sessions. A one-off Saturday workshop is an EducationEvent. A progressive series where each session builds on the previous one is a Course. The distinction matters because Course supports hasCourseInstance, coursePrerequisites, and educational credential properties that EducationEvent does not.

  4. 04

    Looking for an instructor property on EducationEvent

    Wrong
    "instructor": { "@type": "Person", "name": "Tomás Herrera" }
    Right
    "performer": { "@type": "Person", "name": "Tomás Herrera", "jobTitle": "Developer Advocate" }

    EducationEvent inherits from Event, not CourseInstance. The instructor property belongs to CourseInstance. On EducationEvent, the instructor goes in performer, which schema.org defines as a presenter or performer at an event. This includes lecturers and workshop leaders. Using instructor on an EducationEvent is not technically wrong (schema.org is lenient), but performer is the canonical property.

About the example data

Tomás Herrera, Xoo Code Inc.'s developer advocate (from the TechArticle example), runs a hands-on schema markup workshop at the Xoo Code Shop Dunmore. Attendees learn to write JSON-LD for Google's rich results. The workshop is limited to 20 seats and includes a practical exercise that assesses attendees' ability to produce valid markup.

Comments

Loading comments...

Leave a comment