Структурированные данные для курсов (Course
и CourseInstance
)
![Пример изображения курса в Google Поиске](https://developers-dot-devsite-v2-prod.appspot.com/static/search/docs/images/course-info-rich-result.png?authuser=9&hl=ru)
Чтобы помочь пользователям найти информацию о ваших курсах, вы можете добавить на сайт структурированные данные. Если вы разместите более подробную информацию о курсе, такую как отзывы, цены и другие сведения, Google сможет показывать ее в расширенных результатах Поиска.
Разметка schema.org Course
используется в двух типах расширенных результатов для курсов.
Если сведения о курсах, размещенные на вашем сайте, соответствуют приведенным ниже правилам, то они могут показываться в расширенных результатах обоих типов:
- Список курсов. Расширенные результаты с перечнем курсов с одного сайта.
- Информация о курсе. Карусель с подробными сведениями о курсе с разных сайтов.
Доступность функции
Расширенные результаты для информации о курсе могут показываться на английском языке во всех регионах, в которых доступен Google Поиск. Мы надеемся, что в дальнейшем нам удастся добавить информацию о курсах на других языках.
Как добавлять структурированные данные
Структурированные данные – стандартизированный формат, который позволяет предоставлять информацию о странице и классифицировать ее контент. О том, как это работает, рассказывается в другой статье.
Ниже в общих чертах описано, как создать, проверить и добавить на сайт структурированные данные. Пошаговые инструкции вы найдете в практической работе, посвященной добавлению структурированных данных на веб-страницу.
- Добавьте обязательные свойства. Узнайте, в каких частях страницы нужно размещать структурированные данные выбранного вами формата.
- Следуйте рекомендациям.
- Протестируйте свой код с помощью инструмента проверки расширенных результатов. Если будут обнаружены критические ошибки, устраните их. Мы также рекомендуем устранить некритические ошибки, отмеченные в инструменте. Это может привести к повышению качества структурированных данных, хотя страницы будут подходить для создания расширенных результатов и без этого.
- Опубликуйте страницу и с помощью инструмента проверки URL выясните, как она выглядит для робота Googlebot. Убедитесь, что доступ Google к странице не заблокирован файлом robots.txt или метатегом
noindex
и авторизация на ней не требуется. Если все в порядке, то запросите повторное сканирование ваших URL. - Отправляйте нам файл Sitemap, чтобы информировать нас об изменениях на сайте. Отправку такого файла можно автоматизировать с помощью Search Console Sitemap API.
Пример
Вот пример страницы сведений о курсе:
<html> <head> <title>Introduction to Computer Science and Programming</title> <script type="application/ld+json"> { "@context": "https://schema.org/", "@id": "https://www.example.com/advancedCpp", "@type": "Course", "name": "Learn Advanced C++ Topics", "description": "Improve your C++ skills by learning advanced topics.", "publisher": { "@type": "Organization", "name": "CourseWebsite", "url": "www.examplecoursewebsite.com" }, "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" }, "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ], "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4, "ratingCount": 1234, "reviewCount": 450 }, "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }], "totalHistoricalEnrollment": 12345, "datePublished": "2024-03-21", "educationalLevel": "Advanced", "about": ["C++ Coding", "Backend Engineering"], "teaches": ["Practice and apply systems thinking to plan for change", "Understand how memory allocation works."], "financialAidEligible": "Scholarship Available", "inLanguage": "en", "availableLanguage": ["fr", "es"], "syllabusSections": [ { "@type": "Syllabus", "name": "Memory Allocation", "description": "Learn how memory is allocated when creating C++ variables.", "timeRequired": "PT6H" }, { "@type": "Syllabus", "name": "C++ Pointers", "description": "Learn what a C++ pointer is and when they are used.", "timeRequired": "PT11H" } ], "review": [ { "@type": "Review", "author": { "@type": "Person", "name": "Lou S." }, "datePublished": "2024-08-31", "reviewRating": { "@type": "Rating", "bestRating": 10, "ratingValue": 6 } }], "coursePrerequisites": [ "Basic understanding of C++ up to arrays and functions.", "https://www.example.com/beginnerCpp" ], "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.example.com", "credentialCategory": "Certificate", // offers only needed if the credential costs extra money. "offers": [{ "@type": "Offer", "category": "Paid", "price": 5, "priceCurrency": "USD" }] }], "video": { "@type": "VideoObject", "name": "Video name", "description": "A video previewing this course.", "uploadDate": "2024-03-28T08:00:00+08:00", "contentUrl": "www.example.come/mp4", "thumbnailUrl": "www.example.com/thumbnailurl.jpg" }, "hasCourseInstance": [ { // Blended, instructor-led course meeting 3 hours per day in July. "@type": "CourseInstance", "courseMode": "Blended", "location": "Example University", "courseSchedule": { "@type": "Schedule", "duration": "PT3H", "repeatFrequency": "Daily", "repeatCount": 31, "startDate": "2024-07-01", "endDate": "2024-07-31" }, "instructor": [{ "@type": "Person", "name": "Ira D.", "description": "Professor at X-University", "image": "http://example.com/person.jpg" }] }, { // Online self-paced course that takes 2 days to complete. "@type": "CourseInstance", "courseMode": "Online", "courseWorkload": "P2D" }], // Only required for course programs that link to child courses. "hasPart": [{ "@type": "Course", "name": "C++ Algorithms", "url": "https://www.example.com/cpp-algorithms", "description": "Learn how to code base algorithms in c++.", "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" } }, { "@type": "Course", "name": "C++ Data Structures", "url": "https://www.example.com/cpp-data-structures", "description": "Learn about core c++ data structures.", "provider": { "@type": "Organization", "name": "Example University", "url": "www.example.com" } }] } </script> </head> <body> </body> </html>
Правила
Чтобы информация о ваших курсах могла показываться в расширенных результатах Google Поиска, следуйте правилам, описанным ниже.
Правила в отношении контента
В расширенных результатах могут показываться сведения только об образовательных курсах, то есть учебных программах, состоящих из лекций, уроков или модулей по определенному предмету или теме.
Разметка Course
должна быть добавлена на страницу с информацией об определенном курсе или программе. Следующие примеры сведений не будут показаны в расширенных результатах:
- страница сводных данных об ученой степени;
- страница сведений об отдельном экзамене;
- информация о публичном мероприятии, например Дне астрономии;
- отдельное двухминутное видео "Как приготовить сэндвич".
Типы структурированных данных
Чтобы ваш контент мог появляться в расширенных результатах поиска, необходимо задать обязательные свойства Course
и CourseInstance
. Для удобства пользователей мы советуем также задать и рекомендуемые нами свойства.
Course
Курс – это часть учебного плана, которую можно пройти как отдельно, так и в рамках программы.
Полное описание типа Course
приведено на странице schema.org/Course.
Обязательные свойства | |
---|---|
name |
Полное название курса. "name": "Intro to Statistics" |
description |
Описание курса.
"description": "This course teaches the basics of statistical thinking." |
provider |
Информация об организации, разработавшей контент для курса. "provider": { "@type": "Organization", "name": "Example University", "url": "www.exampleuniversity.com" } |
provider.name |
Text
Название образовательного учреждения. |
offers |
Общая стоимость прохождения курса, включая комиссионные сборы. Не указывайте цену, доступную только некоторым пользователям (например, скидку 20 % для новых пользователей). Не включайте в это поле дополнительную комиссию за сертификат. Если получение сертификата требует дополнительных расходов, добавьте эту информацию в свойство "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "EUR", "price": 10.99 }] |
offers.category |
Text
Ценовая категория курса. Используйте одно из следующих значений:
|
hasCourseInstance |
Сведения о курсе должны включать как минимум одно расписание с указанием места и времени проведения занятий. Более подробные сведения об обязательных и рекомендуемых свойствах приведены в разделе "hasCourseInstance": [{ // Onsite, instructor-led class meeting weekly in August 2023 "@type": "CourseInstance", "courseMode": "Onsite", "location": "Example University", "courseSchedule": { "@type": "Schedule", "duration": "PT5H", "repeatCount": 4, "repeatFrequency": "Weekly", "startDate": "2023-08-01", "endDate": "2023-8-31" }, "instructor": [{ "@type": "Person", "name": "Kai S.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] }] |
Рекомендуемые свойства | |
---|---|
about |
Описание компетенций или навыков, которые пользователь сможет развить при условии успешного прохождения курса (если применимо). "about": ["Quantitative Analysis", "Critical Thinking"] |
aggregateRating |
Средняя оценка курса на основе оценок пользователей, прошедших этот курс (если применимо). Ознакомьтесь с правилами размещения отзывов и списком обязательных и рекомендуемых свойств типа "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "ratingCount": 255, "reviewCount": 189 } |
availableLanguage |
Субтитры или языки, на которых можно пройти курс (если применимо). Укажите двухбуквенный код по стандарту ISO 639-1 alpha-2. "availableLanguage": ["fr", "es", "de"] |
coursePrerequisites |
Знания, необходимые для прохождения курса (если применимо). Здесь можно указать требуемый уровень знаний и/или ссылку на другие курсы. "coursePrerequisites": ["Understanding of Algebra concepts like variables and functions", "https://www.coursewebsite.abc/algebra"] |
datePublished |
Дата создания курса (если применимо). Укажите дату в формате ISO 8601 (ГГГГ-ММ-ДД). "datePublished": "2019-03-21" |
educationalCredentialAwarded |
Информация о сертификате или дипломе, который пользователь сможет получить после прохождения курса (если применимо). Если за сертификат требуется дополнительная плата, укажите ее размер. "educationalCredentialAwarded": [{ "@type": "EducationalOccupationalCredential", "name": "CourseProvider Certificate", "url": "www.examplecertificate.com", "credentialCategory": "Certificate", "offers": [{ "@type": "Offer", "category": "Paid", "priceCurrency": "USD", "price": 5 }] }] |
educationalCredentialAwarded.credentialCategory |
Text
Тип документа, который получит пользователь (если применимо). Используйте одно из следующих значений:
|
educationalCredentialAwarded.name |
Text
Название документа (если применимо). |
educationalCredentialAwarded.offers.category |
Text
Тип документа в зависимости от стоимости его получения (если применимо). Используйте одну из следующих категорий:
|
educationalCredentialAwarded.offers.price |
Number
Цена документа в числовом выражении (если применимо). |
educationalCredentialAwarded.offers.priceCurrency |
Text
Укажите трехбуквенный код валюты цены документа в формате ISO 4217 (если применимо). |
educationalCredentialAwarded.url |
URL
Ссылка на страницу документа (если применимо). |
educationalLevel |
Целевой уровень образования для курса (если применимо). Используйте одно из следующих значений:
"educationalLevel": "Beginner" |
financialAidEligible |
Стипендии, особый график платежей и другие возможности для пользователей, которые хотят пройти курс (если применимо). "financialAidEligible": "Scholarships available for eligible users." |
image |
Ссылка на изображение, сопровождающее курс (если применимо). Используйте изображения, связанные с содержанием курса, а не логотипы или что-то другое. Дополнительные рекомендации:
Пример: "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
inLanguage |
Основной язык обучения (если применимо). Укажите двухбуквенный код по стандарту ISO 639-1 alpha-2. "inLanguage": "en" |
offers.price |
Number
Цена курса в числовом выражении (если применимо). Не включайте в это поле другую информацию, например символ валюты. |
offers.priceCurrency |
Text
Используйте трехбуквенный код в формате ISO 4217 для указания валюты цены курса (если применимо). |
provider.url |
URL
URL главной страницы сайта образовательного учреждения (если применимо). |
publisher |
Информация об организации, разместившей информацию о курсе. "publisher": { "@type": "Organization", "name": "Course Website", "url": "www.example.com" } |
publisher.name |
Text
Название организации, разместившей информацию о курсе (если применимо). |
publisher.url |
URL
URL главной страницы сайта организации, разместившей информацию о курсе (если применимо). |
review |
Список отзывов пользователей о курсе (если применимо). Ознакомьтесь с правилами размещения отзывов. "review": [{ "@type": "Review", "author": { "@type": "Person", "name": "Sasha J." }, "datePublished": "2021-09-22", "reviewRating": { "@type": "Rating", "ratingValue": 4 } }] |
syllabusSections |
Сведения о различных модулях, из которых состоит курс (если применимо). "syllabusSections": [{ "@type": "Syllabus", "name": "Algebra Review", "description": "Review prerequisite Algebra concepts.", "timeRequired": "PT2H30M" }, { "@type": "Syllabus", "name": "Statistics Terms", "description": "Learn the definitions of basic statistics terms.", "timeRequired": "PT5H" }] |
syllabusSections.description |
Text
Описание модуля (если применимо). |
syllabusSections.name |
Text
Название модуля курса (если применимо). |
syllabusSections.timeRequired |
Duration
Используйте временной формат ISO 8601 (если применимо).
Например, код |
teaches |
Результаты обучения или определенные знания, которые получит пользователь при прохождении курса (если применимо). "teaches": ["How to use visualization tools and graphs", "Why stats is important"] |
totalHistoricalEnrollment |
Общее число пользователей, зарегистрировавшихся на курс за все время (если применимо). "totalHistoricalEnrollment": 80032 |
video |
Видеоролик о курсе (если применимо). Подробная информация приведена в инструкциях для разметки типа "video": { "@type": "VideoObject", "name": "Video name", "description": "A video previewing this course.", "uploadDate": "2022-03-28T08:00:00+08:00", "contentUrl": "www.videourl.mp4", "thumbnailUrl": "www.thumbnailurl.jpg" } |
CourseInstance
Полное описание структурированных данных типа CourseInstance
приведено на странице schema.org/CourseInstance.
Для каждого курса должен быть задан как минимум один экземпляр разметки CourseInstance
со всеми обязательными свойствами.
Обязательные свойства | |
---|---|
courseMode |
Канал обучения. Используйте одно из следующих значений:
Если занятие проводится в определенном месте ( "courseMode": "Online" |
courseSchedule |
Информация о средней продолжительности курса при указанной интенсивности занятий. Если курс предполагает прохождение обучения в строго установленные сроки, укажите дату начала и окончания. Вот пример курса с заданной интенсивностью занятий, который можно начать в любое время: // This course takes 6 weeks to complete. "courseSchedule": { "@type": "Schedule", "repeatCount": 6 "repeatFrequency": "Weekly", } Вот пример курса с заданной интенсивностью занятий, который нужно пройти в установленный срок: // This course expects 1 hour per day during July 2023 "courseSchedule": { "@type": "Schedule", "duration": "PT1H", "repeatCount": 31 "repeatFrequency": "Daily", "startDate": "2023-07-01", "endDate": "2023-07-31" } |
courseSchedule.repeatCount |
Integer
Числовое значение продолжительности курса в единицах |
courseSchedule.repeatFrequency |
Text
С этим полем связаны свойства
|
courseWorkload |
Text
В этом поле указывается общее количество времени, требуемое для просмотра всех видеоматериалов, выполнения всех заданий и прохождения всех экзаменов по курсу. Укажите время в формате ISO 8601. "courseWorkload": "PT22H" |
Рекомендуемые свойства | |
---|---|
courseSchedule.duration |
Duration
Средняя интенсивность в единицах Не указывайте продолжительность всего курса в этом свойстве. Для этого следует использовать свойство |
courseSchedule.endDate |
Date
Дата окончания курса в формате ISO 8601 (ГГГГ-ММ-ДД), если применимо. |
courseSchedule.startDate |
Date
Дата начала курса в формате ISO 8601 (ГГГГ-ММ-ДД), если применимо. |
image |
URL
URL изображения преподавателя (если применимо). Дополнительные рекомендации:
Пример: "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ] |
instructor |
Сведения о преподавателе курса (если применимо). "instructor": [{ "@type": "Person", "name": "Dana A.", "description": "Professor at X-University", "image": "http://examplePerson.jpg" }] |
instructor.description |
Text
Подробная информация о преподавателе и его достижениях (если применимо). |
instructor.name |
Text
Имя преподавателя (если применимо). |
location |
Название места и/или адрес проведения занятий (если применимо). "courseMode": "Blended", "location": "Example High School" |
Программа курса
Программа курса – это набор подкурсов (дочерних элементов). Подкурсы должны представлять собой отдельные курсы со своими URL и целевыми страницами.
Если на вашей странице размещена программа курса, то добавьте на нее перечисленные ниже свойства (наряду с основными свойствами, перечисленными в разделах Course
и CourseInstance
).
Обязательные свойства | |
---|---|
hasPart |
Перечень подкурсов, из которых состоит программа. "@context": "https://schema.org/", "@type": "Course", "name": "Learning Pathway: Knitting", "url": "www.example.com/knitprogram" // Fill the other required Course and CourseInstance properties "hasPart": [{ "@type": "Course", "name": "Intro to Knitting", "url": "www.example.com/knitbasics", "description": "Learn the basics of how to knit." }, { "@type": "Course", "name": "Knit a Sweater", "url": "www.example.com/knitsweater", "description": "Learn to knit an entire sweater." }] |
hasPart.name |
Text
Полное название подкурса. |
hasPart.url |
URL
URL целевой страницы подкурса. |
Рекомендуемые свойства | |
---|---|
hasPart.description |
Text
Краткое содержание подкурса (если применимо).
|
Сбор статистики по расширенным результатам в Search Console
С помощью Search Console вы можете собирать данные об эффективности страниц вашего ресурса в Google Поиске. Вам не обязательно регистрироваться в этом сервисе, чтобы ваши страницы попали в результаты поиска. Однако это позволит узнать, как роботы Google воспринимают сайт, и упростить им его обработку. Рекомендуем проверять информацию в Search Console в следующих случаях:
- После первого размещения структурированных данных
- После выпуска новых шаблонов или обновления кода
- При регулярном анализе трафика
После первого размещения структурированных данных
Когда ваши страницы будут проиндексированы, проверьте их на наличие ошибок с помощью отчета о статусе расширенных результатов. Желательно, чтобы количество объектов с правильной разметкой выросло, а число объектов с ошибками – нет. Если в структурированных данных будут обнаружены ошибки, примите следующие меры:
- Устраните проблемы в объектах.
- Проверьте исправленную страницу, чтобы узнать, обнаруживаются ли ошибки.
- Запросите проверку ресурса, используя отчет о статусе расширенных результатов.
После выпуска новых шаблонов или обновления кода
Если вы внесли значительные изменения на сайт, проверьте, не увеличилось ли число недействительных объектов, связанных со структурированными данными.- Увеличилось число недействительных объектов? Возможно, вы создали шаблон, с которым что-то не так, или имеющийся шаблон используется некорректно.
- Уменьшилось число действительных элементов, но не увеличилось количество недействительных? Возможно, на ваших страницах не размещены структурированные данные. Выяснить, с чем связаны ошибки, можно при помощи инструмента проверки URL.
При регулярном анализе трафика
Анализировать трафик сайта из Google Поиска можно с помощью отчета об эффективности. Из этого отчета вы узнаете, как часто страница появляется в Поиске в виде расширенного результата, с какой регулярностью пользователи нажимают на нее и какова ее средняя позиция в результатах поиска. Эти сведения также можно автоматически получать с помощью Search Console API.Устранение неполадок
Если у вас возникли трудности с добавлением или отладкой структурированных данных, вам помогут ресурсы и сведения, доступные по приведенным ниже ссылкам.
- Если вы используете систему управления контентом (CMS) или поручили настройку сайта другому человеку, обратитесь за помощью к нему или разработчику CMS. Не забудьте переслать ему сообщения о проблеме, полученные вами в Search Console.
- Google не гарантирует показ вашего контента в результатах поиска, которые формируются на основе структурированных данных. Возможные причины, по которым ваши материалы могут не показываться в виде расширенных результатов, перечислены в общих рекомендациях по использованию структурированных данных.
- Ознакомьтесь со списком типичных ошибок в структурированных данных и проверьте, всё ли у вас правильно.
- Если мы вручную приняли меры в отношении страницы, недопустимые структурированные данные на ней будут игнорироваться до тех пор, пока вы не исправите код. При этом сама страница может появляться в результатах поиска и дальше. Чтобы устранить проблемы со структурированными данными, воспользуйтесь отчетом о мерах, принятых вручную.
- Ещё раз изучите рекомендации, чтобы выяснить, соответствует ли им ваш контент. Проблема может быть связана со спамом в контенте или разметке, а не с ошибками в синтаксисе. Тогда ее не получится выявить с помощью инструмента проверки расширенных результатов.
- Узнайте, что может стоять за отсутствием расширенных результатов или уменьшением их общего количества.
- Робот Googlebot сканирует и индексирует страницы не сразу после обновления контента. С момента публикации страницы может пройти несколько дней, пока Google обнаружит и просканирует ее. Мы собрали на отдельной странице ответы на часто задаваемые вопросы о сканировании и индексировании.
- В случае необходимости задавайте вопросы на форуме Центра Google Поиска