「近くに観光地ある?」にAIが答えられない理由
出典: Phocuswright「Japan Travel Search Behavior 2025」、Google Search Central Blog「Structured Data Impact Report 2025」
ChatGPTやGeminiに「京都駅近くで観光地が歩いて行ける宿はある?」と聞いた時、AIは施設の公式サイト・OTA・口コミを横断して回答を組み立てます。しかし、周辺観光スポットの情報がHTMLの文章中に埋もれていると、AIは位置関係や距離感を正確に把握できません。
多くの施設サイトには「周辺観光」ページがありますが、そこに書かれた情報は人間向けのテキストと写真だけ。スポット名、所在地、施設からの距離、営業時間といった情報が構造化されていないため、AIが「徒歩圏内の観光地がある宿」として推薦するための根拠データが不足しています。
この記事では、TouristAttraction schemaを使って周辺観光地の情報をAIが確実に読める形で構造化する方法を、コピペ可能なJSON-LDコード例付きで解説します。
schema.orgで観光地を表現する方法
周辺観光スポットの構造化には、スポットの種類によって最適なschemaが異なります。
| 観光スポットの種類 | 推奨schema | 使い分けの基準 |
|---|---|---|
| 一般的な観光名所 | TouristAttraction | 神社仏閣・景勝地・テーマパーク等、幅広い観光スポット |
| 歴史的建造物・史跡 | LandmarksOrHistoricalBuildings | 城郭・古墳・重要文化財指定建造物 |
| 公園・庭園 | Park | 国立公園・都市公園・日本庭園 |
| 博物館・美術館 | Museum | 常設展示がある施設 |
| 海水浴場・ビーチ | Beach | 海辺のレジャースポット |
| スキー場 | SkiResort | 冬季スポーツ施設 |
TouristAttractionは最も汎用的なschemaで、上記のサブタイプに該当しない観光スポットすべてに使えます。迷ったらTouristAttractionを選べば間違いありません。サブタイプが明確な場合(城=LandmarksOrHistoricalBuildings、公園=Park等)はより具体的なschemaを使うことで、AIの分類精度が上がります。
TouristAttraction schemaの基本実装
まずは単独のTouristAttractionの記述方法です。緯度経度・営業時間・入場料など、AIが回答に使いやすい情報をすべて盛り込みます。
// 周辺観光地を TouristAttraction で記述
{
"@context": "https://schema.org",
"@type": "TouristAttraction",
"name": "清水寺",
"description": "778年創建の世界遺産。「清水の舞台」で知られる本堂からは京都市街を一望できる。桜と紅葉の名所としても有名",
"geo": {
"@type": "GeoCoordinates",
"latitude": "34.9949",
"longitude": "135.7850"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "1-294 清水",
"addressLocality": "京都市東山区",
"addressRegion": "京都府",
"postalCode": "605-0862",
"addressCountry": "JP"
},
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "06:00",
"closes": "18:00"
},
"isAccessibleForFree": false,
"touristType": ["Cultural", "Historical", "Sightseeing"],
"image": "https://example-ryokan.com/images/kiyomizu.jpg",
"url": "https://www.kiyomizudera.or.jp/"
}実装のポイント
- geoに緯度経度を必ず書く: AIが施設との距離を計算する根拠になります。Google Mapsで対象スポットを右クリック→座標をコピーすれば取得できます
- touristTypeでカテゴリを明示: 「Cultural」「Historical」「Nature」「Adventure」など、観光客の検索意図に合致するキーワードを入れます
- isAccessibleForFreeで入場料の有無: 無料の公園はtrue、有料施設はfalse。AIが「無料で行ける観光地」の質問に正確に回答できます
- openingHoursSpecificationで営業時間: 季節によって変動する場合は、validFromとvalidThroughで期間を指定します
施設から観光地への距離・アクセスを構造化する
TouristAttractionの単独記述だけでは「この宿から近い」という情報がAIに伝わりません。Hotel schemaから周辺スポットを紐付ける記述が必要です。
// ホテルから周辺観光地への紐付け
{
"@context": "https://schema.org",
"@type": "Hotel",
"name": "京都グランドホテル",
"@id": "https://example-hotel.com/#hotel",
"geo": {
"@type": "GeoCoordinates",
"latitude": "34.9985",
"longitude": "135.7780"
},
"description": "清水寺まで徒歩15分、八坂神社まで徒歩10分、祇園まで徒歩8分。京都観光の拠点に最適な立地",
"amenityFeature": [
{ "@type": "LocationFeatureSpecification",
"name": "観光案内デスク",
"value": true },
{ "@type": "LocationFeatureSpecification",
"name": "レンタサイクル",
"value": true }
],
"containsPlace": [
{
"@type": "TouristAttraction",
"name": "清水寺",
"description": "世界遺産。当館から徒歩15分(約1.2km)。タクシー5分",
"geo": {
"@type": "GeoCoordinates",
"latitude": "34.9949",
"longitude": "135.7850"
},
"touristType": ["Cultural", "Historical"]
},
{
"@type": "LandmarksOrHistoricalBuildings",
"name": "八坂神社",
"description": "祇園祭の総本社。当館から徒歩10分(約800m)",
"geo": {
"@type": "GeoCoordinates",
"latitude": "35.0036",
"longitude": "135.7785"
},
"touristType": ["Cultural", "Historical"]
},
{
"@type": "Park",
"name": "円山公園",
"description": "桜の名所。枝垂桜のライトアップが有名。当館から徒歩12分",
"geo": {
"@type": "GeoCoordinates",
"latitude": "35.0038",
"longitude": "135.7812"
},
"isAccessibleForFree": true,
"touristType": ["Nature", "Sightseeing"]
}
]
}距離情報の記述ルール
- descriptionに距離と所要時間を明記: schema.orgには施設間の距離を表すプロパティがないため、「当館から徒歩15分(約1.2km)」のようにdescriptionで補います
- geo座標を必ず両方に入れる: Hotel側とTouristAttraction側の両方にgeoがあれば、AIが距離を自動計算できます
- containsPlaceで近隣スポットを列挙: AIが「この宿の周辺にある観光地」を一覧で把握できます
- アクセス手段を複数記載: 徒歩・タクシー・バスなど、移動手段ごとの所要時間があると回答精度が上がります
周辺観光モデルコースの構造化
「1日で回れるおすすめコースは?」という質問にAIが答えるには、スポットを順序付きで構造化する必要があります。ItemListを使って観光モデルコースを表現します。
// 周辺観光モデルコースをItemListで構造化
{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "京都東山半日観光コース",
"description": "当館を起点に徒歩で回れる東山エリアの半日コース。所要約4時間",
"numberOfItems": 4,
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "TouristAttraction",
"name": "八坂神社",
"description": "出発。境内参拝30分。朝の静かな時間帯がおすすめ"
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "TouristAttraction",
"name": "ねねの道・二年坂",
"description": "風情ある石畳の小路。土産物店・甘味処が並ぶ。散策40分"
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "TouristAttraction",
"name": "清水寺",
"description": "世界遺産。本堂・清水の舞台・音羽の滝を巡る。参拝60分"
}
},
{
"@type": "ListItem",
"position": 4,
"item": {
"@type": "TouristAttraction",
"name": "祇園花見小路",
"description": "京都を代表する花街。夕方は舞妓さんに出会えることも。散策30分"
}
}
]
}TouristTripを使って旅程全体を1つのエンティティとして表現する方法もあります。TouristTripはitineraryプロパティでItemListを内包でき、touristTypeでコースのターゲット層を示せます。ただし、現時点ではItemListの方がAI検索エンジンの対応が広いため、まずItemListで実装するのが実用的です。
季節限定の観光スポット対応
桜・紅葉・花火大会など、季節によって価値が大きく変わる観光スポットは、TouristAttractionにEvent schemaを組み合わせて時期を明示します。
// 季節限定の観光イベントをEventで紐付け
{
"@context": "https://schema.org",
"@type": "TouristAttraction",
"name": "嵐山",
"description": "渡月橋を中心とした景勝地。春の桜、秋の紅葉、冬の花灯路と四季折々の景観が楽しめる",
"geo": {
"@type": "GeoCoordinates",
"latitude": "35.0094",
"longitude": "135.6778"
},
"event": [
{
"@type": "Event",
"name": "嵐山 桜の見頃",
"startDate": "2026-03-25",
"endDate": "2026-04-10",
"description": "渡月橋周辺のソメイヨシノが満開。中之島公園でのお花見も人気",
"location": {
"@type": "Place",
"name": "嵐山 渡月橋周辺"
},
"isAccessibleForFree": true
},
{
"@type": "Event",
"name": "嵐山 紅葉の見頃",
"startDate": "2026-11-10",
"endDate": "2026-12-05",
"description": "嵐山全体が赤・黄・橙に染まる。常寂光寺・天龍寺の紅葉が特に見事",
"location": {
"@type": "Place",
"name": "嵐山一帯"
},
"isAccessibleForFree": true
},
{
"@type": "Event",
"name": "嵐山花灯路",
"startDate": "2026-12-12",
"endDate": "2026-12-21",
"description": "竹林の小径と渡月橋がライトアップされる冬の風物詩。17:00点灯",
"location": {
"@type": "Place",
"name": "嵐山 竹林の小径〜渡月橋"
},
"isAccessibleForFree": true
}
]
}季節対応のポイント
- startDateとendDateで見頃期間を指定: AIが「11月に京都で紅葉が見える宿」のような季節条件付きクエリに対応できます
- 毎年更新する: 日付は年度ごとに変わります。開花予想や主催者発表に合わせて更新してください
- 花火大会は単発Event: startDateとendDateを同日に設定し、startTimeとendTimeで時間を指定します
- TouristAttraction側のdescriptionにも季節情報を含める: Eventを読まないAIエンジンへのフォールバックとして機能します
インバウンド対応:英語での観光地記述
「temple near hotel in Kyoto」「best sightseeing spots near ryokan」── 訪日外国人は英語で観光地情報を検索します。英語版ページには英語のJSON-LDを用意し、日本語版とhreflangで紐付けます。
// English version for inbound travelers
{
"@context": "https://schema.org",
"@type": "TouristAttraction",
"name": "Kiyomizu-dera Temple",
"alternateName": "清水寺",
"description": "UNESCO World Heritage Site founded in 778. Famous for its wooden terrace offering panoramic views of Kyoto. A 15-minute walk from our hotel. Cherry blossoms in spring, vibrant autumn foliage",
"geo": {
"@type": "GeoCoordinates",
"latitude": "34.9949",
"longitude": "135.7850"
},
"touristType": ["Cultural", "Historical", "UNESCO World Heritage"],
"isAccessibleForFree": false,
"availableLanguage": ["ja", "en", "zh", "ko"],
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
"opens": "06:00",
"closes": "18:00"
}
}英語記述のポイント
- alternateNameに日本語名を併記: 「Kiyomizu-dera Temple」をnameに、「清水寺」をalternateNameに。ローマ字で検索する外国人旅行者にも対応
- touristTypeは英語で統一: 「Cultural」「Historical」「Nature」「Adventure」「Food」「Shopping」など。AI検索エンジンの内部分類と一致しやすくなります
- availableLanguageで多言語対応状況を明示: 英語の音声ガイドや中国語のパンフレットがある場合は、対応言語をすべて列挙します
- descriptionに施設からの距離を英語で含める: 「A 15-minute walk from our hotel」のように、施設との位置関係を英語で記載します
FAQ schemaで周辺観光の質問に答える
周辺観光に関するFAQをschema化しておくと、AIが旅行者の質問に対して御施設の情報を引用して回答します。以下は施設の周辺観光ページで頻出するFAQ例です。
構造化すべき周辺観光FAQ 12項目
- ホテルから一番近い観光地はどこですか?
- 徒歩で行ける観光スポットはありますか?
- おすすめの観光モデルコースを教えてください
- 周辺で子供が楽しめるスポットはありますか?
- 雨の日でも楽しめる観光地はありますか?
- 紅葉(桜)の見頃はいつですか?
- 夜に行けるおすすめのスポットはありますか?
- ホテルから観光地への送迎はありますか?
- 観光地へのアクセス方法を教えてください
- レンタサイクルで回れるスポットはありますか?
- 早朝に行ける観光地はありますか?
- ホテルで観光地のチケットを購入できますか?
これらをFAQPage schemaとして記述し、公式サイトの周辺観光ページに埋め込みます。記事冒頭のJSON-LD(<head>内)に5件程度、ページ内容に合わせたFAQを設定するのが推奨です。
実装の優先順位
すべてを一度に実装する必要はありません。効果が出やすい順に段階的に進めます。
- Week 1: Hotel schemaのcontainsPlaceに主要3スポット追加 -- 既存のHotel schemaに最寄りの観光地を3件追加するだけ。descriptionに距離を書き、geoを入れる。最小工数で最大効果
- Week 2: 各スポットの単独TouristAttraction作成 -- 営業時間・入場料・touristTypeを含む詳細なJSON-LDを周辺観光ページに設置
- Week 3: FAQ schemaの観光版 -- 上記12項目から自施設に該当する6〜8件を選んで実装
- Month 2: 季節イベントのEvent追加 -- 桜・紅葉・花火など、季節で変動するスポットにEventを紐付け
- Month 2: モデルコースのItemList作成 -- 半日コース・1日コースなど、テーマ別に2〜3コース
- Month 3: 英語版JSON-LDの作成 -- インバウンド対応。英語ページがある施設から
Week 1のcontainsPlace追加は、既存のJSON-LDに数行足すだけで完了します。CMS管理画面から編集できる場合は30分で実装可能です。コード編集が必要な場合はWeb制作会社に依頼してください。
実装後の確認にはGoogle リッチリザルトテストとSchema.org Validatorを使います。エラーが0件であれば、AIも正しく読み取れる状態です。
このコードを公式サイトの <head> タグ内に貼り付けてください
