「禁煙ツインはある?」にAIが答えられない
出典: Phocuswright「Japan Travel Search Behavior 2025」、Google Search Central Blog「Structured Data Impact Report 2025」
ChatGPTやGeminiに「京都で禁煙ツインの部屋がある旅館を教えて」と聞いた時、AIが正確に答えるには、客室タイプ・広さ・ベッド構成・設備の情報が機械的に読める形で存在する必要があります。
OTAのデータベースには客室情報が構造化されていますが、あくまでOTAの情報として引用されます。公式サイトに構造化データがあれば、AI検索が一次情報として直接引用し、公式サイトへの誘導が期待できます。
この記事では、客室タイプ・料金・ベッド・設備をJSON-LDで構造化する方法を、コピペ可能なコード例付きで解説します。記事の後半には、入力するだけでコードを自動作成できるツールもあります。
HotelRoom / Suite schemaの基本構造
schema.orgでは客室を表すスキーマとしてHotelRoomとSuiteが用意されています。
| 客室タイプ | 推奨schema | 使い分けの基準 |
|---|---|---|
| 一般客室(シングル・ツイン・ダブル等) | HotelRoom | 標準的な客室はすべてこれ |
| スイートルーム | Suite | 居室とベッドルームが分かれた客室 |
| 和室・和洋室 | HotelRoom | nameとdescriptionで和室であることを明示 |
| 特別室・離れ | Suite | 独立した建物や特別仕様の客室 |
各客室タイプはHotel schemaのcontainsPlaceで紐付けます。AIが「この宿にはどんな部屋があるか」を一覧で把握できる構造です。
HotelRoomの基本実装
もっとも標準的な客室タイプの記述例です。ベッド情報、広さ、定員、設備をひとつのオブジェクトにまとめます。
// 洋室ツインルームの構造化データ
{
"@context": "https://schema.org",
"@type": "HotelRoom",
"name": "デラックスツイン(禁煙)",
"description": "36㎡の禁煙ツインルーム。高層階からの街並みビュー。シモンズ社製ベッド2台、レインシャワー・独立バスタブ完備",
"bed": {
"@type": "BedDetails",
"typeOfBed": "ツインベッド(シモンズ社製 120cm幅)",
"numberOfBeds": 2
},
"floorSize": {
"@type": "QuantitativeValue",
"value": 36,
"unitCode": "MTK"
},
"occupancy": {
"@type": "QuantitativeValue",
"maxValue": 3,
"unitText": "名"
},
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "禁煙", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "バスタブ", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "レインシャワー", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "無料Wi-Fi", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "加湿空気清浄機", "value": true }
],
"offers": {
"@type": "Offer",
"price": "18000",
"priceCurrency": "JPY",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "18000",
"priceCurrency": "JPY",
"unitText": "1泊1室(税込)"
},
"availability": "https://schema.org/InStock",
"validFrom": "2026-04-01",
"validThrough": "2026-09-30"
},
"containedInPlace": {
"@type": "Hotel",
"name": "ホテルビジネスブレーン京都",
"@id": "https://example-hotel.com/#hotel"
}
}実装のポイント
- nameに客室タイプ名と禁煙/喫煙を含める: 「デラックスツイン(禁煙)」のように。AIが「禁煙ツインのある宿」を探す時に直接マッチします
- floorSizeのunitCodeは「MTK」: 平方メートルを表すUN/CEFACT共通コードです。AIが広さの比較に使います
- occupancyで定員を明示: 「3名まで泊まれる?」の質問にAIが直接回答できます
- OfferにvalidFrom/validThroughを入れる: 料金が有効な期間を明示。季節料金がある場合は期間別に複数Offerを記述します
和室・和洋室の構造化
和室の場合、ベッド情報の代わりに布団の枚数と畳数を記述します。floorSizeは平方メートルで記載し、畳数はadditionalPropertyで補足するのが推奨です。
// 和室客室の構造化データ
{
"@context": "https://schema.org",
"@type": "HotelRoom",
"name": "和室10畳(庭園ビュー)",
"description": "純和風の10畳間。庭園に面した広縁付き。布団は最大4組敷けます。お茶セット・冷蔵庫完備",
"bed": {
"@type": "BedDetails",
"typeOfBed": "布団",
"numberOfBeds": 4
},
"floorSize": {
"@type": "QuantitativeValue",
"value": 17,
"unitCode": "MTK"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "畳数",
"value": "10畳"
},
{
"@type": "PropertyValue",
"name": "客室タイプ",
"value": "和室"
},
{
"@type": "PropertyValue",
"name": "眺望",
"value": "庭園ビュー"
}
],
"occupancy": {
"@type": "QuantitativeValue",
"maxValue": 4,
"unitText": "名"
},
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "禁煙", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "広縁", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "無料Wi-Fi", "value": true }
]
}和室特有の記述ポイント
- typeOfBedは「布団」: schema.orgの標準値にはありませんが、AIは自然言語として正確に理解します
- numberOfBedsは「最大敷ける布団の数」: 利用人数に応じて布団の枚数が変わる場合は最大数を記載
- 畳数はadditionalPropertyで補足: 外国人旅行者が「10-tatami room」で検索した時にも対応できます
- floorSizeは必ず平方メートル: 畳数だけでは面積の比較ができないため、㎡換算値も併記します
Hotel schemaとの紐付け(containsPlace)
客室タイプごとのJSON-LDを作成したら、Hotel schemaのcontainsPlaceですべての客室を紐付けます。AIが「この宿にはどんな部屋がありますか?」に一覧で回答できるようになります。
// Hotel schema に客室タイプを紐付け
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "旅館あおば",
"@id": "https://example-ryokan.com/#hotel",
"containsPlace": [
{
"@type": "HotelRoom",
"name": "和室10畳(庭園ビュー)",
"occupancy": { "@type": "QuantitativeValue", "maxValue": 4 }
},
{
"@type": "HotelRoom",
"name": "和洋室デラックス",
"occupancy": { "@type": "QuantitativeValue", "maxValue": 5 }
},
{
"@type": "Suite",
"name": "特別室「月見亭」(露天風呂付き)",
"occupancy": { "@type": "QuantitativeValue", "maxValue": 2 }
}
],
"numberOfRooms": 24,
"checkinTime": "15:00",
"checkoutTime": "11:00"
}containsPlaceには概要だけを入れ、各客室の詳細(設備・料金・ベッド情報)は個別のJSON-LDで記述します。1つのページに複数のJSON-LDスクリプトタグを配置して問題ありません。
客室の季節料金をOffer schemaで表現する
「8月の料金は?」「平日はいくら?」── 料金の質問は客室検索の核心です。季節・曜日で変動する料金をOfferで構造化する方法を解説します。
// 季節料金を複数Offerで表現
{
"@context": "https://schema.org",
"@type": "HotelRoom",
"name": "デラックスツイン(禁煙)",
"offers": [
{
"@type": "Offer",
"name": "通常期料金",
"price": "18000",
"priceCurrency": "JPY",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "18000",
"priceCurrency": "JPY",
"unitText": "1泊1室(税込)"
},
"validFrom": "2026-04-01",
"validThrough": "2026-07-17"
},
{
"@type": "Offer",
"name": "繁忙期料金(夏季)",
"price": "28000",
"priceCurrency": "JPY",
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "28000",
"priceCurrency": "JPY",
"unitText": "1泊1室(税込)"
},
"validFrom": "2026-07-18",
"validThrough": "2026-08-31"
}
],
"potentialAction": {
"@type": "ReserveAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://example-hotel.com/rooms/deluxe-twin/"
},
"result": {
"@type": "Reservation",
"name": "宿泊予約"
}
}
}料金記述のベストプラクティス
- validFrom/validThroughで期間を明示: AIが「8月の料金は?」と聞かれた時に繁忙期料金を正確に回答できる
- unitTextに「1泊1室(税込)」を明記: 1人あたりか1室あたりかが曖昧だとAIの回答も曖昧になる
- potentialActionで予約導線を設置: AIが「予約できるページはこちら」と公式サイトにリンクを張れる
- 料金更新は最低でも四半期ごと: 期限切れのOfferはAIが引用を控える可能性がある
客室設備のamenityFeature一覧
客室設備はamenityFeatureに個別で列挙します。以下は構造化しておくとAI引用に効果が高い項目の一覧です。
| カテゴリ | amenityFeature name 例 |
|---|---|
| 基本設備 | 無料Wi-Fi / エアコン / 冷蔵庫 / セーフティボックス / テレビ |
| バス・トイレ | バスタブ / シャワーブース / レインシャワー / ウォシュレット / 独立洗面台 |
| 寝具 | 低反発マットレス / シモンズベッド / 羽毛布団 / 枕メニュー |
| 眺望 | オーシャンビュー / 庭園ビュー / マウンテンビュー / シティビュー |
| 喫煙 | 禁煙 / 喫煙可 / 喫煙ブースあり |
| バリアフリー | 車椅子対応 / バリアフリー浴室 / 手すり付き |
| 和室設備 | 広縁 / 掘りごたつ / 床の間 / 障子 |
| 特別設備 | 露天風呂付き / ミニキッチン / テラス / バルコニー |
自施設の客室に該当する項目をすべてamenityFeatureとして列挙してください。「露天風呂付き客室」「バリアフリー対応の部屋」のような具体的なクエリに対して、AIが正確にマッチングできるようになります。
FAQ schemaで客室の質問を先回りする
客室に関するFAQを構造化しておくと、AIが宿泊検討者の質問に公式情報として回答します。以下は旅館・ホテルで頻出するFAQ例です。
構造化すべき客室FAQ 15項目
- 客室タイプの種類は?
- 禁煙ルームはありますか?
- 和室はありますか?何畳ですか?
- 露天風呂付き客室はありますか?
- 部屋の広さは何平米ですか?
- ベッドのサイズは?メーカーは?
- 定員は何名ですか?添い寝は可能ですか?
- バリアフリー対応の客室はありますか?
- 部屋から海(山・街並み)は見えますか?
- 客室にWi-Fiはありますか?
- 部屋にお風呂(バスタブ)はありますか?
- コネクティングルームはありますか?
- ペットと泊まれる部屋はありますか?
- 冷蔵庫・電子レンジはありますか?
- チェックイン・チェックアウトの時間は?
これらをFAQPage schemaで記述し、公式サイトの客室紹介ページに埋め込みます。すべてを1つのFAQPageにまとめる必要はなく、客室タイプ別のページにそれぞれ関連するFAQを5件程度設定するのが効果的です。
実装の優先順位
客室の構造化データもすべてを一度に実装する必要はありません。効果が出やすい順に進めましょう。
- Week 1: 代表客室タイプのHotelRoom schema作成 — 最も予約の多い2〜3タイプだけ。name・bed・floorSize・amenityFeatureが最低限
- Week 2: Hotel schemaのcontainsPlaceに客室を追加 — 既存のHotel schemaに全客室タイプの一覧を紐付け
- Week 3: Offer schemaで料金を追加 — 通常期の料金だけでOK。季節料金は後から追加
- Month 2: 全客室タイプの詳細を完成 — 和室・スイート含む全タイプの個別JSON-LDを作成
- Month 2: FAQ schemaで客室質問に対応 — 上記15項目から自施設に該当する8〜10件を実装
- Month 3: 季節料金の複数Offer化 — 繁忙期・閑散期の料金を分けて記述
Week 1の作業は、既存の客室紹介ページの情報をJSON-LDに変換するだけです。新たに情報を作る必要はなく、すでに掲載されている内容を構造化するだけで効果が出ます。
実装後の確認にはGoogle リッチリザルトテストとSchema.org Validatorを使います。エラーが0件であれば、AIも正しく読み取れる状態です。
このコードを公式サイトの <head> タグ内に貼り付けてください
