Skip to content

Course schema generator

Mark up several courses from the same provider as an ItemList, the structure behind Google's course list results.

@ItemList
Courses (at least 3 for a course list)required

Your entries are saved in this browser only (localStorage). Privacy

Required
8/8
Recommended
6/6

All Google-required properties present. That makes the page eligible, not guaranteed. Google's docs

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@type": "Course",
        "url": "https://academy.example/sd-foundations",
        "name": "Structured Data Foundations",
        "description": "JSON-LD, schema.org types and Google's rules.",
        "provider": {
          "@type": "Organization",
          "name": "Example Academy",
          "sameAs": "https://academy.example"
        }
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "item": {
        "@type": "Course",
        "url": "https://academy.example/product-markup",
        "name": "Product Markup for Stores",
        "description": "Offers, returns, shipping and variants.",
        "provider": {
          "@type": "Organization",
          "name": "Example Academy",
          "sameAs": "https://academy.example"
        }
      }
    },
    {
      "@type": "ListItem",
      "position": 3,
      "item": {
        "@type": "Course",
        "url": "https://academy.example/audit-at-scale",
        "name": "Auditing Markup at Scale",
        "description": "Crawl, extract and fix structured data.",
        "provider": {
          "@type": "Organization",
          "name": "Example Academy",
          "sameAs": "https://academy.example"
        }
      }
    }
  ]
}
</script>
  • No issues found.

Checked in your browser against the required and recommended properties Google documents for this type. Confirm with Google's Rich Results Test once it's live.

example.com[object Object]
Courses from Example Academy
Google writes this snippet from your page content or meta description.

An illustration of what the markup can feed. Google decides what actually appears and valid markup never guarantees a rich result.

When to use ItemList markup

  • A catalogue page listing at least three courses from one provider.
  • Each course should also have its own page with a matching URL.
  • Not for single course pages alone; the list feature needs several.

Getting it right

  • Each Course needs name and description (about 60 characters are shown); provider is recommended.
  • Every ListItem needs a position and a unique course URL.
  • Google retired the separate "Course info" rich result in 2025; Course list is still documented.
  • Use absolute URLs that match each course's canonical URL.

Source: Google Search Central, Carousel / list structured data documentation, and schema.org/ItemList.

Google's property list

PropertyGoogle says
itemListElementrequired
itemListElement.positionrequired

Example output

{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@type": "Course",
        "url": "https://academy.example/sd-foundations",
        "name": "Structured Data Foundations",
        "description": "JSON-LD, schema.org types and Google's rules.",
        "provider": {
          "@type": "Organization",
          "name": "Example Academy",
          "sameAs": "https://academy.example"
        }
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "item": {
        "@type": "Course",
        "url": "https://academy.example/product-markup",
        "name": "Product Markup for Stores",
        "description": "Offers, returns, shipping and variants.",
        "provider": {
          "@type": "Organization",
          "name": "Example Academy",
          "sameAs": "https://academy.example"
        }
      }
    },
    {
      "@type": "ListItem",
      "position": 3,
      "item": {
        "@type": "Course",
        "url": "https://academy.example/audit-at-scale",
        "name": "Auditing Markup at Scale",
        "description": "Crawl, extract and fix structured data.",
        "provider": {
          "@type": "Organization",
          "name": "Example Academy",
          "sameAs": "https://academy.example"
        }
      }
    }
  ]
}

Course schema questions

What happened to Course info markup?

Course info (detailed course pages with pricing and schedules) was retired in June 2025. Course list, an ItemList of courses, remains in Google's documentation.

How many courses do I need?

Google's carousel guidelines expect a list of several items from one site; three or more is the practical minimum.

Can I use it for a university programme?

Yes, if the page lists individual courses from the same provider with their own URLs.

Related generators