Field Notes  /  Practical guide

JSON-LD for universities: a field guide.

The mechanical work that moves AI citation share more than anything else is schema. Here is a practical, opinionated guide to which schemas to ship, in what order, on a university website — with code you can paste in this week.

Apr 28, 2026 | 12 min read | By Ibex Insights engineering
JSON-LD Schema SEO GEO

JSON-LD is the single highest-leverage thing a higher-ed engineering team can ship for AI search.

It is also the most boring thing on the project list. Which is why most universities have a few Organization tags from 2019, nothing on individual program pages, and an unmaintained pile of BreadcrumbList artifacts a CMS plug-in dropped in once and never updated.

Here is an opinionated sprint plan. We've shipped this exact stack on six universities. The lift is measurable in citation audits within thirty days.

The schema priority order

Ship in this order:

  1. EducationalOrganization (sitewide root)
  2. Person (named faculty)
  3. EducationalOccupationalProgram (program landing pages)
  4. Course (individual courses)
  5. FAQPage (Q&A pages, FAQs, admissions help)
  6. Offer and MonetaryAmount (tuition and fees)
  7. Event (open houses, virtual sessions)
  8. Article and BlogPosting (news, this very page)

Most schools will get 80% of the lift from #1 through #3. Do those before anything else.

1. EducationalOrganization — the sitewide root

Ship once. Include on every page in the sitewide footer. This is the canonical identity card for your institution.

{
  "@context": "https://schema.org",
  "@type": "EducationalOrganization",
  "@id": "https://example.edu/#organization",
  "name": "Example University",
  "url": "https://example.edu",
  "logo": "https://example.edu/static/logo.png",
  "sameAs": [
    "https://en.wikipedia.org/wiki/Example_University",
    "https://www.wikidata.org/wiki/Q12345",
    "https://www.linkedin.com/school/example-university/",
    "https://x.com/exampleuniv",
    "https://www.facebook.com/exampleuniv",
    "https://www.youtube.com/@exampleuniv"
  ],
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1 University Drive",
    "addressLocality": "Anytown",
    "addressRegion": "ON",
    "postalCode": "A1A 1A1",
    "addressCountry": "CA"
  },
  "telephone": "+1-555-555-1212",
  "email": "info@example.edu",
  "foundingDate": "1968",
  "numberOfStudents": 18500,
  "accreditedBy": [
    {"@type": "EducationalOrganization", "name": "Universities Canada"}
  ]
}

2. Person — named faculty

A Person block per named faculty page. The single most under-used field here is sameAs pointing to ORCID and Google Scholar.

{
  "@context": "https://schema.org",
  "@type": "Person",
  "name": "Dr. Jane Researcher",
  "givenName": "Jane",
  "familyName": "Researcher",
  "jobTitle": "Associate Professor of Computer Science",
  "image": "https://example.edu/faculty/researcher.jpg",
  "url": "https://example.edu/faculty/jane-researcher",
  "affiliation": {"@type": "EducationalOrganization", "@id": "https://example.edu/#organization"},
  "alumniOf": [
    {"@type": "EducationalOrganization", "name": "University of Waterloo"}
  ],
  "sameAs": [
    "https://orcid.org/0000-0002-1825-0097",
    "https://scholar.google.com/citations?user=ABCdef12345",
    "https://www.linkedin.com/in/jane-researcher/"
  ],
  "knowsAbout": ["Machine Learning", "Natural Language Processing", "Education Technology"]
}

The sameAs links to ORCID and Google Scholar move citation share more than any other single field for a Person. When an AI engine assembles an answer about "top researchers in X at school Y," the Person whose name is verifiable via ORCID gets cited.

3. EducationalOccupationalProgram — the workhorse

This is the schema that goes on every program landing page. It is the schema that tells the engine this is a degree, here is the credential, here is the duration.

{
  "@context": "https://schema.org",
  "@type": "EducationalOccupationalProgram",
  "name": "Bachelor of Management",
  "description": "A four-year undergraduate program preparing students for careers in management, finance, marketing, and entrepreneurship.",
  "programType": "UndergraduateProgram",
  "educationalCredentialAwarded": {
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "Bachelor's Degree"
  },
  "occupationalCategory": "11-1021.00",
  "timeToComplete": "P4Y",
  "applicationDeadline": "2026-01-15",
  "startDate": "2026-09-04",
  "provider": {"@type": "EducationalOrganization", "@id": "https://example.edu/#organization"},
  "offers": [{
    "@type": "Offer",
    "category": "Tuition (Domestic, per year)",
    "priceCurrency": "CAD",
    "price": 7250,
    "url": "https://example.edu/tuition"
  }, {
    "@type": "Offer",
    "category": "Tuition (International, per year)",
    "priceCurrency": "CAD",
    "price": 22500,
    "url": "https://example.edu/tuition"
  }],
  "numberOfCredits": 120
}

A few notes on this one

  • occupationalCategory should be an ONET-SOC code where the program maps to a recognized occupation. The engines use this to answer "what jobs does this degree prepare me for?"*
  • The offers array is the single most-skipped block. Ship it. The engines need a structured price to surface your program in cost-comparison answers.
  • timeToComplete is ISO 8601 duration. P4Y means four years. P18M means eighteen months. P2Y6M means two-and-a-half years.

4. Course — for individual course pages

If you publish a per-course catalog (most US institutions do; most Canadian do not), tag each course as a Course node and link it from the parent EducationalOccupationalProgram via hasCourse.

5. FAQPage — the easiest lift

FAQPage is the easiest lift on this list and one of the most impactful for AI citations. Every admissions FAQ, every financial-aid FAQ, every program-specific FAQ should be marked up.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "What is the application deadline for the Bachelor of Management?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "The deadline for September entry is January 15. Applications opened on October 1 of the previous year."
    }
  }, {
    "@type": "Question",
    "name": "Is the Bachelor of Management AACSB-accredited?",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Yes. The Faculty of Management has held AACSB accreditation since 2014, most recently renewed in 2024."
    }
  }]
}

6. Offer + MonetaryAmount — tuition transparency

This is the field that decides whether your school or Yocket is the canonical source for your own tuition number.

We routinely see schools publishing tuition in a JavaScript-rendered table the AI crawlers don't see. Switch to server-rendered HTML, mark up with MonetaryAmount, and you reclaim the price citation in roughly four to eight weeks.

Validation and testing

Three tools we use every single time:

  1. Google's Rich Results Test — tests that your markup is valid and which rich features it qualifies for.
  2. Schema.org's Schema Markup Validator — the most pedantic validator. Use this to catch typos and deprecated properties.
  3. Live citation audit — the actual proof. We track citation share before and after schema deployments. The lift typically shows up in 21–45 days.

A two-sprint plan you can hand to engineering

Sprint 1 (2 weeks)

  • Ship EducationalOrganization sitewide.
  • Ship Person on the top 30 faculty pages.
  • Ship FAQPage on the four highest-traffic FAQ pages (admissions, financial aid, application help, deferral policy).

Sprint 2 (2 weeks)

  • Template EducationalOccupationalProgram across every program landing page.
  • Add Offer to the tuition page and link it from each program.
  • Validate, ship, and start a 30-day citation audit cycle.

Total: four weeks. We've done this on six campuses. The work is mostly mechanical.

If you want, paste your top program page into our live audit tool — it will tell you which of these schemas you're already shipping and which ones you're missing.