С ростом онлайн-образования (Coursera, Skillbox, Stepik, edX, GeekBrains) Google выделил учебные курсы в отдельную вертикаль поиска. Правильная разметка Course даёт попадание в специальный Rich Result с указанием провайдера, длительности и типа обучения. Официальные требования — Google Search Central: Course.
У Course есть особенность: сам тип описывает «абстрактный курс» (программа обучения), а конкретные потоки (даты запуска, преподаватели, формат) — через связанные CourseInstance. Один курс — несколько потоков.
Пример JSON-LD (простой курс)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Введение в TypeScript",
"description": "Курс для JS-разработчиков: типы, интерфейсы, generics, миграция проекта на TS.",
"provider": {
"@type": "Organization",
"name": "FRUNTEND",
"sameAs": "https://fruntend.com"
},
"url": "https://fruntend.com/courses/typescript-intro"
}
</script>
Обязательные свойства
- name — название курса.
- description — текстовое описание, минимум ~50 символов.
- provider — провайдер обучения как Organization с обязательным name. Рекомендуется добавить sameAs с основным доменом.
Пример с CourseInstance
Если курс существует в нескольких потоках — например, стартует в разные даты или доступен в разных форматах (self-paced vs live-webinar) — добавляется массив hasCourseInstance:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Введение в TypeScript",
"description": "Курс для JS-разработчиков...",
"provider": {
"@type": "Organization",
"name": "FRUNTEND"
},
"hasCourseInstance": [
{
"@type": "CourseInstance",
"courseMode": "Online",
"startDate": "2026-09-01",
"endDate": "2026-11-01",
"instructor": {
"@type": "Person",
"name": "Аня Петрова"
},
"offers": {
"@type": "Offer",
"price": "12000",
"priceCurrency": "RUB"
}
},
{
"@type": "CourseInstance",
"courseMode": "OnDemand",
"courseWorkload": "PT40H"
}
]
}
</script>
courseMode — enumeration: Online, Onsite, Blended, OnDemand. courseWorkload — длительность в ISO 8601 duration-формате (PT40H = 40 часов, P4W = 4 недели).
Что попадает в SERP
- Course Rich Result — карточка с названием, провайдером, длительностью, форматом (онлайн/офлайн), звёздами рейтинга.
- Google Courses — специальная вертикаль в некоторых регионах (США, UK, Индия). Требует полной разметки с CourseInstance и часто — наличия offers.
- AggregateRating — можно добавить как отдельное свойство внутри Course. Звёзды рейтинга в SERP сильно повышают CTR.
Типовые ошибки
- Забыть description. Короче ~50 символов — Google не считает валидным.
- Provider как строка. Только объект { "@type": "Organization", "name": "..." }.
- courseWorkload в неверном формате. Только ISO 8601 duration — начинается с P. Формат вроде «40 часов» или «40h» — ошибка.
- Смешивание Course и CourseInstance. Свойства уровня «конкретного потока» (startDate, instructor) должны идти в CourseInstance, не в Course.