「講座ページにも構造化データを入れておきたい」。そう思って調べ始めると、少し混乱するかもしれません。解説記事はたくさん見つかるのに、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を足します。
講座ページで先に確かめる3つのことここを外すと、あとの作業が無駄になります講座ページで先に確かめる3つのこと1つめいま有効な形はどれか個別の表示は終わり、まとめる形だけが残った2つめGoogleが見る項目コース名・説明文・提供している組織3つめ開催回をどう書くか日程や受講形式は、別の型を足して表す鈴木さんここを外すと、あとの作業が無駄になります
講座ページで先に確かめる3つのこと — ここを外すと、あとの作業が無駄になります

この記事では、スクールを運営する会社の2人と、専門家の会話をはさみながら進めます。あなたに近い立場の人の質問から読んでいただいて構いません。

  • 若葉さん(Web担当2年目)— 「そもそも、それって何ですか?」を聞く役
  • 高梨課長(マーケ課長)— 「誰が、どこまでやるんですか?」を聞く役
  • 鈴木さん(AIO/SEOの専門家・本誌監修)— 答える役

01そもそもCourse schemaの書き方は、AI検索対策として何のためにあるんですか?

若葉さん
若葉さんの発言

あの…そもそもなんですが、Course schemaって、講座ページに何かを書き足すことなんでしょうか。

鈴木さん
鈴木さんの発言

ページの見た目は変わりません。講座案内に書いてある内容を、機械が読み取れる形でもう一度置き直す作業だと思ってください。

schema.orgは、Courseを「異なる日時・場所・媒体で提供されうる、複数の教育イベントやコンテンツからなる一連の講座」と定義しています(出典: schema.org/Course)。知識・能力・スキルの習得を目的とすることが前提です。

つまり、単発のセミナー告知や短い動画とは別のものとして扱われています。カリキュラムとしてのまとまりがあるかどうかが、境目になります。

パンフレットの項目を、語彙に置きかえます紙に書いてあることを、機械向けに置き直すだけですパンフレットの項目を、語彙に置きかえます紙に書いてあることを、機械向けに置き直すだけですパンフレットでいうとCourse schemaでいうと講座の名前nameどんな講座かの説明description主催しているスクール名provider開催日程と受講のかたちCourseInstance鈴木さん紙に載っていることを、機械にも読める場所へ置き直すだけです
パンフレットの項目を、語彙に置きかえます — 紙に書いてあることを、機械向けに置き直すだけです

そのうえで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日廃止の予告複数の機能をまとめて対象にすると告知2025年9月9日ドキュメントから削除検索結果に出ないことが理由それ以降残ったのはまとめる形だけ1ページ単位では狙えなくなった
個別コースの表示が消えるまで — 予告から削除まで、公式の記録で追えます

経緯は次のとおりです。

日付できごと
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ページにまとめた形式のどちらでも可)
コンテンツの性質講義・レッスン・モジュールを含み、明確な学習成果を伴うカリキュラムであること。一般的なイベント告知や短い動画は対象外
実装の前に、ここが揃っているか数は数えれば分かります。中身は読み直しが要ります実装の前に、ここが揃っているか数は数えれば分かります。中身は読み直しが要りますまとめられるコースが3件以上ある個別ページでも、1ページに並べた形でも構いません講義・レッスン・モジュールを含んでいる受講の中身が並んでいるか受けたら何ができるようになるかが書いてある学習の成果がはっきりしているかカルーセルのマークアップと組み合わせている単独では表示されない形です
実装の前に、ここが揃っているか — 数は数えれば分かります。中身は読み直しが要ります

数のほうは数えれば分かります。判断が要るのは、下の行です。学習成果がはっきりしているかを、自社の講座紹介文で確かめてみてください。受講したら何ができるようになるのかが書かれていなければ、まずそこが先です。

教育・スクール業界の動きは、別記事『教育・スクール業界のAIO事例』でも扱っています。

この章のまとめ

今も有効なのはCourse listだけ。条件はコース数と、カリキュラムとしての中身です。数は数えれば分かりますが、中身は読み直しが要ります。

04Course schemaの書き方で、AI検索対策として必須なのはどれですか?

Course listの必須プロパティは、name(コース名)とdescription(説明文)の2つです(出典: Google公式)。descriptionには表示上限があり、60文字までとされています。推奨プロパティは、provider(提供組織、Organization型)の1つだけです。

区分プロパティ備考
必須nameTextコースのタイトル
必須descriptionText説明文。表示上限60文字
推奨providerOrganizationコンテンツを提供する組織
Googleが見ているのは、この3つだけ少なさに驚いた方は、たぶん正しく読めていますGoogleが見ているのは、この3つだけ少なさに驚いた方は、たぶん正しく読めています必須nameコースのタイトル必須description説明文。表示は60文字まで推奨provider提供している組織を入れ子で
Googleが見ているのは、この3つだけ — 少なさに驚いた方は、たぶん正しく読めています

驚くほど少ない、と感じた方が多いかもしれません。書く量が足りているかを心配するより、この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: 修了時に得られる資格
同じCourseでも、見ている範囲がちがいます内側だけで止めても、規約から外れることはありません同じCourseでも、見ている範囲がちがいます内側だけで止めても、規約から外れることはありませんschema.orgが定義している範囲開催の回、履修の前提、修了時の資格までGoogleが推奨している範囲提供している組織までGoogleが必須にしている範囲コースの名前と、その説明
同じCourseでも、見ている範囲がちがいます — 内側だけで止めても、規約から外れることはありません

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"
        }
      }
    }
  ]
}
テンプレートは、外側から組み立てます枠から中身へ、順に手を動かせば迷いませんテンプレートは、外側から組み立てます枠から中身へ、順に手を動かせば迷いません1まとめる枠を作る一覧そのものを表す箱を、いちばん外側に置きます2並び順を振る先頭から連番で、表示したい順に並べます3中身のコースを入れるページに出ている文言と揃えて書きます
テンプレートは、外側から組み立てます — 枠から中身へ、順に手を動かせば迷いません

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」のような文字列がよく使われます。

同じ講座でも、回ごとに書き分けます変わるのは時間と場所。講座そのものは共通です同じ講座でも、回ごとに書き分けます変わるのは時間と場所。講座そのものは共通ですオンラインの回受講のかたちは online開始日で、いつ始まるかを示す受講料は開催回の中に置く会場の欄は使わない対面の回受講のかたちは onsite開催場所で、どこで行うかを示す受講料は開催回の中に置く会場が変われば、回も別になる
同じ講座でも、回ごとに書き分けます — 変わるのは時間と場所。講座そのものは共通です

対面開催などの別の回を足すときは、hasCourseInstanceの配列にCourseInstanceをもう1件加えて、courseModeとlocationを実態に合わせます。

この章のまとめ

開催回はCourseInstanceで表します。オンラインと対面のように条件が違う回は、配列に足して並べていきます。

08受講料や開始日は、Course schemaのAI検索対策でどこに置くんですか?

CourseInstanceは、Eventのサブタイプでもあります。そのためstartDate(開始日)・location(開催場所)・offers(受講料)といった、Eventが持つプロパティもそのまま使えます(出典: schema.org/CourseInstance, schema.org/Event)。

受講料は、いちばん内側に置きます講座 → 開催の回 → 受講料、と入れ子が深くなります受講料は、いちばん内側に置きます講座 → 開催の回 → 受講料、と入れ子が深くなります1講座そのもの名前と説明。ここに金額の欄はありません2開催の回受講のかたち・開始日・会場3受講料金額と通貨を、回の中に置きます鈴木さん金額を講座そのものに書いてしまう、というつまずきがよくあります
受講料は、いちばん内側に置きます — 講座 → 開催の回 → 受講料、と入れ子が深くなります
{
  "@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引用の相関』で論文の読み方まで含めて扱っています。

期待してよいことと、確認できていないこと分けて書くほうが、あとの判断がぶれません期待してよいことと、確認できていないこと分けて書くほうが、あとの判断がぶれません確認できていること講座の情報を正確に渡せる提供している組織まで結びつけられるページの表示との差に気づけるここが主な効果確認できていないことAI検索での引用が増えること断定できるデータは確認できていません
期待してよいことと、確認できていないこと — 分けて書くほうが、あとの判断がぶれません

Course schemaの主な効果は、講座情報をGoogleおよびクローラーへ正確に伝えることです。引用を取りにいく施策として位置づけると、判断がぶれます。

この章のまとめ

引用が増えると断定できるデータは確認できていません。期待してよいのは、講座情報を正確に渡せることのほうです。

11Course schemaの書き方で、AI検索最適化としてやりがちな失敗は何ですか?

最後に、実務でよく見かける失敗を3つ挙げます。どれも「よかれと思って」起きるものです。

やりがちな3つの失敗どれも、古い前提のまま進むと起きますやりがちな3つの失敗どれも、古い前提のまま進むと起きます個別コース向けの実装のまま置いてあるいまは検索結果に出てきませんコースが1〜2件しかないのに実装するまとめる形の条件を満たしていませんコース名に価格や割引の表現を入れるガイドライン違反にあたりますいま有効な形を、先に確かめるここさえ外さなければ、大きくは外れません
やりがちな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件以上まとまっているかを数えてみてください。そこが出発点になります。

今日この順でやります

  1. コースを数える

    3件以上まとまっているかを先に確かめます

  2. 必須の2つを埋める

    nameとdescription。providerも足しておきます

  3. 開催回を足すか決める

    日程や受講形式を伝えたいときにhasCourseInstanceを使います

AI検索では、こう聞かれています

  • Course schemaには何を書けばいいですか?必須の項目はどれですか?

    「Course schemaの書き方で、AI検索対策として必須なのはどれですか?」の章で、表と図解にまとめています

  • コースが1つしかない場合でも、Course schemaは使えますか?

    「よくある質問」の1つ目で答えています(結論:リッチリザルトとしては評価されません)

  • 開催回や受講料は、Course schemaのどこに書けばいいですか?

    「開催回は、Course schemaのAI対策でどこに書くんですか?」の章と、続く受講料の章に実装例があります

次に読むなら、この記事です