コース情報(Course
と CourseInstance
)の構造化データ
![コース情報が Google 検索でどのように表示されるかを示すイラスト](https://developers-dot-devsite-v2-prod.appspot.com/static/search/docs/images/course-info-rich-result.png?authuser=7&hl=ja)
コース情報の構造化データを使用してコースを Google に伝えることで、ユーザーがコースの内容を見つけやすくなります。クチコミの評価、価格、コースの詳細情報などを提供すると、Google がコースの内容をよりよく理解し、コース情報のリッチリザルトを使用してユーザーに充実したエクスペリエンスを提供できます。
同じ schema.org の Course
タイプを使う 2 つのコース リッチリザルトの機能があります。サイトがコースに関する情報を提供している場合は、以下の実装ガイドに沿って、両方の機能を有効にできます。
機能の提供状況
コース情報のリッチリザルトは、Google 検索を利用できるすべての地域において英語でご利用いただけます。今後は、英語以外の多くのコースについても利用できるようにする予定です。
構造化データを追加する方法
構造化データは、ページに関する情報を提供し、ページ コンテンツを分類するための標準化されたデータ形式です。構造化データを初めて使用する場合は、構造化データの仕組みについてをご覧ください。
構造化データの作成、テスト、リリースの概要は次のとおりです。ウェブページに構造化データを追加するための手順ガイドについては、構造化データの Codelab をご覧ください。
- 必須プロパティを追加します。使用している形式に基づいて、ページ上の構造化データを挿入する場所をご確認ください。
- ガイドラインに従います。
- リッチリザルト テストでコードを検証し、重大なエラーを修正します。ツールで報告される重大ではない問題の修正も検討してください。構造化データの品質向上に役立ちます(ただし、リッチリザルトの対象となるために必ずしも必要というわけではありません)。
- 構造化データが含まれているページを数ページ導入し、URL 検査ツールを使用して、Google でページがどのように表示されるかをテストします。Google がページにアクセスでき、robots.txt ファイル、
noindex
タグ、ログイン要件によってページがブロックされていないことを確認します。ページが正常に表示されたら、Google に URL の再クロールを依頼できます。 - 今後の変更について Google に継続して情報を提供するために、サイトマップを送信することをおすすめします。これは、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 検索でコース情報をリッチリザルトとして表示するには、下記のガイドラインに準拠する必要があります。
コンテンツ ガイドライン
ここで言う「コース」とは、特定の科目 / トピックに関する複数の講義、レッスン、またはモジュール授業で構成される一連のカリキュラムまたは 1 つの完結したカリキュラムです。コース情報のリッチリザルトは、このコースの定義に適合する教育コンテンツに対してのみ有効です。
Course
マークアップは、完全な単一のコース、またはコース プログラムを提供するウェブページに含める必要があります。以下の例は、コース情報のリッチリザルトに適さないものです。
- 学位の概要ページ
- 独立した試験ページ
- 「天文学デー」のような一般公開のイベント
- 1~2 分間の「サンドイッチの作り方」動画
構造化データタイプの定義
Google 検索にコンテンツをリッチリザルトとして表示するには、必須プロパティの 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 コードのリストにある 2 文字のコードを使用します。 "availableLanguage": ["fr", "es", "de"] |
coursePrerequisites |
コースの受講に必要な事前知識(該当する場合)。事前知識または別のコースへのリンク(もしくはその両方)の記載により表すことができます。 "coursePrerequisites": ["Understanding of Algebra concepts like variables and functions", "https://www.coursewebsite.abc/algebra"] |
datePublished |
コースが初めて公開された日付(該当する場合)。8601 日付形式(YYYY-MM-DD)を使用します。 "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 証明書の価格の通貨。3 文字の ISO 4217 通貨形式で指定します(該当する場合)。 |
educationalCredentialAwarded.url |
URL
証明書ページへのリンク(該当する場合)。 |
educationalLevel |
コースの対象教育レベル(該当する場合)。次のいずれかの値を選択します。
"educationalLevel": "Beginner" |
financialAidEligible |
コースの受講を検討しているユーザーに対する奨学金、特別支払いプラン、またはその他の経済援助の機会(該当する場合)。 "financialAidEligible": "Scholarships available for eligible users." |
image |
コースを表す画像の URL(該当する場合)。ロゴやキャプションではなく、コースに関連する画像を使用してください。 画像に関するその他のガイドライン:
次に例を示します。 "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 コードのリストにある 2 文字のコードを使用します。 "inLanguage": "en" |
offers.price |
Number
コースの数値価格(該当する場合)。この項目には、通貨記号などの数値以外の情報は含めないでください。 |
offers.priceCurrency |
Text
コースの価格の通貨。3 文字の 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
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
この項目は、コースのすべての動画を視聴し、すべての課題と試験を完了するのにかかる合計時間を表します。8601 期間形式を使用してください。 "courseWorkload": "PT22H" |
推奨プロパティ | |
---|---|
courseSchedule.duration |
Duration
平均的なユーザーが、 この項目で、コース全体の長さを指定しないでください。代わりに |
courseSchedule.endDate |
Date
コースの終了日。8601 日付形式(YYYY-MM-DD)で指定します(該当する場合)。 |
courseSchedule.startDate |
Date
コースの開始日。8601 日付形式(YYYY-MM-DD)で指定します(該当する場合)。 |
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 検索におけるページのパフォーマンスを監視できるツールです。Search Console に登録していなくても Google 検索結果に表示されますが、登録することにより、Google がサイトをどのように認識しているかを把握して改善できるようになります。次の場合は Search Console を確認することをおすすめします。
構造化データを初めてデプロイした後
ページがインデックスに登録されたら、関連するリッチリザルトのステータス レポートを使用して、問題がないかどうかを確認します。有効な項目が増え、無効な項目が増えていない状態が理想的です。構造化データに問題が見つかった場合の手順は次のとおりです。
- 無効な項目を修正します。
- 一般公開 URL の検査を行い、問題が解決したかどうかを確認します。
- ステータス レポートを使用して検証をリクエストします。
新しいテンプレートをリリースした後やコードを更新した後
ウェブサイトに大幅な変更を加えた場合は、構造化データの無効な項目が増加しないかどうか監視します。- 無効な項目が増加した場合は、新しく公開したテンプレートが正常に機能していないか、既存のテンプレートの新しい操作方法に問題があると考えられます。
- 有効な項目が減少している(無効な項目の増加と一致しない)場合は、ページに構造化データが埋め込まれていない可能性があります。URL 検査ツールを使用して問題の原因を特定します。
トラフィックを定期的に分析する場合
パフォーマンス レポートを使用して Google 検索のトラフィックを分析します。このデータから、検索でページがリッチリザルトとして表示される頻度、ユーザーがページをクリックする頻度、検索結果におけるページの平均掲載順位がわかります。この結果は、Search Console API を使用して自動的に取得することもできます。トラブルシューティング
構造化データの実装またはデバッグで問題が発生した場合は、以下のリソースが参考になります。
- コンテンツ管理システム(CMS)を使用している場合や、サイトが他者によって管理されている場合は、それに応じて支援を依頼してください。その際は、問題の詳細を含む Search Console のメッセージを必ず転送してください。
- 構造化データを使用するコンテンツが必ず検索結果に表示されるとは限りません。コンテンツがリッチリザルトに表示されないときのよくある原因については、構造化データに関する一般的なガイドラインをご覧ください。
- 構造化データにエラーがある可能性があります。構造化データエラーの一覧を確認してください。
- 構造化データへの手動による対策をページに対して実施すると、ページ上の構造化データが無視されるようになります(ただし、Google 検索結果にはページは引き続き表示されます)。構造化データの問題を修正するには、手動による対策レポートを使用します。
- ガイドラインを再度確認し、コンテンツがガイドラインを遵守していないことを確認します。スパム コンテンツまたはスパム マークアップの使用が原因で、問題が発生する場合がありますが、これは構文の問題ではない可能性があり、リッチリザルト テストでは特定できません。
- リッチリザルトが見つからない場合またはリッチリザルトの合計数が不足している場合のトラブルシューティングをご覧ください。
- 再クロールとインデックスの再登録に要する時間を考慮してください。ページを公開した後、Google が対象のページを検出してクロールするまでに数日を要する場合があることに留意してください。クロールとインデックス登録に関する一般的な質問については、Google 検索のクロールとインデックス登録に関するよくある質問をご覧ください。
- Google 検索セントラル フォーラムでもご質問をお受けしています。