Guide to Hotel Schema, Structured Data and JSON LD for Hotels


Hotel Schema is a set of data that enables hotels and other related hospitality websites to embed structured data onto their sites pages, which allows search engines to clearly understand the information being presented to them.

Search engines already understand your site and the information you provide, what schema allows a hotel to do, is to filter out the noise from other information. For example: A hotel may have several phone numbers on their pages ( head office, reservations, restaurant, spa, wedding coordinator ) by marking up the correct phone number a search engine can clearly understand which information to serve to a user and when.

 

Hotel Schema

 

Within a hotels website there may also be additional sets of structured data that can be marked up ( depending on the hotel ) these could include: restaurant, day spa, event venue, reservations, book now.

The parent schema type for the hospitality / travel industry is Lodging Business, within this main property we find :

 

Hotel Schema

 

Although schema has been around for quite a few years, there is a very disjointed approach to hotel schema and what is currently supported by Google. You would assume that basic information such as a star rating would be supported or room rates, but this basic entity is unsupported at the moment. For this reason we will only include supported information.

Hotel Schema in HTML

 

<div itemscope itemtype=”http://schema.org/Hotel”>
<span itemprop=”name”> Hotel Name </span>
<link itemprop=”url” href=”http://www. your web address “>
<span itemprop=”description”> Succinct Description for Hotel </span>

<div itemprop=”address” itemscope itemtype=”http://schema.org/PostalAddress”>
<span itemprop=”streetAddress”> Street Address </span>
<span itemprop=”addressLocality”> Town </span>,
<span itemprop=”addressRegion”> County </span>
<span itemprop=”postalCode”> Post Code</span>
</div>
 
Phone: <span itemprop=”telephone”> Telephone Number </span>
Fax:<span itemprop=”faxNumber”> Fax Number </span>,
E-mail: <span itemprop=”email”> Main Email Address </span>
</div>
 
If the Hotel is part of a Brand or Member of a recognized group like Small Luxury Hotels of the World, you can add in:

<span itemprop=”member” itemscope itemtype=”http://schema.org/Organization”>
Name of Brand or Membership </span>,

If the Hotel has reviews, you can add in:

<div itemprop=”aggregateRating” itemscope itemtype=”http://schema.org/AggregateRating”>
<span itemprop=”ratingValue”> 4 </span> stars –
based on <span itemprop=”reviewCount”>250</span> reviews
</div>

 Hotel Structured Data using JSON LD

In this structured data I have included alternative names ( always handy for hotels ) and social markup.

Updated: 11/30/2016

To include: image, starRating and priceRange

 

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Hotel",
  "image": "http://cdn.theakyra.com/files/4414/7789/7663/pan_pacific_small_F002822.jpg",
  "starRating" : { "@type" : "Rating",
                   "ratingValue" : "5"},
  "priceRange" : "$100 - $300",
  "address": {
    "@type": "PostalAddress",
   "streetAddress": "88/333 Sukhumvit 55",
    "addressLocality": "North Klongton, Wattana District",
    "addressRegion": "Bangkok",
    "postalCode": "10110",
     "addressCountry": "Thailand"
  },
  
  "description": "Welcome to akyra Thonglor Bangkok: a boutique five star hotel in Bangkok",
  "name": "Akyra Thonglor Bangkok",
  "alternateName": "Akyra Bangkok Hotel",
  "logo": "http://www.theakyra.com/themes/kos/images/akyra-logo.png",
   "telephone": "+66 (0) 2 090 9000",
  "email": "fd.akt8@theakyra.com",
  "url": "http://www.theakyra.com/bangkok/",
  "sameAs" : [ "https://plus.google.com/116498834399258474401/",
    "https://www.facebook.com/akyraThonglor/"]
   
        },   
   "hasMap": "https://goo.gl/maps/2gNCxsNKbWx"
   }
  }
}
</script>

 

Hotel JSON-LD with Room Booking

In this structured data I have included room bookings and reservation actions.

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Hotel",
  "image": "http://cdn.theakyra.com/files/4414/7789/7663/pan_pacific_small_F002822.jpg",
  "starRating" : { "@type" : "Rating",
                   "ratingValue" : "5"},
  "priceRange" : "$100 - $300",
  "address": {
    "@type": "PostalAddress",
   "streetAddress": "88/333 Sukhumvit 55",
    "addressLocality": "North Klongton, Wattana District",
    "addressRegion": "Bangkok",
    "postalCode": "10110",
     "addressCountry": "Thailand"
  },
  
  "description": "Welcome to akyra Thonglor Bangkok: a boutique five star hotel in Bangkok",
  "name": "Akyra Thonglor Bangkok",
  "alternateName": "Akyra Bangkok Hotel",
  "logo": "http://www.theakyra.com/themes/kos/images/akyra-logo.png",
   "telephone": "+66 (0) 2 090 9000",
  "email": "fd.akt8@theakyra.com",
  "url": "http://www.theakyra.com/bangkok/",
  "sameAs" : [ "https://plus.google.com/116498834399258474401/",
    "https://www.facebook.com/akyraThonglor/"]
   
        },   
   "hasMap": "https://goo.gl/maps/2gNCxsNKbWx"
 },
 
  "potentialAction":{
   "@type":"ReserveAction",
   "target":{
   "@type":"EntryPoint",
   "urlTemplate":"https://www.thebookingbutton.com.au/akyra-hotels/properties/akyradirect","actionPlatform":[
   "http://schema.org/DesktopWebPlatform",
   "http://schema.org/IOSPlatform",
    "http://schema.org/AndroidPlatform"
]
},
   "result":{
   "@type":"LodgingReservation",
   "name":"Book Now"
  }
 }
}
</script>

 

Hotel JSON-LD with Review Aggregate

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Hotel",
  "image": "http://www.aleenta.com/files/4814/7763/2666/aleenta-Pool-Signature.jpg",
  "starRating" : { "@type" : "Rating",
                   "ratingValue" : "5"},
  "priceRange" : "$100 - $300",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "33 Moo 5, Takua Thung, Khok Kloi",
    "addressLocality": "Phang Nga",
    "addressRegion": "Phuket",
    "postalCode": "82140",
    "addressCountry": "Thailand"
  },
   "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.4",
    "bestRating": "5",
    "ratingCount": "43"
    },
  
  "description": "Aleenta Phuket Resort & Spa luxury boutique beach hotel, villas and residences located on Phuket's most pristine private beach in Phang Nga",
  "name": "Aleenta Phuket Resort & Spa",
  "alternateName": "Aleenta Phuket Phang Nga Resort and Spa",
  "alternateName": "Aleenta Phuket Phang Nga",
  "alternateName": "Aleenta Phuket",
  "telephone": "+66 (0) 76 580 333",
  "email": "rsvn.aph@aleenta.com",
  "url": "http://www.aleenta.com/phuket/",
  "sameAs" : [ "https://plus.google.com/+aleentaphuket",
    "https://www.facebook.com/aleenta.phuket",
    "https://www.tripadvisor.co.uk/Hotel_Review-g1951344-d607307-Reviews-Aleenta_Resort_Spa_Phuket_Phangnga-

Khok_Kloi_Takua_Thung_District_Phang_Nga_Province.html"]
    },   
   "hasMap": "https://goo.gl/maps/GTazusDV4aS2"
 },
 
  "potentialAction":{
   "@type":"ReserveAction",
   "target":{
   "@type":"EntryPoint",
   "urlTemplate":"https://www.thebookingbutton.com.au/properties/aleentaphuketdirect","actionPlatform":[
   "http://schema.org/DesktopWebPlatform",
   "http://schema.org/IOSPlatform",
    "http://schema.org/AndroidPlatform"
]
},
   "result":{
   "@type":"LodgingReservation",
   "name":"Book Now"
  }
 }
}
</script>

 

Hotel Restaurant Schema in HTML

 

<div itemscope itemtype="http://schema.org/Restaurant">
<span itemprop="name"> Name of Restaurant </span>


<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
<span itemprop="ratingValue"> 4 </span> stars -
based on <span itemprop="reviewCount">250</span> reviews


</div><div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress"> Street Address </span>
<span itemprop="addressLocality"> Town </span>,
<span itemprop="addressRegion"> County </span>
<span itemprop="postalCode"> Post Code</span>
</div>


Phone: <span itemprop="telephone"> Telephone Number </span>
E-mail: <span itemprop="email"> Main Email Address </span>
View <a itemprop=”menu” href=”http://example.com/menu”> our menu</a>.

<a itemprop="url" href="http://www.dishdash.com">www.greatfood.com</a>



Hours:
<meta itemprop="openingHours" content="Mo-Sa 11:00-14:30">Mon-Sat 11am - 2:30pm
<meta itemprop="openingHours" content="Mo-Th 17:00-21:30">Mon-Thu 5pm - 9:30pm
<meta itemprop="openingHours" content="Fr-Sa 17:00-22:00">Fri-Sat 5pm - 10:00pmCategories:
<span itemprop="servesCuisine">
British
</span>,<span itemprop="servesCuisine">
French
</span>Price Range: <span itemprop="priceRange"> £ </span>Takes Reservations: Yes
</div>

 

Restaurant JSON-LD

 

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Restaurant",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Sunnyvale",
    "addressRegion": "CA",
    "postalCode": "94086",
    "streetAddress": "1901 Lemur Ave"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4",
    "reviewCount": "250"
  },
  "name": "GreatFood",
  "openingHours": [
    "Mo-Sa 11:00-14:30",
    "Mo-Th 17:00-21:30",
    "Fr-Sa 17:00-22:00"
  ],
  "priceRange": "$$",
  "servesCuisine": [
    "Middle Eastern",
    "Mediterranean"
  ],
  "telephone": "(408) 714-1489",
  "url": "http://www.dishdash.com"
}
</script>

Restaurant JSON LD with Reservation

 

<script type="application/ld+json">
{
  "@context":"http://schema.org",
  "@type":"Restaurant",
  "@id":"http://davescafe.example.com/",
  "name":"Dave's Cafe",
  "address":{
    "@type":"PostalAddress",
    "streetAddress":"123 William St",
    "addressLocality":"New York",
    "addressRegion":"NY",
    "postalCode":"10038",
    "addressCountry":"US"
  },
  "geo":{
    "@type":"GeoCoordinates",
    "latitude":40.709312,
    "longitude":-74.007136
  },
  "telephone":"+19172423826",
  "potentialAction":{
    "@type":"ReserveAction",
    "target":{
      "@type":"EntryPoint",
      "urlTemplate":"https://www.example.com/reserve?merchantId=20373",
      "inLanguage":"en-US",
      "actionPlatform":[
        "http://schema.org/DesktopWebPlatform",
        "http://schema.org/IOSPlatform",
        "http://schema.org/AndroidPlatform"
      ]
    },
    "result":{
      "@type":"FoodEstablishmentReservation",
      "name":"Reserve table"
    }
  }
}
</script>

 

Remember to test your structured data markup with Google’s structured data testing tool. It will save you a lot of heartache before adding the structured data markup to live site.

 

Spa Schema in HTML

 

<div itemscope itemtype="http://schema.org/DaySpa">
<span itemprop="name"> Name of Spa </span>


</div><div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress"> Street Address </span>
<span itemprop="addressLocality"> Town </span>,
<span itemprop="addressRegion"> County </span>
<span itemprop="postalCode"> Post Code</span>
</div>


Phone: <span itemprop="telephone"> Telephone Number </span>
E-mail: <span itemprop="email"> Main Email Address </span>
<a itemprop="url" href="http://www.dayspa.com/dayspa">www.dayspa.com/dayspa</a>


Hours:
<meta itemprop="openingHours" content="Mo-Sa 11:00-14:30">Mon-Sat 11am - 2:30pm
<meta itemprop="openingHours" content="Mo-Th 17:00-21:30">Mon-Thu 5pm - 9:30pm
<meta itemprop="openingHours" content="Fr-Sa 17:00-22:00">Fri-Sat 5pm - 10:00pm
</div>

Hotels Social Profile in HTML

 

<span itemscope itemtype="http://schema.org/Hotel">
<a itemprop="sameAs" href="http://www.facebook.com/your-hotel">FB</a>
<a itemprop="sameAs" href="http://www.twitter.com/YourHotel">Twitter</a>
<a itemprop="sameAs" href="https://plus.google.com/+YourHotel">Google+</a>
</span>

 Day Spa JSON LD with Reservation

 

<script type="application/ld+json">
{
   "@context":"http://schema.org",
   "@type":"DaySpa",
   "@id":"http://spa.example.com/",
   "name":"Spa",
   "address":{
     "@type":"PostalAddress",
     "addressLocality": "Phang Nga",
     "addressRegion": "Phuket",
     "postalCode": "82140",
     "streetAddress": "33 Moo 5, Takua Thung, Khok Kloi",
     "addressCountry": "Thailand"
},
   "geo":{
   "@type":"GeoCoordinates",
   "latitude":40.709312,
   "longitude":-74.007136
},
   "telephone":"+19172423826",
   "potentialAction":{
   "@type":"ReserveAction",
   "target":{
   "@type":"EntryPoint",
   "urlTemplate":"https://www.example.com/reserve?merchantId=20373","actionPlatform":[
   "http://schema.org/DesktopWebPlatform",
   "http://schema.org/IOSPlatform",
    "http://schema.org/AndroidPlatform"
]
},
   "result":{
   "@type":"HealthAndBeautyReservation",
   "name":"Book Spa Treatment"
  }
 }
}
</script>

 

As Schema and Google starts supporting new structured data we will update relevant areas on this page.

 

Online Ownership Provides Hotel SEO Globally

 

One Response to Guide to Hotel Schema, Structured Data and JSON LD for Hotels

  1. Pingback: Guide to Hotel Schema and Marking Up your Hotel...