「講座ページにも構造化データを入れておきたい」。そう思って調べ始めると、少し混乱するかもしれません。解説記事はたくさん見つかるのに、Googleの公式ドキュメントを開くと、書いてある項目がとても少ないからです。
理由ははっきりしています。個別のコースを検索結果に表示する機能が、すでに終わっているからです。今も残っているのは、複数のコースをまとめて見せる形だけです。
この記事は、講座・スクール事業のサイト担当の方を想定して書きました。いま有効な形はどれか、Googleが見ている項目はどこまでか、開催回や受講料はどこに書くのか。順番に整理していきます。
こんなふうに調べていませんか
- 「Course schema 書き方」で検索して、そのまま使えるテンプレートを探している
- 解説記事によって書いてある項目が違い、どれが今も有効なのか分からない
- 講座が1つしかない自社でも、実装する意味があるのか判断したい
この記事を読み終えたときに手に入るもの
- 今も有効なCourse listの条件を、自分で確かめられるようになります
- Googleが見ている項目とschema.orgの語彙を、区別して実装できます
- 開催回と受講料を、CourseInstanceで書き分けられます
結論30秒でわかる、この記事の結論
- Course schemaの個別コース表示はすでに終わっています。今も有効なのは、3件以上をまとめる「Course list」だけです。
- Googleが実際に見ているのは、name(コース名)とdescription(説明文)の2つ。推奨はprovider(提供組織)だけです。
- 開催回・日程・受講形式まで伝えたいときは、schema.orgのhasCourseInstanceを足します。
この記事では、スクールを運営する会社の2人と、専門家の会話をはさみながら進めます。あなたに近い立場の人の質問から読んでいただいて構いません。
- 若葉さん(Web担当2年目)— 「そもそも、それって何ですか?」を聞く役
- 高梨課長(マーケ課長)— 「誰が、どこまでやるんですか?」を聞く役
- 鈴木さん(AIO/SEOの専門家・本誌監修)— 答える役
01そもそもCourse schemaの書き方は、AI検索対策として何のためにあるんですか?
若葉さんあの…そもそもなんですが、Course schemaって、講座ページに何かを書き足すことなんでしょうか。
鈴木さんページの見た目は変わりません。講座案内に書いてある内容を、機械が読み取れる形でもう一度置き直す作業だと思ってください。
schema.orgは、Courseを「異なる日時・場所・媒体で提供されうる、複数の教育イベントやコンテンツからなる一連の講座」と定義しています(出典: schema.org/Course)。知識・能力・スキルの習得を目的とすることが前提です。
つまり、単発のセミナー告知や短い動画とは別のものとして扱われています。カリキュラムとしてのまとまりがあるかどうかが、境目になります。
そのうえでGoogle公式ドキュメントは、この語彙のうち「Course list」という1つの機能だけを構造化データとして扱っています(出典: Google Search Central「コース構造化データ」)。schema.orgが定義している語彙の全部を、Googleが見ているわけではありません。
この章のまとめ
Course schemaは、講座案内を機械が読める形に置き直すものです。語彙は広く、Googleが扱う機能はその一部だけ。この2つを分けて読むのが出発点です。
02Course infoの廃止で、AI検索最適化として何が変わったんですか?
高梨課長少し前に見た解説記事のとおりに実装してあるのですが、そのままで大丈夫でしょうか。
鈴木さんそこは確認が必要です。個別のコースを表示する機能は、すでに公式ドキュメントから削除されています。 古い手順のまま残っている記事が、まだ多いんです。
Googleは検索結果ページを簡素化する方針で、Course info(個別コースのリッチリザルト)を含む複数の構造化データ機能について、段階的な廃止を進めました(出典: Google Search Central「検索ドキュメント更新履歴」)。
経緯は次のとおりです。
| 日付 | できごと |
|---|---|
| 2025年6月12日 | Course infoを含む複数機能の廃止を予告 |
| 2025年9月9日 | Course infoを公式ドキュメントから削除(理由: 検索結果に表示されないため。出典: 同上) |
つまり、個別のコースページに書いたCourse schemaで、リッチリザルトを狙うという前提そのものが無くなりました。
この章のまとめ
個別コースのリッチリザルトは、公式ドキュメントから削除されています。狙う先が変わったので、実装の前提も変わりました。
03今も有効なCourse listの条件は、AI対策としてどこを見ればいいんですか?
廃止を免れたのは、3件以上のコースをまとめる「Course list」です(出典: Google Search Central「構造化データギャラリー」)。
Course listは単独では表示されません。カルーセル(Carousel)のマークアップと組み合わせて検索結果に表示されます(出典: 同上)。この組み合わせの要件は、Google Search Central「コース構造化データ」にも記載されています。
条件は2つです。
| 条件 | 内容 |
|---|---|
| 最低コース数 | 3件以上(個別詳細ページ・1ページにまとめた形式のどちらでも可) |
| コンテンツの性質 | 講義・レッスン・モジュールを含み、明確な学習成果を伴うカリキュラムであること。一般的なイベント告知や短い動画は対象外 |
数のほうは数えれば分かります。判断が要るのは、下の行です。学習成果がはっきりしているかを、自社の講座紹介文で確かめてみてください。受講したら何ができるようになるのかが書かれていなければ、まずそこが先です。
教育・スクール業界の動きは、別記事『教育・スクール業界のAIO事例』でも扱っています。
この章のまとめ
今も有効なのはCourse listだけ。条件はコース数と、カリキュラムとしての中身です。数は数えれば分かりますが、中身は読み直しが要ります。
04Course schemaの書き方で、AI検索対策として必須なのはどれですか?
Course listの必須プロパティは、name(コース名)とdescription(説明文)の2つです(出典: Google公式)。descriptionには表示上限があり、60文字までとされています。推奨プロパティは、provider(提供組織、Organization型)の1つだけです。
| 区分 | プロパティ | 型 | 備考 |
|---|---|---|---|
| 必須 | name | Text | コースのタイトル |
| 必須 | description | Text | 説明文。表示上限60文字 |
| 推奨 | provider | Organization | コンテンツを提供する組織 |
驚くほど少ない、と感じた方が多いかもしれません。書く量が足りているかを心配するより、この3つの中身が実際のページと合っているかを見るほうが実務では効きます。
providerはOrganization型を入れ子にします。会社としての名乗りをどう書くかは、別記事『Organization schemaの書き方』で解説しています。
この章のまとめ
Googleが見ているのは、コース名・説明文・提供組織だけです。項目数ではなく、表示との一致で品質が決まります。
05schema.orgの語彙とGoogleの要件は、AI検索最適化でどう違うんですか?
前の章の表には、hasCourseInstanceもofferも出てきませんでした。schema.orgがそれらを定義していないからではありません。両者が扱う範囲が違うだけです。
schema.orgのCourse型は、履修条件や資格まで扱える語彙を定義しています。代表的なものは次の3つです(出典: schema.org/Course)。
- hasCourseInstance: 開催回を表すCourseInstance型への参照
- coursePrerequisites: 履修の前提条件
- educationalCredentialAwarded: 修了時に得られる資格
Googleの必須・推奨だけを書いても、規約違反にはなりません。逆に、開催回・日程・受講形式まで伝えたいなら、schema.orgの拡張プロパティが必要になります。
この2つを混ぜると、どちらかに転びます。不要な実装で工数だけ増やすか、伝えられるはずの情報を書き漏らすかです。先に「どちらの範囲の話をしているのか」を決めてから書き始めてください。
この章のまとめ
Googleの要件とschema.orgの語彙は、広さが違うだけです。狙いが「検索結果の表示」なのか「情報を正確に渡すこと」なのかで、書く範囲が決まります。
06AI検索対策で使える、Course schemaの書き方テンプレートはありますか?
複数のコースを持つ講座サイトの一覧ページを想定したテンプレートです。ItemList型でCourseを3件以上まとめ、position・item(Course)を入れ子にします(出典: Google Search Central「コース構造化データ」)。
{
"@context": "https://schema.org",
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Course",
"url": "https://sample.example.com/courses/aio-basic",
"name": "AI検索最適化 入門コース",
"description": "AI検索の仕組みと基礎用語を学ぶ入門講座です。",
"provider": {
"@type": "Organization",
"name": "サンプルスクール",
"sameAs": "https://sample.example.com"
}
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Course",
"url": "https://sample.example.com/courses/aio-technical",
"name": "AI検索最適化 テクニカル実装コース",
"description": "構造化データとllms.txtの実装を学ぶ講座です。",
"provider": {
"@type": "Organization",
"name": "サンプルスクール",
"sameAs": "https://sample.example.com"
}
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Course",
"url": "https://sample.example.com/courses/aio-strategy",
"name": "AI検索最適化 戦略設計コース",
"description": "KPI設計と運用体制を学ぶ講座です。",
"provider": {
"@type": "Organization",
"name": "サンプルスクール",
"sameAs": "https://sample.example.com"
}
}
}
]
}positionは表示順を表す整数で、1から始まる連番にします。itemのname・description・providerは、実際にページへ表示されている情報と揃えてください。JSON-LDそのものの文法は、別記事『JSON-LDの書き方入門』で解説しています。
この章のまとめ
テンプレートは、外側の枠・並び順・中身のコース、という順に組み立てます。中身は、ページに出ている文言と揃えるのが原則です。
07開催回は、Course schemaのAI対策でどこに書くんですか?
高梨課長うちは同じ講座を、オンラインと対面の両方でやっています。この違いは、どこに書けばいいのでしょうか。
鈴木さんCourseInstanceという型があります。時間や場所が違うだけで、別の実施回だと示すための語彙です。
schema.orgは、時間や場所が異なるだけで別の実施回であることを示すCourseInstance型で、開催回を表現します(出典: schema.org/CourseInstance)。
CourseInstance固有のプロパティは、courseMode・courseSchedule・courseWorkload・instructorの4つです(出典: schema.org/CourseInstance)。courseMode(受講形式)はText型で、実務では「online」「onsite」のような文字列がよく使われます。
対面開催などの別の回を足すときは、hasCourseInstanceの配列にCourseInstanceをもう1件加えて、courseModeとlocationを実態に合わせます。
この章のまとめ
開催回はCourseInstanceで表します。オンラインと対面のように条件が違う回は、配列に足して並べていきます。
08受講料や開始日は、Course schemaのAI検索対策でどこに置くんですか?
CourseInstanceは、Eventのサブタイプでもあります。そのためstartDate(開始日)・location(開催場所)・offers(受講料)といった、Eventが持つプロパティもそのまま使えます(出典: schema.org/CourseInstance, schema.org/Event)。
{
"@context": "https://schema.org",
"@type": "Course",
"name": "AI検索最適化 テクニカル実装コース",
"description": "構造化データとllms.txtの実装を学ぶ講座です。",
"provider": {
"@type": "Organization",
"name": "サンプルスクール",
"sameAs": "https://sample.example.com"
},
"hasCourseInstance": [
{
"@type": "CourseInstance",
"courseMode": "online",
"courseWorkload": "週2時間、全4回",
"startDate": "2026-09-01",
"instructor": {
"@type": "Person",
"name": "担当講師名"
},
"offers": {
"@type": "Offer",
"priceCurrency": "JPY",
"price": "49800"
}
}
]
}受講料は、Course自体ではなくCourseInstanceの中のoffersに置きます。priceCurrencyは、日本円なら「JPY」です。
この章のまとめ
受講料はCourseInstanceの中のoffersです。Course自体に価格の欄はありません。開始日や会場も、回ごとに書き分けます。
09公開したあと、Course schemaの書き方はAI検索対策として何が崩れるんですか?
講座は、開講と終了を繰り返します。ページのほうは更新されても、構造化データだけが取り残される。ここが崩れやすい場所です。
| 崩れる箇所 | 起きること |
|---|---|
| コース数 | 開講終了で2件以下になり、カルーセル対象から外れる |
| hasCourseInstance | 開催が終了した回が残り続け、募集終了後も表示される |
このずれ方は、ECサイトの在庫・価格の更新と同じ構造です。別記事『Product schemaの書き方』で扱っている落とし穴が、そのまま当てはまります。
対処も同じ考え方になります。講座を開講・終了するときの手順に、構造化データの更新を1行入れておく。あとから思い出して直す形にすると、ずれたことに気づけません。
この章のまとめ
崩れるのはコース数と、終わった開催回です。どちらも講座の運用と連動しているので、更新のタイミングを手順に入れておくのが確実です。
10Course schemaを実装すれば、LLMOやAI検索で引用されやすくなりますか?
高梨課長上に説明する立場として、ここが気になります。実装すると、AI検索で引用されやすくなるのでしょうか。
鈴木さん正直にお答えします。そう断定できるデータは、確認できていません。 期待の置きどころを間違えないほうが、あとで困らないと思います。
構造化データとAI引用の関係は、単純ではありません。この点は、別記事『構造化データとAI引用の相関』で論文の読み方まで含めて扱っています。
Course schemaの主な効果は、講座情報をGoogleおよびクローラーへ正確に伝えることです。引用を取りにいく施策として位置づけると、判断がぶれます。
この章のまとめ
引用が増えると断定できるデータは確認できていません。期待してよいのは、講座情報を正確に渡せることのほうです。
11Course schemaの書き方で、AI検索最適化としてやりがちな失敗は何ですか?
最後に、実務でよく見かける失敗を3つ挙げます。どれも「よかれと思って」起きるものです。
1. Course info向けの実装のまま満足してしまう
このマークアップは、すでに検索結果に表示されません。3件以上のコースをItemListでまとめる「Course list」の形に切り替える必要があります。
2. コースが1〜2件しかないのに実装してしまう
Googleのガイドラインは、最低3件を条件としています。コース数が少ないなら、提供コースを増やすか、単独での評価はいったん見送る判断になります。
3. nameに宣伝文句を入れてしまう
「今だけ半額」のような価格・割引表現は、Googleのガイドライン違反にあたります。nameには、コースの内容を表す名称だけを書いてください。
この章のまとめ
失敗の多くは、古い前提のまま実装したときに起きます。いま有効な形はどれか。それだけ先に確かめれば、大きくは外れません。
12よくある質問
コースが1つしかない場合、Course schemaは使えませんか?
Googleのリッチリザルトとしては評価されません。Course listの技術要件が、3件以上のコースをまとめることだからです(出典: Google公式)。ただしschema.org自体にコース数の条件はないため、ほかのクローラー向けに残す判断もあり得ます。
受講料はどこに記述すればいいですか?
CourseInstance配下のoffersに、Offer型でprice・priceCurrencyを記述します(出典: schema.org/Offer)。Course自体に価格プロパティはありません。
Course schemaを実装すれば、AI検索にも引用されやすくなりますか?
そう断定できるデータは確認できていません。構造化データとAI引用の関係は、別記事『構造化データとAI引用の相関』のとおり単純ではありません。主な効果は、講座情報をGoogleおよびクローラーへ正確に伝えることです。
実装したあと、どうやって確認すればいいですか?
リッチリザルトテストで、CourseまたはItemListとして検出され、エラー・警告がないことを確認します。検証ツールの使い分けは、別記事『構造化データのテストツール入門』で解説しています。
コース名に「今だけ半額」と入れてもいいですか?
入れられません。価格・割引表現をnameに含めることは、Googleのガイドライン違反にあたります。コースの内容を表す名称だけを記述してください。
13まとめ|今日やる3つのこと
Course schemaの実装で最初に決めるのは、Google向けの最小要件を満たすところで止めるか、schema.orgの語彙で開催回まで表現するかです。どちらが正解ということはなく、伝えたい情報の範囲で決まります。
まずは自社の講座ページを開いて、コースが3件以上まとまっているかを数えてみてください。そこが出発点になります。
今日この順でやります
コースを数える
3件以上まとまっているかを先に確かめます
必須の2つを埋める
nameとdescription。providerも足しておきます
開催回を足すか決める
日程や受講形式を伝えたいときにhasCourseInstanceを使います
AI検索では、こう聞かれています
Course schemaには何を書けばいいですか?必須の項目はどれですか?
「Course schemaの書き方で、AI検索対策として必須なのはどれですか?」の章で、表と図解にまとめています
コースが1つしかない場合でも、Course schemaは使えますか?
「よくある質問」の1つ目で答えています(結論:リッチリザルトとしては評価されません)
開催回や受講料は、Course schemaのどこに書けばいいですか?
「開催回は、Course schemaのAI対策でどこに書くんですか?」の章と、続く受講料の章に実装例があります
次に読むなら、この記事です