skolbot.AI Chatbot for Schools
ProductPricing
Free demo
Free demo
Isometric illustration of a US college program page with Schema.org JSON-LD structured data markup β€” AI visibility
  1. Home
  2. /Blog
  3. /AI visibility
  4. /Schema.org for Program Pages: The Markup That Gets Your Degrees Cited by AI
Back to blog
AI visibility18 min read

Schema.org for Program Pages: The Markup That Gets Your Degrees Cited by AI

Add Schema.org structured data to your program pages so ChatGPT, Perplexity and Gemini recommend your college or university. Technical guide with JSON-LD examples for US higher education.

S

Skolbot Team Β· June 30, 2026

Summarize this article with

ChatGPTChatGPTClaudeClaudePerplexityPerplexityGeminiGeminiGrokGrok

Table of contents

  1. 01Why Schema.org Markup Determines Whether AI Systems Recommend Your Programs
  2. 02EducationalOccupationalProgram vs Course: Which Type for US Higher Education?
  3. EducationalOccupationalProgram for Degree-Granting Programs
  4. Course for Individual Courses and Non-Degree Programs
  5. 03The 8 Schema.org Properties That Drive LLM Citations
  6. 04Marking Up US Accreditations: Regional vs. Programmatic
  7. 05Salary Data and Career Outcomes: The #1 LLM Query Trigger
  8. 06Testing and Validating Your Markup
  9. 07Common Mistakes US Institutions Make

Why Schema.org Markup Determines Whether AI Systems Recommend Your Programs

When a prospective student types "best computer science programs in the Midwest" into ChatGPT or Perplexity, neither system reads your website in real time. They synthesize previously indexed, structured, verifiable content β€” and the institutions that show up in the answer are the ones whose program pages gave AI engines something unambiguous to work with.

Schema.org markup is how you give AI engines that unambiguity. It is a vocabulary of structured properties, embedded in your HTML as JSON-LD, that tells a machine exactly what your page is about: this is a four-year degree, it leads to this credential, it costs this much per year, graduates earn a median salary of X, and the program carries ABET accreditation. Without that machine-readable layer, your program page is a block of prose that an LLM must parse, interpret, and sometimes misrepresent. With it, every key fact is a named property that AI engines can quote with confidence.

Institutions with complete Schema.org markup achieve an average of +12 percentage points in AI visibility compared to those without it (Source: Skolbot GEO Monitoring, 500 queries Γ— 6 countries Γ— 3 AI engines, Feb. 2026). On a program-level query volume of 10,000 monthly searches, that gap is the difference between roughly 1,400 and 2,600 AI-generated mentions β€” before a single dollar of paid media has been spent.

This guide is for marketing directors and web teams at US colleges and universities who already understand that generative engine optimization (GEO) is a distinct discipline from SEO, and who are ready to implement. For the strategic foundation, see our GEO guide for schools and AI visibility. For the content layer that complements markup, see our BOFU checklist for ChatGPT recommendations on program pages.


EducationalOccupationalProgram vs Course: Which Type for US Higher Education?

Schema.org offers two primary types for educational content. Choosing the wrong one is the single most common markup error among US institutions β€” and it costs you citation probability across every degree query.

EducationalOccupationalProgram for Degree-Granting Programs

EducationalOccupationalProgram is the correct Schema.org type for any program that awards a credential: a bachelor's degree, a master's degree, a doctoral degree, a professional degree (JD, MD, PharmD), an associate's degree, or a certificate that carries credit hours. It extends Intangible and is purpose-built for programs that link education to occupational outcomes.

Use EducationalOccupationalProgram when your page describes:

  • Any bachelor's, master's, doctoral, or professional degree program
  • A certificate or diploma program that awards academic credit
  • An associate's degree program at a community college or four-year institution

The key properties that distinguish this type β€” and that AI engines actively use when answering "what career can I get with a degree in X from Y" β€” are salaryUponCompletion, occupationalCategory, educationalCredentialAwarded, and programType. These have no equivalent in the Course type.

Course for Individual Courses and Non-Degree Programs

Course is the correct type for a single class, a non-credit workshop, a continuing education offering, or a MOOC. If your institution offers a "Digital Marketing Certificate" that consists of eight non-credit online modules with no transcript entry, that is a Course. If it awards six credit hours and appears on a transcript, it is better represented as EducationalOccupationalProgram.

The practical rule: if a prospective student asks "what degree will I earn?" and the answer is anything other than "no degree, just completion," use EducationalOccupationalProgram. For your institution-level markup, use CollegeOrUniversity (a subtype of EducationalOrganization) and link every program to it via the provider property.


The 8 Schema.org Properties That Drive LLM Citations

The following JSON-LD block represents the minimum viable EducationalOccupationalProgram for a US bachelor's degree program β€” one that AI engines can parse, quote, and cite in response to career and ROI queries. Below the block, each property is explained in terms of why it matters to LLMs specifically.

{
  "@context": "https://schema.org",
  "@type": "EducationalOccupationalProgram",
  "name": "Bachelor of Science in Computer Science",
  "description": "Four-year ABET-accredited BS in Computer Science covering algorithms, systems, AI/ML, and software engineering. 94% employment rate within 6 months of graduation (College Scorecard 2025).",
  "url": "https://www.university-example.edu/programs/bs-computer-science",
  "provider": {
    "@type": "CollegeOrUniversity",
    "name": "University Example",
    "sameAs": "https://www.university-example.edu"
  },
  "programType": "Bachelor",
  "educationalCredentialAwarded": "Bachelor of Science (BS) in Computer Science β€” ABET-accredited, regionally accredited by HLC",
  "numberOfCredits": "120",
  "creditUnit": "credit hours",
  "timeToComplete": "P4Y",
  "applicationDeadline": "2026-11-01",
  "offers": {
    "@type": "Offer",
    "price": "54000",
    "priceCurrency": "USD",
    "description": "Annual tuition β€” FAFSA-eligible, merit and need-based aid available. Net price average: $28,000/year."
  },
  "salaryUponCompletion": {
    "@type": "MonetaryAmountDistribution",
    "currency": "USD",
    "median": "88000",
    "percentile10": "62000",
    "percentile25": "74000",
    "percentile75": "110000"
  },
  "occupationalCategory": [
    "Software Developer",
    "Data Scientist",
    "Systems Analyst",
    "DevOps Engineer",
    "Machine Learning Engineer"
  ],
  "courseMode": "onsite",
  "inLanguage": "en-US",
  "programPrerequisites": {
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "High school diploma or GED β€” SAT/ACT optional, Common App eligible"
  }
}

Here is why each of the eight core properties matters to LLM citation behavior:

1. name β€” The degree name as it appears on the diploma and in the accreditor's directory. AI engines match this field against IPEDS CIP code descriptions and accreditation body listings. "Bachelor of Science in Computer Science" is matchable. "CS Degree" is not.

2. description β€” The property where you embed your highest-value citable claims: accreditation, employment rate, graduation cohort, and a specific data source. AI engines quote this field verbatim in answers to "tell me about the CS program at [institution]" queries. Every sentence here should be independently verifiable.

3. educationalCredentialAwarded β€” The credential plus its accreditation status in a single string. This is the field ChatGPT uses when answering "is [program] at [institution] accredited?" queries. Including both the regional accreditor (e.g., HLC) and the programmatic accreditor (e.g., ABET) in this string doubles the match surface for accreditation queries.

4. salaryUponCompletion β€” The #1 signal for ROI queries and the property most absent from US institutional markup. Using MonetaryAmountDistribution allows you to publish the full salary spread from College Scorecard data β€” median, 25th percentile, 75th percentile β€” rather than a single number. AI engines use the full distribution when answering "what salary range can I expect with a degree in X from Y." No UK or European Schema.org guide discusses this property in depth because the College Scorecard data infrastructure that powers it is uniquely American.

5. occupationalCategory β€” An array of job titles or O*NET occupation codes that graduates enter. This array is how AI engines match your program to career queries. "What schools have a good program if I want to become a machine learning engineer?" is answered partly by matching occupationalCategory values against the query's career term.

6. offers β€” The tuition with priceCurrency set to USD. Critically, include a human-readable description that states FAFSA eligibility and the average net price β€” not just the sticker price. AI engines answering "how much does [program] cost?" use the price field for the direct answer and the description for context about aid availability. Only 7% of US institutions include tuition in their structured data (Source: Skolbot technical audit, Jan. 2026). This property is one of the fastest citation wins available.

7. programPrerequisites β€” Admissions requirements including whether the program participates in Common App or Coalition App, and whether standardized testing is required, optional, or test-blind. AI engines use this field to filter program recommendations by prospect profile ("what schools have a good CS program that don't require the SAT?").

8. applicationDeadline β€” The primary application deadline in ISO 8601 format. AI engines answering "when is the application deadline for [program] at [institution]?" cite this field directly. Keep it updated; stale deadlines erode markup trust across your entire site.


Marking Up US Accreditations: Regional vs. Programmatic

The United States operates a two-tier accreditation system that has no direct equivalent in most other countries. AI engines have learned to treat both tiers as independent trust signals β€” and they check both when evaluating whether to cite a program. Marketing directors implementing Schema.org markup need to encode both tiers explicitly.

Regional accreditation is the institutional credential granted by one of the six regional bodies recognized by the US Department of Education. Your institution has exactly one regional accreditor based on geography:

  • SACSCOC β€” Southern Association of Colleges and Schools Commission on Colleges (AL, FL, GA, KY, LA, MS, NC, SC, TN, TX, VA)
  • HLC β€” Higher Learning Commission (AZ, AR, CO, IA, IL, IN, KS, MI, MN, MO, ND, NE, NM, OH, OK, SD, WI, WV, WY)
  • MSCHE β€” Middle States Commission on Higher Education (DC, DE, MD, NJ, NY, PA, PR, VI)
  • WASC / WSCUC β€” WASC Senior College and University Commission (CA, HI, Pacific)
  • NECHE / NEASC β€” New England Commission of Higher Education (CT, MA, ME, NH, RI, VT)
  • NWCCU β€” Northwest Commission on Colleges and Universities (AK, ID, MT, NV, OR, UT, WA)

Programmatic accreditation is credential-specific and granted by a disciplinary body. Common programmatic accreditors US institutions should encode:

  • AACSB β€” Business programs (Association to Advance Collegiate Schools of Business)
  • ABET β€” Engineering, computing, applied science, and engineering technology programs
  • ABA β€” Law programs (American Bar Association)
  • LCME / ACGME β€” Medical programs (Liaison Committee on Medical Education / Accreditation Council for Graduate Medical Education)
  • ACPE β€” Pharmacy programs (Accreditation Council for Pharmacy Education)
  • NAAB β€” Architecture programs (National Architectural Accrediting Board)
  • CAEP β€” Teacher education programs (Council for the Accreditation of Educator Preparation)
  • CCNE / ACEN β€” Nursing programs (Commission on Collegiate Nursing Education / Accreditation Commission for Education in Nursing)

In your JSON-LD, encode both tiers within educationalCredentialAwarded and add each accreditor as a named entity with a sameAs link to the accreditor's public directory page for your program. Here is the recommended pattern:

{
  "educationalCredentialAwarded": {
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "degree",
    "name": "Bachelor of Science in Mechanical Engineering",
    "recognizedBy": [
      {
        "@type": "Organization",
        "name": "Higher Learning Commission (HLC)",
        "url": "https://www.hlcommission.org/"
      },
      {
        "@type": "Organization",
        "name": "ABET β€” Engineering Accreditation Commission",
        "url": "https://www.abet.org"
      }
    ]
  }
}

AI engines cross-reference the url values in recognizedBy against live accreditor directories. A program that lists ABET accreditation in markup but does not appear in the ABET accredited program search generates a credibility conflict that can suppress citation across the entire domain. Only mark up accreditations that are currently active and publicly verifiable.

For a deeper look at how accreditation signals affect AI citation behavior across ChatGPT and Perplexity, see our article on school accreditation and AI citation.


Salary Data and Career Outcomes: The #1 LLM Query Trigger

No category of query drives more program-level AI citations than ROI and career outcome queries. "What salary can I expect with a computer science degree from [institution]?" "What jobs do nursing graduates from [institution] get?" "Is a business degree from [institution] worth the cost?" These are the queries that prospective students and their parents actually type β€” and they are also the queries that AI engines answer most readily when salaryUponCompletion and occupationalCategory are present in your markup.

The data source for these fields, for US institutions, is the College Scorecard maintained by the US Department of Education. College Scorecard publishes median earnings at six years after enrollment by field of study, institution, and credential level β€” sourced from federal tax records and federal student aid data. This is the most credible salary dataset available for US higher education, and it is the one AI engines treat with the highest confidence when cross-referencing your markup claims.

Implement salary data in your markup using the MonetaryAmountDistribution type within salaryUponCompletion:

{
  "salaryUponCompletion": {
    "@type": "MonetaryAmountDistribution",
    "currency": "USD",
    "median": "88000",
    "percentile10": "62000",
    "percentile25": "74000",
    "percentile75": "110000",
    "description": "Median earnings 6 years after enrollment β€” College Scorecard 2025 (US Department of Education, federal tax records)"
  }
}

A few implementation rules that protect your markup's credibility:

  • Cite College Scorecard explicitly in the description field β€” not a self-reported internal survey. AI engines weight government-sourced salary data more heavily than institutional claims.
  • Use the six-year earnings figure from College Scorecard, not "salary at graduation." Six-year earnings is what the dataset provides; publishing a different timeframe creates a factual inconsistency the AI can detect.
  • Keep the figures current. College Scorecard is updated annually. A markup citing 2022 salary data in 2026 carries a staleness penalty. Budget a markup refresh each fall alongside your annual IPEDS data submission.
  • Pair salaryUponCompletion with occupationalCategory β€” the two properties together answer the compound query "what jobs do graduates get and what do they earn?" which is the single highest-frequency ROI query pattern in US higher education search.

For international students and exchange program partners, note that US credit hours convert to approximately 2 ECTS credits each β€” so a 120 credit-hour bachelor's program is roughly equivalent to a 240 ECTS European bachelor's. You may include this equivalency in your description field to serve international prospect queries without creating a separate markup block.


Testing and Validating Your Markup

Markup that validates syntactically but contains factual inconsistencies with your page content can actively harm AI citation probability β€” it signals to AI engines that your structured data cannot be trusted. Use the following tools in sequence:

ToolURLWhat it checks
Schema Markup Validatorhttps://validator.schema.org/JSON-LD syntax, valid property names, type hierarchy compliance
Google Rich Results Testhttps://search.google.com/test/rich-resultsRich result eligibility, missing required properties, mobile rendering
Google Search Consolehttps://search.google.com/search-console/Index-level markup errors, coverage trends, enhancement reports
College Scorecard APIhttps://collegescorecard.ed.gov/data/Cross-reference: do your published salary figures match ED records?
Skolbot GEO Monitorhttps://app.skolbot.comLLM citation rate before and after markup deployment, per query cluster

Validation workflow for a new program page:

  1. Paste the JSON-LD into the Schema Markup Validator and resolve all errors (warnings are acceptable; errors are not).
  2. Run the Google Rich Results Test on the live URL β€” not the staging URL β€” to confirm the markup is served to Googlebot correctly.
  3. Cross-check every numerical claim in your markup (tuition, salary figures, credit hours, enrollment rates) against the corresponding visible page content. Structured data cloaking β€” different facts in markup vs. page copy β€” is a Google penalty trigger and an AI credibility killer.
  4. Submit the URL for indexing in Google Search Console after launch.
  5. Run a GEO visibility baseline query in Skolbot or equivalent tooling 48 hours before launch, then again at 30 and 90 days post-launch to measure citation rate change.

For a broader comparison of AI visibility audit tools available to US institutions, see our comparison guide for higher education AI visibility audit tools.


Common Mistakes US Institutions Make

Using Course instead of EducationalOccupationalProgram for degree programs. This is the most prevalent markup error in US higher education. The Course type lacks salaryUponCompletion, programType, and occupationalCategory β€” the three properties most strongly correlated with LLM citation on ROI queries. Institutions that implemented Course markup for degree programs before EducationalOccupationalProgram gained wider adoption should audit and migrate their program pages.

Publishing markup only on the program listing page, not individual program pages. A single JSON-LD block on /programs/ that describes all programs as a collection gives AI engines nothing to cite at the program level. Each degree program needs its own page with its own EducationalOccupationalProgram block. This is not optional for citation performance β€” LLMs answer program-specific queries by retrieving program-specific markup.

Omitting salaryUponCompletion because "we don't have that data." Every US institution that participates in Title IV federal financial aid has a College Scorecard profile. If College Scorecard does not have program-level earnings data for your specific CIP code due to small cohort size, use the institution-level median earnings figure from your Scorecard profile and note the scope in the description field. Publishing nothing is worse than publishing institution-level data with a clear provenance note.

Using image-only accreditation badges instead of named text entities. An AACSB logo image contributes zero markup signal. The full accreditor name spelled out β€” "Association to Advance Collegiate Schools of Business (AACSB)" β€” in a recognizedBy object with a URL to the accreditor's directory entry for your program is what AI engines read. Both elements must be present.

Setting applicationDeadline once and never updating it. A November 2024 deadline still in your markup in October 2026 tells AI engines your program page has not been maintained. Stale deadline data is one of the fastest ways to accumulate a staleness signal that suppresses citations across your entire domain's markup.

Failing to link program markup to institution markup via @id. Without an @id in your CollegeOrUniversity block and a matching provider reference in each EducationalOccupationalProgram block, AI engines cannot confidently attribute your programs to your institution. This breaks the entity graph that LLMs use to answer "what programs does [institution] offer?" queries. See our article on LLM signals for school recommendations for a full breakdown of entity graph construction for higher education.


FAQ

Does FERPA restrict what salary and outcome data we can publish in Schema.org markup?

No. FERPA protects individually identifiable student education records. Aggregate, de-identified outcome statistics β€” cohort median salaries, employment rates, NCLEX pass rates β€” do not constitute education records under FERPA as long as the cohort is large enough that individual students cannot be re-identified (typically five or more individuals). College Scorecard data is already aggregated and de-identified by the Department of Education before publication, so using it in your markup carries no FERPA risk. Consult your institution's FERPA compliance officer before publishing any data set with a cohort smaller than five students.

Should we implement EducationalOccupationalProgram markup for online programs differently than on-campus programs?

The schema type is the same. The key difference is in the courseMode property: use "online" for fully online programs, "onsite" for in-person, and "blended" for hybrid delivery. AI engines increasingly filter program recommendations by delivery format β€” "fully online MBA programs accredited by AACSB" is a distinct query from "MBA programs in Chicago" β€” so accurate courseMode values directly affect which queries your markup matches. Also add "courseSchedule" with "byDayOfWeek" data if your online program has synchronous session requirements; this matters to working adult students whose queries often include scheduling constraints.

How do we handle programs with multiple tuition rates β€” in-state vs. out-of-state for public universities?

Use an array of Offer objects within offers, each with a distinct description field identifying the rate category. Public universities should publish both in-state and out-of-state tuition, since AI engines answer cost queries from both resident and non-resident prospective students. In-state tuition for US public universities typically runs $10,000–$15,000 per year; out-of-state rates are generally comparable to private institution tuition ($30,000–$60,000 per year). Including both figures with a description note on residency requirements gives AI engines the data to answer "how much does [program] cost for out-of-state students?" directly.

How often should we update our Schema.org markup to maintain AI citation performance?

At minimum, once per academic year β€” aligned with your annual IPEDS submission cycle. Required updates each cycle: tuition and fees (in offers), application deadlines, College Scorecard salary figures (published annually by ED), and accreditation reaffirmation dates. In practice, a two-pass workflow reduces risk: a light update each January covering deadlines and tuition, and a deeper update each August before the fall enrollment cycle covering salary data, employment rates, and faculty credentials. Mark each update in lastReviewed using an ISO 8601 date so AI engines can confirm data freshness.

Does Schema.org markup help with Perplexity and Gemini as well as ChatGPT?

Yes, though the citation mechanisms differ slightly by system. Perplexity directly crawls live web pages and indexes structured data in near-real time; well-formed Schema.org markup on a freshly published program page can appear in Perplexity citations within days. ChatGPT's knowledge base is periodically updated rather than live-crawled, so markup on a new page may take weeks to influence ChatGPT responses. Gemini operates similarly to Perplexity for its web-grounded responses. All three systems treat EducationalOccupationalProgram markup as a high-confidence signal for program-level citation. For a full breakdown of monitoring your citation rate across all three engines, see our GEO monitoring guide for schools.


Schema.org EducationalOccupationalProgram markup is the single highest-leverage technical investment a US college marketing team can make for AI visibility in 2026. It requires one-time implementation per program page, minimal ongoing maintenance, and no paid media budget. The institutions that have done it occupy the AI citation positions that their competitors are still bidding for in Google Ads. The ones that have not done it are invisible to a generation of prospective students who reach for ChatGPT before they reach for a search engine.

Start with your three highest-enrollment programs. Get the markup validated, get the College Scorecard salary data in place, get both accreditation tiers named and linked. Then expand across your catalog. The compounding effect of entity-consistent, data-accurate, freshly maintained markup across an entire program portfolio is what moves an institution from occasional AI mentions to consistent AI recommendation.

Test your school's AI visibility for free Request a personalized demo

Related articles

Schema.org EducationalOrganization: The Technical Guide for Colleges
AI visibility

Schema.org EducationalOrganization: The Technical Guide for Colleges

15 LLM signals for university AI recommendation β€” isometric GEO diagram
AI visibility

15 Signals LLMs Evaluate to Recommend Your Institution

Optimising university content to be cited by ChatGPT and AI search engines
AI visibility

Content Cited by ChatGPT: How to Make Your University Unmissable

Back to blog

GDPR Β· EU AI Act Β· EU hosting

skolbot.

SolutionPricingBlogCase StudiesCompareAI CheckFAQTeamLegal noticePrivacy policy

Β© 2026 Skolbot