AEO Saigon
How-to

Course Schema for Education: Courses Featured in AI and Google Rich Results

Table of contents

When users ask AI 'good digital marketing course in Hanoi' or 'where to learn Python from beginner to advanced', AI prioritizes citing pages with clear Course schema. Without schema — AI guesses from the page content. With complete Course schema — AI knows the exact course name, duration, tuition, and next intake.

Comparing Course and EducationalOccupationalProgram

CriteriaCourseEducationalOccupationalProgram
DurationUsually under 6 months1 year or more
PurposeSpecific skill acquisitionDegree or vocational certificate
Vietnam examplesCanva course, SEO course, Shopee Sales courseTOEIC system, Vocational college, MBA
Google CoursesFully supportedLimited support (being expanded)
Suitable forEdTech, training centers, B2B trainingUniversities, colleges, vocational institutes

Complete JSON-LD Course

{
  "@context": "https://schema.org",
  "@type": "Course",
  "@id": "https://example-edu.vn/vi/khoa-hoc/digital-marketing",
  "name": "Khoá Học Digital Marketing Toàn Diện",
  "description": "Khoá học Digital Marketing 12 tuần dành cho marketing executive, business owner và sinh viên muốn làm chủ chiến lược marketing số. Học viên thực hành với Google Ads, Meta Ads, SEO kỹ thuật, Content Marketing và Email Automation thông qua 8 case study từ doanh nghiệp Việt Nam. Hoàn thành khoá học, học viên có thể xây dựng và quản lý ngân sách quảng cáo 50-200 triệu/tháng độc lập.",
  "image": "https://example-edu.vn/images/digital-marketing-course.jpg",
  "url": "https://example-edu.vn/vi/khoa-hoc/digital-marketing",
  "inLanguage": "vi",
  "educationalLevel": "Beginner to Intermediate",
  "coursePrerequisites": "Biết sử dụng máy tính cơ bản, có tài khoản Google. Không cần kinh nghiệm marketing.",
  "teaches": [
    "Google Ads Search và Display",
    "Meta Ads (Facebook và Instagram)",
    "SEO on-page và off-page",
    "Content Marketing và Copywriting",
    "Email Marketing Automation",
    "Google Analytics 4 và Data Studio"
  ],
  "timeRequired": "PT84H",
  "numberOfCredits": 12,
  "provider": {
    "@type": "Organization",
    "@id": "https://example-edu.vn",
    "name": "AcademyVN",
    "url": "https://example-edu.vn",
    "logo": "https://example-edu.vn/images/logo.png",
    "sameAs": [
      "https://www.facebook.com/academyvn",
      "https://www.linkedin.com/company/academyvn"
    ]
  },
  "hasCourseInstance": [
    {
      "@type": "CourseInstance",
      "@id": "https://example-edu.vn/vi/khoa-hoc/digital-marketing/batch-t9-2026",
      "name": "Batch tháng 9/2026 — Online Live",
      "courseMode": "Synchronous",
      "startDate": "2026-09-08",
      "endDate": "2026-11-30",
      "courseSchedule": {
        "@type": "Schedule",
        "repeatFrequency": "P1W",
        "byDay": ["Monday", "Wednesday", "Friday"],
        "startTime": "19:30",
        "endTime": "21:30"
      },
      "instructor": {
        "@type": "Person",
        "@id": "https://example-edu.vn/giang-vien/nguyen-tuan-anh",
        "name": "Nguyễn Tuấn Anh",
        "jobTitle": "Head of Performance Marketing",
        "sameAs": "https://www.linkedin.com/in/example"
      },
      "location": {
        "@type": "VirtualLocation",
        "url": "https://zoom.us/j/example"
      },
      "offers": {
        "@type": "Offer",
        "price": "8500000",
        "priceCurrency": "VND",
        "availability": "https://schema.org/InStock",
        "validFrom": "2026-08-01",
        "validThrough": "2026-09-07",
        "url": "https://example-edu.vn/vi/khoa-hoc/digital-marketing/dang-ky"
      }
    },
    {
      "@type": "CourseInstance",
      "@id": "https://example-edu.vn/vi/khoa-hoc/digital-marketing/batch-t10-2026-hn",
      "name": "Batch tháng 10/2026 — Offline Hà Nội",
      "courseMode": "Blended",
      "startDate": "2026-10-06",
      "endDate": "2026-12-28",
      "instructor": {
        "@type": "Person",
        "name": "Trần Minh Khoa"
      },
      "location": {
        "@type": "Place",
        "name": "AcademyVN Hà Nội",
        "address": {
          "@type": "PostalAddress",
          "streetAddress": "45 Đường Láng",
          "addressLocality": "Đống Đa",
          "addressRegion": "Hà Nội",
          "addressCountry": "VN"
        }
      },
      "offers": {
        "@type": "Offer",
        "price": "10500000",
        "priceCurrency": "VND",
        "availability": "https://schema.org/InStock"
      }
    }
  ],
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "203",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [
    {
      "@type": "Review",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5"
      },
      "author": {
        "@type": "Person",
        "name": "Lê Thu Hương"
      },
      "reviewBody": "Khoá học rất thực tế, instructor có nhiều case study từ doanh nghiệp Việt Nam. Sau 3 tháng học, tôi tự quản lý được ngân sách Google Ads của công ty.",
      "datePublished": "2026-07-15"
    }
  ]
}

EducationalOccupationalProgram for long-term programs

{
  "@context": "https://schema.org",
  "@type": "EducationalOccupationalProgram",
  "@id": "https://example-college.edu.vn/chuong-trinh/ky-thuat-vien-dien-tu",
  "name": "Chứng Chỉ Nghề Kỹ Thuật Viên Điện Tử",
  "description": "Chương trình đào tạo nghề 18 tháng, trang bị kiến thức và kỹ năng thực hành về sửa chữa thiết bị điện tử dân dụng, mạch điện tử số và tương tự. Tốt nghiệp được cấp Chứng chỉ nghề do Bộ Lao động – Thương binh và Xã hội công nhận.",
  "programType": "Certificate",
  "timeToComplete": "P18M",
  "occupationalCredentialAwarded": {
    "@type": "EducationalOccupationalCredential",
    "credentialCategory": "Certificate",
    "name": "Chứng chỉ nghề Kỹ thuật viên Điện tử"
  },
  "educationalProgramMode": "Blended",
  "offers": {
    "@type": "Offer",
    "price": "18000000",
    "priceCurrency": "VND"
  },
  "provider": {
    "@type": "CollegeOrUniversity",
    "@id": "https://example-college.edu.vn",
    "name": "Trường Cao đẳng Kỹ thuật Công nghệ ABC"
  }
}

Combining Course schema with BreadcrumbList

Course pages should combine Course + BreadcrumbList + WebPage schema:

[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Trang chủ",
        "item": "https://example-edu.vn/vi/"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Khoá học",
        "item": "https://example-edu.vn/vi/khoa-hoc/"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "Digital Marketing Toàn Diện"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Course",
    "name": "Khoá Học Digital Marketing Toàn Diện"
  }
]

Common Course schema errors

ErrorConsequenceFix
description under 50 wordsDoesn't qualify for Google CoursesWrite at least 80 words describing actual course content
Missing providerSchema is invalidAdd Organization with name and url
courseMode uses free-form textGoogle doesn't recognize itUse schema.org values: Synchronous, Asynchronous, Blended
startDate left unchanged when batch endsAI sees the course as finishedUpdate or add a new CourseInstance when enrollment opens
Tuition without priceCurrencyAmbiguous — ignoredAlways include "VND" or "USD"
Reviews written by yourself, not studentsRisk of Google penaltyOnly add real reviews from enrolled students

Next.js implementation

// app/[lang]/khoa-hoc/[slug]/page.tsx
import type { WithContext, Course } from "schema-dts";

export default async function CoursePage({ params }) {
  const course = await getCourse(params.slug);

  const jsonLd: WithContext<Course> = {
    "@context": "https://schema.org",
    "@type": "Course",
    name: course.title,
    description: course.description,
    provider: {
      "@type": "Organization",
      name: "AcademyVN",
      url: "https://example-edu.vn",
    },
    hasCourseInstance: course.batches.map((batch) => ({
      "@type": "CourseInstance",
      courseMode: batch.mode,
      startDate: batch.startDate,
      endDate: batch.endDate,
      offers: {
        "@type": "Offer",
        price: batch.price.toString(),
        priceCurrency: "VND",
        availability: batch.available
          ? "https://schema.org/InStock"
          : "https://schema.org/SoldOut",
      },
    })),
    ...(course.rating && {
      aggregateRating: {
        "@type": "AggregateRating",
        ratingValue: course.rating.value.toString(),
        reviewCount: course.rating.count.toString(),
        bestRating: "5",
        worstRating: "1",
      },
    }),
  };

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: JSON.stringify(jsonLd).replace(/</g, "\\u003c"),
        }}
      />
      {/* Course page content */}
    </>
  );
}

Course schema is a simple investment with high ROI for any training center or EdTech platform in Vietnam. Google Courses Carousel is growing rapidly — appearing at position 0 (above organic results) and getting cited directly by AI when learners search for courses.

Frequently asked questions

How is Course different from EducationalOccupationalProgram?

Course is for a specific, time-limited course — e.g., 'Digital Marketing Course 3 months', 'Basic Python Programming Course 40 hours'. EducationalOccupationalProgram is for long-term training programs that award degrees or systematic certificates — e.g., 'Master's in Business Administration', 'Electronics Technician Vocational Certificate'. Google Courses rich results currently support Course schema better; EducationalOccupationalProgram support is being expanded. For most EdTech and training centers in Vietnam: use Course schema.

Which fields are required in Course schema?

Google requires a minimum of 3 fields to qualify for rich results: (1) name — course name, (2) description — at least 50 words (not just a short tagline), (3) provider — Organization with name and url. Recommended additional fields: hasCourseInstance (scheduled intakes), coursePrerequisites, educationalLevel, inLanguage, offers (tuition), aggregateRating. An insufficiently long description is the most common reason Courses don't qualify for rich results.

How do I get my course to appear in Google Courses feature?

Google Courses is a dedicated feature showing a course carousel for queries like 'learn python programming', 'digital marketing course online'. Requirements: (1) the course page has valid Course schema with all required fields, (2) the page is indexed and not set to noindex, (3) it must be an actual course (not a blog or article about a course), (4) the provider must be a legitimate educational organization. Adding hasCourseInstance with startDate helps Google understand the course is active.

If a course has multiple intake schedules, how should the schema be structured?

Use hasCourseInstance as an array, where each element is a CourseInstance: courseMode (online/onsite/blended), instructor, startDate, endDate, location, offers (prices may differ by batch). Example: a Digital Marketing course has a September online batch and an October hybrid batch in Hanoi — 2 separate CourseInstances in the same Course schema. This helps Google and AI understand the course always has an upcoming intake.

Where does AI search get course information from?

AI synthesizes from multiple sources: Course schema on the course page (most structured), landing page content, reviews and Q&A from users, aggregate directories like Udemy or Coursera listings (if available). Course schema gives AI exactly: course name, duration, provider, language, level, and tuition — no need for AI to guess from prose. Important: the description must clearly describe the CONTENT of the course, not just marketing copy.

AEO Saigon

An Answer Engine Optimization agency in Ho Chi Minh City — helping business websites get cited by AI. About AEO Saigon →

Want your website to be cited by AI like this?

Free Audit