EducationalOccupationalProgram
EducationalOccupationalProgram is an Intangible for structured educational and vocational programmes: degree programmes, certificate programmes, apprenticeships, coding bootcamps, MOOC specialisations. It is the parent of WorkBasedProgram.
It adds 23 direct properties — one of the richest types in schema.org — covering:
- Application:
applicationStartDate,applicationDeadline,maximumEnrollment. - Structure:
dayOfWeek,timeOfDay,startDate,endDate,termDuration,termsPerYear,timeToComplete,numberOfCredits,typicalCreditsPerTerm. - Content:
hasCourse,programPrerequisites,programType,educationalProgramMode. - Credentials:
educationalCredentialAwarded,occupationalCredentialAwarded,occupationalCategory. - Financial / outcomes:
offers,financialAidEligible,salaryUponCompletion,trainingSalary,provider.
Full example of schema.org/EducationalOccupationalProgram json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "EducationalOccupationalProgram",
"@id": "https://rim.example/extension/structured-data-eng",
"name": "Structured Data Engineering Certificate",
"url": "https://rim.example/extension/structured-data-eng",
"description": "12-week part-time online certificate programme covering schema.org, JSON-LD, and typed SEO engineering. Capstone project required for certification.",
"programType": "Certificate",
"educationalProgramMode": "https://schema.org/OnlineEventAttendanceMode",
"timeToComplete": "P12W",
"termDuration": "P4W",
"termsPerYear": 3,
"numberOfCredits": { "@type": "QuantitativeValue", "value": 12, "unitText": "credit hours" },
"dayOfWeek": ["Tuesday", "Thursday"],
"timeOfDay": "Evening",
"applicationStartDate": "2026-05-01",
"applicationDeadline": "2026-06-15",
"startDate": "2026-07-06",
"endDate": "2026-09-25",
"maximumEnrollment": 40,
"programPrerequisites": "Working familiarity with HTML and one programming language (JavaScript, Python, or Ruby).",
"educationalCredentialAwarded": { "@type": "EducationalOccupationalCredential", "name": "Certificate in Structured Data Engineering", "credentialCategory": "Certificate" },
"occupationalCredentialAwarded": { "@type": "EducationalOccupationalCredential", "name": "Xoo Code Certified Schema Engineer" },
"occupationalCategory": "15-1257.00",
"hasCourse": [
{ "@type": "Course", "name": "Foundations: Schema.org and JSON-LD" },
{ "@type": "Course", "name": "Applied typed SEO" },
{ "@type": "Course", "name": "Validator design and capstone" }
],
"offers": { "@type": "Offer", "price": 2400.00, "priceCurrency": "USD" },
"financialAidEligible": "Scholarships available for enrolled students under the RIM Access fund",
"salaryUponCompletion": { "@type": "MonetaryAmountDistribution", "name": "Typical post-certificate salary (US)", "currency": "USD", "median": 110000 },
"provider": { "@type": "CollegeOrUniversity", "name": "Royal Institute of Medicine — Extension" }
}
</script>Why this matters for education sites
Google's Careers and Education surfaces, AI education advisors, and prospective-student tools all read EducationalOccupationalProgram. A well-populated entry puts your programme into structured comparisons against competitor programmes.
Minimal valid version
The smallest markup that still produces a valid EducationalOccupationalProgram 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.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "EducationalOccupationalProgram",
"name": "Structured Data Engineering Certificate",
"programType": "Certificate",
"timeToComplete": "P12W",
"provider": { "@type": "CollegeOrUniversity", "name": "Royal Institute of Medicine" }
}
</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.
- Google docsEducation / careers surfacesprimary
Common EducationalOccupationalProgram 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.
- 01
timeToComplete as plain number
Wrong"timeToComplete": 12Right"timeToComplete": "P12W" (ISO 8601 duration)Plain numbers are unitless; use ISO 8601 duration syntax.
- 02
Missing educationalCredentialAwarded
WrongProgramme with no credential referenceRightAlways populate educationalCredentialAwarded (and occupationalCredentialAwarded if applicable)The credential is what makes a programme comparable to others; without it, the programme is just a course list.
- 03
Courses inline with no Course typing
WronghasCourse as plain text namesRightTyped Course objects for each courseTyped courses link to their own rich-result surfaces and into the education graph.
Schema properties in this example
Also mentioned in 2 other examples
EducationalOccupationalProgram also appears in MonetaryAmountDistribution, and WorkBasedProgram. See the full EducationalOccupationalProgram schema page for every reference.
About the example data
The Xoo Code Structured Data Engineering certificate programme at the Royal Institute of Medicine's extension school.
Comments
Loading comments...