「朝食バイキングは何時から?」にAIが答えられない理由
出典: Phocuswright「Japan Travel Search Behavior 2025」、Google Search Central Blog「Structured Data Impact Report 2025」
ChatGPTやGeminiに「京都で朝食が美味しいホテルは?」と聞いた時、AIは公式サイト、OTA、口コミを横断して回答を組み立てます。しかし、最も確実に拾えるのが構造化データです。レストラン名、営業時間、メニュー内容がJSON-LDで記述されていれば、AIは推測ではなく事実として引用できます。
現実には、ほとんどのホテル・旅館の公式サイトでは「朝食 7:00〜9:30」「和洋バイキング」といった情報がHTMLテキストとして埋もれています。AIにとっては長い文章の中から該当箇所を探すしかなく、取りこぼしや誤認が頻発します。
この記事では、館内レストラン・朝食・メニュー情報をAIが確実に読める形で構造化する方法を、コピペ可能なJSON-LDコード例と自動作成ツール付きで解説します。
schema.orgでレストラン情報を表現する方法
館内レストランの構造化には、施設の形態によって適切なschemaが異なります。
| 施設形態 | 推奨schema | 使い分けの基準 |
|---|---|---|
| 一般的な館内レストラン | Restaurant | 独立した飲食店舗として機能している |
| 宴会場・多目的ダイニング | FoodEstablishment | レストラン以外の用途(宴会・会議等)も兼ねる |
| バー・ラウンジ | BarOrPub | 飲料中心の営業形態 |
| カフェ・ティーラウンジ | CafeOrCoffeeShop | 軽食・喫茶中心 |
多くのホテルではRestaurantが最適です。和食処・鉄板焼き・ビュッフェレストランなど、料理ジャンルが明確に分かれた店舗がある場合は、それぞれ別のRestaurantエンティティとして記述します。宴会場と食事処を兼ねる場合のみFoodEstablishmentを使ってください。
Restaurant schemaの基本実装
館内レストランの基本情報をRestaurant schemaで記述します。servesCuisineで料理ジャンルを明示し、openingHoursSpecificationで営業時間を構造化するのがポイントです。
// 館内レストランの基本情報
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "日本料理 花月",
"description": "地元の旬の食材を活かした会席料理と季節の懐石コース。個室あり(要予約)。朝食は和定食またはビュッフェ形式で提供",
"servesCuisine": ["日本料理", "懐石", "和食"],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "07:00",
"closes": "09:30",
// 朝食
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "11:30",
"closes": "14:00",
// ランチ
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "17:30",
"closes": "21:00",
// ディナー
}
],
"hasMenu": "https://example-hotel.com/restaurant/menu/",
"acceptsReservations": "True",
"priceRange": "¥¥¥",
"address": {
"@type": "PostalAddress",
"addressLocality": "京都市東山区",
"addressRegion": "京都府",
"addressCountry": "JP"
}
}実装のポイント
- servesCuisineは複数記述可: 「日本料理」「懐石」「和食」のように具体的な料理ジャンルを配列で記述。AIが「懐石料理が食べられるホテル」のようなクエリに反応します
- openingHoursSpecificationは食事タイプ別に分ける: 朝食・ランチ・ディナーでそれぞれ別エントリ。「朝食は何時から?」に正確に回答できます
- hasMenuでメニューページにリンク: メニュー詳細ページのURLを指定。Menu schemaで別途構造化する場合は@idで紐付けます
- acceptsReservationsを明記: 予約の可否は頻出クエリ。「True」で予約可能であることをAIに伝えます
Menu + MenuSection + MenuItem schemaの実装
レストランの情報だけでなく、メニューの中身まで構造化すると「このホテルではどんな料理が食べられるか」にAIが具体的に回答できるようになります。Menu schemaはMenuSection(食事カテゴリ)とMenuItem(個々の料理)の階層構造で記述します。
// メニュー全体の構造化(朝食・ランチ・ディナー)
{
"@context": "https://schema.org",
"@type": "Menu",
"name": "日本料理 花月 メニュー",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "朝食メニュー",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "和朝食膳",
"description": "焼き魚、出汁巻き卵、小鉢三種、味噌汁、ご飯、漬物",
"offers": {
"@type": "Offer",
"price": "3500",
"priceCurrency": "JPY"
}
},
{
"@type": "MenuItem",
"name": "朝食ビュッフェ",
"description": "和洋50種以上。地元野菜のサラダバー、焼きたてパン、おばんざいコーナーあり",
"offers": {
"@type": "Offer",
"price": "4000",
"priceCurrency": "JPY"
}
}
]
},
{
"@type": "MenuSection",
"name": "ランチメニュー",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "季節の御膳",
"description": "前菜、お造り、焼物、煮物、ご飯、デザート",
"offers": {
"@type": "Offer",
"price": "5500",
"priceCurrency": "JPY"
}
}
]
},
{
"@type": "MenuSection",
"name": "ディナーメニュー",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "懐石コース「雅」",
"description": "先付、八寸、お造り、焼物、強肴、食事、水菓子の全7品",
"offers": {
"@type": "Offer",
"price": "15000",
"priceCurrency": "JPY"
}
},
{
"@type": "MenuItem",
"name": "特選懐石コース「花」",
"description": "A5黒毛和牛と旬の鮮魚を中心にした全9品の特別懐石",
"offers": {
"@type": "Offer",
"price": "25000",
"priceCurrency": "JPY"
}
}
]
}
]
}メニュー構造化のポイント
- 全品目を列挙する必要はない: 各MenuSectionから代表的なMenuItemを3〜5品選んで記述すれば十分です。季節替わりで頻繁に変わる場合は、通年提供のメニューを優先してください
- descriptionに食材と調理法を書く: 「A5黒毛和牛」「地元産の旬野菜」のような具体的な食材名は、AIが食材で検索された時の引用精度を高めます
- offersで価格を明示: 「いくらぐらい?」は頻出クエリ。税込み価格をOfferで構造化してください
Hotel schemaからレストランを紐付ける
Restaurant schemaを単独で記述しただけでは、AIがそのレストランとホテルの関係を把握できない場合があります。Hotel schemaからdepartmentで紐付けることで、「このホテルの中にこのレストランがある」という関係を明確にします。
// Hotel schemaからレストランを紐付ける
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "ホテル京都花園",
"@id": "https://example-hotel.com/#hotel",
"department": [
{
"@type": "Restaurant",
"name": "日本料理 花月",
"servesCuisine": ["日本料理", "懐石"],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "07:00",
"closes": "09:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "17:30",
"closes": "21:00"
}
]
},
{
"@type": "Restaurant",
"name": "鉄板焼 京(みやこ)",
"servesCuisine": ["鉄板焼", "ステーキ"],
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "17:00",
"closes": "21:30"
}
]
}
],
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "朝食ビュッフェ", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "ルームサービス", "value": true }
]
}紐付けの使い分け
- department: レストランがホテルの「部門」として運営されている場合に使用。最も一般的なパターン
- containedInPlace: レストラン側からホテルを参照する場合に使用。テナントとして入居している外部レストランに適切
- amenityFeature: 「朝食ビュッフェ」「ルームサービス」のように施設のサービスとして列挙する場合。departmentと併用を推奨
朝食ビュッフェ・ルームサービスの構造化
「朝食付きのホテルはある?」「ルームサービスは何時まで?」は宿泊予約時の頻出クエリです。朝食ビュッフェやルームサービスの料金・提供時間をOffer schemaで構造化すると、AIが直接回答できるようになります。
// 朝食ビュッフェの料金・提供時間を構造化
{
"@context": "https://schema.org",
"@type": "Offer",
"name": "朝食ビュッフェ",
"description": "和洋50種以上のビュッフェ。地元野菜のサラダバー、シェフが目の前で焼くオムレツ、焼きたてクロワッサン、京のおばんざいコーナーあり。宿泊者以外も利用可",
"price": "4000",
"priceCurrency": "JPY",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "4000",
"priceCurrency": "JPY",
"unitText": "1名",
"description": "大人1名。小学生2,000円、幼児無料"
},
"availability": "https://schema.org/InStock",
"availabilityStarts": "07:00",
"availabilityEnds": "09:30",
"seller": {
"@type": "Hotel",
"name": "ホテル京都花園",
"@id": "https://example-hotel.com/#hotel"
}
}ルームサービスがある場合は、Hotel schemaのamenityFeatureに「ルームサービス」を追加し、対応時間と料金レンジをOfferで記述します。深夜対応(例: 23:00〜翌6:00)がある場合は、その時間帯を明記すると「深夜に食事ができるホテル」というクエリに刺さります。
インバウンド対応:英語でのMenu記述
「hotel with good breakfast in Kyoto」「Japanese kaiseki dinner at ryokan」 -- 訪日外国人は英語で館内レストランを検索します。英語版ページには英語のJSON-LDを用意し、アレルギー情報を含めると引用精度が大幅に向上します。
// English menu with allergen info for inbound travelers
{
"@context": "https://schema.org",
"@type": "Menu",
"name": "Kagetsu Japanese Restaurant Menu",
"inLanguage": "en",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "Dinner - Kaiseki Course",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "Kaiseki Course 'Miyabi' (7 courses)",
"description": "Seasonal appetizer, sashimi, grilled dish, simmered dish, rice, and dessert. Features locally sourced Kyoto vegetables and fresh seafood",
"offers": {
"@type": "Offer",
"price": "15000",
"priceCurrency": "JPY"
},
"suitableForDiet": [
"https://schema.org/GlutenFreeDiet"
],
"nutrition": {
"@type": "NutritionInformation",
"description": "Contains: fish, soy, wheat (soy sauce). Gluten-free option available on request"
}
},
{
"@type": "MenuItem",
"name": "Vegetarian Kaiseki Course (7 courses)",
"description": "Plant-based kaiseki using seasonal Kyoto vegetables, tofu, and Buddhist temple cuisine techniques",
"offers": {
"@type": "Offer",
"price": "13000",
"priceCurrency": "JPY"
},
"suitableForDiet": [
"https://schema.org/VegetarianDiet",
"https://schema.org/GlutenFreeDiet"
]
}
]
}
]
}英語メニュー記述のポイント
- 料理名はローマ字併記: 「Kaiseki Course」「Wagyu Teppanyaki」のように英訳+日本語ローマ字。外国人旅行者は「kaiseki」「wagyu」で検索します
- suitableForDietでアレルギー・食事制限を明示: VegetarianDiet、VeganDiet、GlutenFreeDiet、HalalDiet等。「vegetarian-friendly hotel in Kyoto」で拾われる重要な構造化項目
- nutritionのdescriptionにアレルゲンを記載: 「Contains: fish, soy, wheat」のように主要アレルゲンを英語で明記。インバウンド客の最重要確認事項です
- inLanguageを指定: Menu全体の言語を明示することで、AIが言語別にメニュー情報を適切に引用します
FAQ schemaでレストラン質問に答える
レストラン・朝食に関するFAQをschema化しておくと、AIが質問に対して正確な一次情報として引用します。以下はホテル・旅館で頻出するFAQ例です。
構造化すべきレストランFAQ 15項目
- 朝食の時間と場所は?
- 朝食はビュッフェ形式ですか?
- 朝食の料金はいくらですか?
- レストランは宿泊者以外も利用できますか?
- ディナーは予約が必要ですか?
- アレルギー対応はしていますか?
- ベジタリアン・ヴィーガンメニューはありますか?
- 子供向けメニューはありますか?
- ルームサービスは何時まで利用できますか?
- 個室のあるレストランはありますか?
- ハラール対応のメニューはありますか?
- レストランのドレスコードはありますか?
- 地元の名物料理は食べられますか?
- 誕生日・記念日のサプライズ対応はできますか?
- レストランの英語メニューはありますか?
これらをFAQPage schemaとして記述し、公式サイトのFAQページとレストラン紹介ページの両方に埋め込みます。記事冒頭のJSON-LD(<head>内)に5件程度、各ページの内容に合わせたFAQを設定するのが推奨です。
実装の優先順位
すべてを一度に実装する必要はありません。効果が出やすい順に段階的に進めます。
- Week 1: Restaurant schemaの基本実装 -- レストラン名、servesCuisine、openingHoursSpecificationを記述。最小工数で最大効果
- Week 1: Hotel schemaからのdepartment紐付け -- 既存のHotel schemaにdepartmentを追加するだけ。Restaurant schemaと同時に実装
- Week 2: Menu schemaの実装 -- 各食事タイプから代表メニュー3〜5品を構造化。朝食メニューを優先
- Week 3: FAQ schemaのレストラン版 -- 上記15項目から自施設に該当する8〜10件を選んで実装
- Month 2: 朝食ビュッフェ・ルームサービスのOffer schema -- 料金・提供時間を構造化
- Month 3: 英語版Menu JSON-LDの作成 -- インバウンド対応。アレルギー情報・食事制限情報を含める
Week 1のRestaurant schema基本実装は、既存のJSON-LDに数十行足すだけで完了します。CMS管理画面から編集できる場合は1時間で実装可能です。コード編集が必要な場合はWeb制作会社に依頼してください。
実装後の確認にはGoogle リッチリザルトテストとSchema.org Validatorを使います。エラーが0件であれば、AIも正しく読み取れる状態です。
各食事タイプの代表メニューを追加してください(任意)
このコードを公式サイトの <head> タグ内に貼り付けてください
