Your property has world-class amenities, Michelin-starred dining, and exceptional service. But when AI engines search for luxury resorts, they can’t find you.
The problem isn’t your content. It’s how your content is structured.
AI engines like ChatGPT, Claude, and Perplexity often use machine-readable data in specific formats. Schema.org provides the vocabulary. JSON-LD provides the format. Together, they make your property discoverable, understandable, and recommendable to AI.
This guide shows you exactly how to implement schema.org markup for luxury hospitality properties.
Why Schema.org Matters for AI Discoverability
Traditional web content is written for humans. Paragraphs describe your spa. Photos show your accommodations. Reviews praise your service.
AI engines can process this content, but they can’t trust it. Is that “luxury spa” actually a spa? Does “ocean view” mean beachfront or distant glimpse? Are those reviews verified?
Schema.org solves this by providing explicit, structured information in standardized vocabulary that machines understand and trust.
What schema.org does:
- Identifies what things ARE (this is a resort, this is a restaurant, this is a review)
- Describes attributes explicitly (5-star rating, 250 rooms, oceanfront location)
- Establishes relationships (this restaurant is part of this resort)
- Provides proof signals (verified reviews, awards, certifications)
When you implement schema.org properly, AI engines don’t guess about your property. They know.
The Core Schema Types for Luxury Resorts
Schema.org offers hundreds of types. Multi-property luxury resort groups need to focus on nine core schemas that work together, starting with the parent organization.
1. Organization Schema
The foundation for multi-property resort groups. This represents your parent company or brand, with individual properties linking back to it.
Essential properties:
@type: Organization@id: Unique identifier (typically your homepage URL)name: Company/brand namedescription: Brand descriptionurl: Company websitelogo: Brand logo as ImageObjectsameAs: Social media profiles (array)
Recommended properties:
foundingDate: When company was foundednumberOfEmployees: Company sizeaddress: Corporate headquarters addresscontactPoint: Customer service contact informationaward: Brand-level awards and recognition
Example for multi-property resort group:
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.grandviewresorts.com",
"name": "Grandview Luxury Resorts",
"description": "A collection of luxury oceanfront resorts offering world-class hospitality, dining, and wellness experiences across premier destinations.",
"url": "https://www.grandviewresorts.com",
"logo": {
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/logo.png",
"width": 400,
"height": 100
},
"foundingDate": "1985",
"sameAs": [
"https://www.facebook.com/grandviewresorts",
"https://www.instagram.com/grandviewresorts",
"https://www.linkedin.com/company/grandviewresorts"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "500 Executive Plaza",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94104",
"addressCountry": "US"
},
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+1-800-555-0100",
"contactType": "customer service",
"availableLanguage": ["English", "Spanish", "French"]
}
}
Why this matters for multi-property groups:
Each individual resort property will reference this Organization using parentOrganization, creating a clear brand hierarchy that AI engines understand. This helps with brand recognition and ensures all properties benefit from brand-level authority and awards.
2. Resort Schema
Individual property markup. Each resort in your portfolio gets its own schema, always linked to the parent Organization.
Essential properties:
@type: Resort@id: Stable URL identifier for this specific propertyname: Property namedescription: Property descriptionaddress: Full postal addresstelephone: Property contact numberurl: Property websiteparentOrganization: Link to parent Organization (critical for multi-property groups)
Recommended properties:
image: Property photos as ImageObject arraylogo: Property logo as ImageObjectsameAs: Social media and authoritative profilesgeo: Geographic coordinateshasMap: Link to mappriceRange: Indicative pricing (e.g., “$$$”)starRating: Official star ratingnumberOfRooms: Total room countamenityFeature: Simple property features (WiFi, pool, parking, etc.)containsPlace: Major venues with their own entities (restaurants, spas, golf courses, rooms)checkinTime: Standard check-in timecheckoutTime: Standard check-out timepetsAllowed: Pet policysmokingAllowed: Smoking policyavailableLanguage: Languages spoken at propertypaymentAccepted: Payment methodscurrenciesAccepted: Accepted currenciescontactPoint: Array of contact points for different departments
Important distinction:
- Use
amenityFeaturefor simple features that don’t have their own entities (WiFi, pool, fitness center, parking) - Use
containsPlacefor major venues that have their own full schema markup (restaurants, spas, golf courses) - Don’t list the same venue in both places
Example structure with all recommended properties:
{
"@context": "https://schema.org",
"@type": "Resort",
"@id": "https://www.grandviewresorts.com/carmel",
"name": "Grandview Resort Carmel",
"description": "Luxury oceanfront resort in Carmel offering world-class dining, spa services, and championship golf with stunning Pacific Ocean views.",
"url": "https://www.grandviewresorts.com/carmel",
"sameAs": [
"https://www.facebook.com/grandviewcarmel",
"https://www.instagram.com/grandviewcarmel",
"https://maps.google.com/?cid=1234567890"
],
"image": [
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/property-aerial.jpg",
"width": 2000,
"height": 1333,
"caption": "Aerial view of Grandview Resort Carmel oceanfront property"
},
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/lobby.jpg",
"width": 2000,
"height": 1333,
"caption": "Grand lobby with ocean views"
}
],
"logo": {
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/carmel-logo.png",
"width": 400,
"height": 100
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "36.5553",
"longitude": "-121.9233"
},
"hasMap": "https://www.google.com/maps/place/Carmel-by-the-Sea,+CA",
"parentOrganization": {
"@id": "https://www.grandviewresorts.com"
},
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Coastal Highway",
"addressLocality": "Carmel",
"addressRegion": "CA",
"postalCode": "93923",
"addressCountry": "US"
},
"telephone": "+1-831-555-0100",
"numberOfRooms": 250,
"priceRange": "$$$",
"starRating": {
"@type": "Rating",
"ratingValue": "5"
},
"checkinTime": "16:00",
"checkoutTime": "11:00",
"petsAllowed": true,
"smokingAllowed": false,
"paymentAccepted": ["Cash", "Credit Card", "Debit Card"],
"currenciesAccepted": "USD",
"availableLanguage": ["English", "Spanish", "French"],
"contactPoint": [
{
"@type": "ContactPoint",
"contactType": "reservations",
"telephone": "+1-831-555-0100",
"email": "reservations@grandviewcarmel.com",
"availableLanguage": ["English", "Spanish", "French"]
},
{
"@type": "ContactPoint",
"contactType": "weddings",
"telephone": "+1-831-555-0125",
"email": "weddings@grandviewcarmel.com",
"availableLanguage": ["English", "Spanish"]
},
{
"@type": "ContactPoint",
"contactType": "spa",
"telephone": "+1-831-555-0150",
"email": "spa@grandviewcarmel.com",
"availableLanguage": ["English", "Spanish", "French"]
},
{
"@type": "ContactPoint",
"contactType": "golf",
"telephone": "+1-831-555-0175",
"email": "golf@grandviewcarmel.com",
"availableLanguage": ["English"]
}
],
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Swimming Pool",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Beach Access",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Fitness Center",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Free WiFi",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Valet Parking",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Concierge Service",
"value": true
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "1247",
"bestRating": "5",
"worstRating": "1"
},
"containsPlace": [
{"@id": "https://www.grandviewresorts.com/carmel/rooms/ocean-view-suite"},
{"@id": "https://www.grandviewresorts.com/carmel/rooms/deluxe-king"},
{"@id": "https://www.grandviewresorts.com/carmel/dining/coastal-kitchen"},
{"@id": "https://www.grandviewresorts.com/carmel/spa"},
{"@id": "https://www.grandviewresorts.com/carmel/golf"}
]
}
Why these additional properties matter for AI engines:
- @id: Provides stable identifier for entity relationships across your schema graph
- sameAs: Links to authoritative profiles (Wikipedia, social media, Google Business) that AI engines already trust
- image as ImageObject: Provides width, height, and caption so AI engines can select appropriate images and understand their content
- geo + hasMap: Enables location-based queries and map integration in AI responses
- contactPoint array: Lets AI engines provide specific contact information for different departments (weddings, spa, golf)
- paymentAccepted & currenciesAccepted: Answers common transactional questions
- logo as ImageObject: Provides proper brand imagery with dimensions
Critical for multi-property groups:
The parentOrganization property creates the relationship between your individual properties and your brand. The containsPlace array lists all venues, rooms, and facilities contained within the resort, creating bidirectional relationships with their containedInPlace properties.
This bidirectional approach enables:
- Brand-level authority flowing to individual properties
- Clear organizational structure for AI engines
- Complete property hierarchy understanding
- Consolidated brand presence across all properties
- Shared awards and recognition at brand level
- AI engines understanding the full scope of what each property contains
3. HotelRoom Schema
For individual accommodations. Critical for properties wanting to show up in room-specific searches and enable transactional markup.
Essential properties:
@type: ["HotelRoom", "Product"](Multi-Typed Entity pattern)@id: Stable URL identifier for this room typename: Room type namedescription: Room descriptionoccupancy: Guest capacitybed: Bed configurationfloorSize: Room size with proper unit codeamenityFeature: Room-specific amenitiesoffers: Pricing and availabilitycontainedInPlace: Reference to parent resort
Recommended properties:
image: Array of ImageObject showing the roomidentifier: Internal ID for PMS mappingsku: SKU for inventory systemsadditionalProperty: Internal facets safe to expose publicly
Example with complete properties:
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"@id": "https://www.grandviewresorts.com/carmel/rooms/ocean-view-suite",
"name": "Ocean View Suite",
"identifier": "OVS-001",
"sku": "CARMEL-OVS",
"description": "Luxurious 850 sq ft suite with panoramic ocean views, separate living area, and private balcony",
"image": [
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/rooms/ocean-view-suite-living.jpg",
"width": 2000,
"height": 1333,
"caption": "Ocean View Suite living area with floor-to-ceiling windows"
},
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/rooms/ocean-view-suite-bedroom.jpg",
"width": 2000,
"height": 1333,
"caption": "King bedroom with ocean views and private balcony"
},
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/rooms/ocean-view-suite-bathroom.jpg",
"width": 2000,
"height": 1333,
"caption": "Spa-inspired marble bathroom with soaking tub"
}
],
"occupancy": {
"@type": "QuantitativeValue",
"maxValue": "4",
"unitText": "persons"
},
"bed": {
"@type": "BedDetails",
"numberOfBeds": "1",
"typeOfBed": "King"
},
"floorSize": {
"@type": "QuantitativeValue",
"value": "850",
"unitCode": "FTK"
},
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "View Type",
"value": "Ocean Front"
},
{
"@type": "PropertyValue",
"name": "Building",
"value": "Main Tower"
},
{
"@type": "PropertyValue",
"name": "Floor Level",
"value": "High Floor"
},
{
"@type": "PropertyValue",
"name": "Accessible",
"value": false
}
],
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Ocean View",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Private Balcony",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Separate Living Area",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Soaking Tub",
"value": true
}
],
"offers": {
"@type": "Offer",
"price": "650",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.grandviewresorts.com/carmel/rooms/ocean-view-suite/book"
},
"containedInPlace": {
"@id": "https://www.grandviewresorts.com/carmel"
}
}
Technical notes:
HotelRoom Multi-Typed Entity (MTE) Pattern:
Schema.org’s documentation shows that when you want to place offers on a HotelRoom, you should declare it as both HotelRoom and Product using the Multi-Typed Entity pattern: "@type": ["HotelRoom", "Product"]. This is the standard approach for transactional markup on accommodations. Alternatively, you can publish a separate Offer entity with itemOffered pointing to the HotelRoom (without multi-typing the room).
Floor Size Unit Code:unitCode: "FTK" is the UN/CEFACT Common Code for square feet. Using unitCode instead of unitText with the proper standardized code is the recommended approach. See the UN/CEFACT code list for other unit codes (e.g., “MTK” for square meters).
Identifier and SKU:
The identifier and sku properties help map schema entities to your PMS or channel manager for inventory management and availability tracking.
Additional Property:additionalProperty as PropertyValue lets you include internal facets (view codes, building names, floor levels, accessibility features) that are useful for operations and guest selection but safe to expose publicly.
4. Restaurant Schema
For each dining venue at your property. This is critical for properties with notable restaurants.
Essential properties:
@type: Restaurant@id: Stable URL identifiername: Restaurant nameservesCuisine: Cuisine type (array)priceRange: Price indicatorhasMenu: Link to menu (or Menu schema)acceptsReservations: BooleancontainedInPlace: Reference to parent resort
Recommended properties:
image: Array of ImageObjectsameAs: Authoritative profilespotentialAction: ReserveAction for bookingopeningHoursSpecification: Operating hoursaward: Awards and recognitionaggregateRating: Review ratings
For Michelin or award-winning restaurants:
{
"@context": "https://schema.org",
"@type": "Restaurant",
"@id": "https://www.grandviewresorts.com/carmel/dining/coastal-kitchen",
"name": "Coastal Kitchen",
"description": "Michelin-starred oceanfront restaurant featuring contemporary American cuisine and the finest local seafood",
"url": "https://www.grandviewresorts.com/carmel/dining/coastal-kitchen",
"servesCuisine": ["Contemporary American", "Seafood", "California Cuisine"],
"priceRange": "$$$$",
"acceptsReservations": true,
"hasMenu": "https://www.grandviewresorts.com/carmel/dining/coastal-kitchen/menu",
"image": [
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/coastal-kitchen-dining.jpg",
"width": 2000,
"height": 1333,
"caption": "Ocean-view dining room at Coastal Kitchen"
},
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/coastal-kitchen-dish.jpg",
"width": 2000,
"height": 1333,
"caption": "Signature seared scallops with citrus beurre blanc"
}
],
"sameAs": [
"https://www.instagram.com/coastalkitchencarmel",
"https://guide.michelin.com/us/coastal-kitchen-carmel"
],
"potentialAction": {
"@type": "ReserveAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://www.grandviewresorts.com/carmel/dining/coastal-kitchen/reserve",
"actionPlatform": [
"http://schema.org/DesktopWebPlatform",
"http://schema.org/MobileWebPlatform"
]
},
"result": {
"@type": "Reservation",
"name": "Dining Reservation"
}
},
"award": [
"Michelin One Star",
"James Beard Award Semifinalist"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "324"
},
"containedInPlace": {
"@id": "https://www.grandviewresorts.com/carmel"
}
}
Why ReserveAction matters:
The potentialAction with ReserveAction tells AI engines where and how guests can make reservations. This enables conversational booking recommendations and direct deep-linking to your reservation system from AI-powered assistants.
5. DaySpa Schema
For spa and wellness facilities at your property. Critical for properties with destination spas or award-winning wellness programs.
Essential properties:
@type: DaySpa(orHealthAndBeautyBusiness)@id: Stable URL identifiername: Spa namedescription: Spa description and servicespriceRange: Indicative pricingamenityFeature: Spa amenities and servicesopeningHoursSpecification: Operating hours with DayOfWeek IRIscontainedInPlace: Link to parent resort
Recommended properties:
image: Array of ImageObjecthasOfferCatalog: Treatment menu with pricingavailableLanguage: Languages spokenaward: Awards and recognitionaggregateRating: Review ratings
For award-winning spas:
{
"@context": "https://schema.org",
"@type": "DaySpa",
"@id": "https://www.grandviewresorts.com/carmel/spa",
"name": "The Serenity Spa",
"description": "20,000 sq ft destination spa featuring signature treatments, thermal circuit, and ocean-view relaxation areas",
"url": "https://www.grandviewresorts.com/carmel/spa",
"priceRange": "$$$$",
"image": [
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/spa-relaxation-room.jpg",
"width": 2000,
"height": 1333,
"caption": "Ocean-view relaxation lounge"
},
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/spa-treatment-room.jpg",
"width": 2000,
"height": 1333,
"caption": "Private treatment suite with ocean views"
}
],
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Coastal Highway",
"addressLocality": "Carmel",
"addressRegion": "CA",
"postalCode": "93923",
"addressCountry": "US"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"https://schema.org/Monday",
"https://schema.org/Tuesday",
"https://schema.org/Wednesday",
"https://schema.org/Thursday",
"https://schema.org/Friday",
"https://schema.org/Saturday",
"https://schema.org/Sunday"
],
"opens": "08:00",
"closes": "20:00"
}
],
"telephone": "+1-831-555-0150",
"availableLanguage": ["English", "Spanish", "French"],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Spa Treatment Menu",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Signature Ocean Stone Massage",
"description": "90-minute hot stone massage using locally sourced ocean stones"
},
"price": "295",
"priceCurrency": "USD"
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Serenity Facial",
"description": "60-minute customized facial treatment"
},
"price": "225",
"priceCurrency": "USD"
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Couples Massage",
"description": "90-minute massage for two in private suite"
},
"price": "550",
"priceCurrency": "USD"
}
]
},
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Massage Services",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Facial Treatments",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Thermal Circuit",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Couples Suites",
"value": true
}
],
"award": [
"Forbes Five-Star Spa",
"Conde Nast Best Destination Spa"
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "567"
},
"containedInPlace": {
"@id": "https://www.grandviewresorts.com/carmel"
}
}
Why hasOfferCatalog matters:
When you explicitly structure your treatment menu as Services within an OfferCatalog, AI engines can answer specific pricing questions (“How much is a massage at Grandview Spa?”) and recommend specific treatments conversationally.
6. GolfCourse Schema
For properties with golf facilities. Essential for golf resort properties and luxury resorts with championship courses.
Essential properties:
@type: GolfCourse(orSportsActivityLocation)@id: Stable URL identifiername: Course namedescription: Course details and designeraddress: Course locationtelephone: Course contacturl: Course websiteamenityFeature: Course features and facilitiescontainedInPlace: Reference to parent resort
Recommended properties:
image: Array of ImageObjectsameAs: Authoritative profilesopeningHoursSpecification: Operating hours with DayOfWeek IRIsoffers: Tee time pricingaward: Awards and recognition
For championship courses:
{
"@context": "https://schema.org",
"@type": "GolfCourse",
"@id": "https://www.grandviewresorts.com/carmel/golf",
"name": "Oceanview Championship Course",
"description": "Award-winning 18-hole championship course designed by Jack Nicklaus, featuring dramatic ocean views and challenging coastal terrain",
"url": "https://www.grandviewresorts.com/carmel/golf",
"image": [
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/golf-signature-hole.jpg",
"width": 2000,
"height": 1333,
"caption": "Signature 7th hole with ocean views"
},
{
"@type": "ImageObject",
"contentUrl": "https://www.grandviewresorts.com/images/golf-clubhouse.jpg",
"width": 2000,
"height": 1333,
"caption": "Oceanview clubhouse and pro shop"
}
],
"sameAs": [
"https://www.instagram.com/oceanviewgolfcarmel",
"https://www.golfdigest.com/courses/oceanview-championship"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Coastal Highway",
"addressLocality": "Carmel",
"addressRegion": "CA",
"postalCode": "93923",
"addressCountry": "US"
},
"telephone": "+1-831-555-0175",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"https://schema.org/Monday",
"https://schema.org/Tuesday",
"https://schema.org/Wednesday",
"https://schema.org/Thursday",
"https://schema.org/Friday",
"https://schema.org/Saturday",
"https://schema.org/Sunday"
],
"opens": "06:00",
"closes": "19:00"
}
],
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Number of Holes",
"value": "18"
},
{
"@type": "LocationFeatureSpecification",
"name": "Par",
"value": "72"
},
{
"@type": "LocationFeatureSpecification",
"name": "Yardage",
"value": "7200"
},
{
"@type": "LocationFeatureSpecification",
"name": "Driving Range",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Putting Green",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Caddie Service",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Club Rental",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "GPS Carts",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "Pro Shop",
"value": true
}
],
"offers": {
"@type": "Offer",
"name": "Tee Time",
"description": "Championship course tee time with cart",
"price": "295",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.grandviewresorts.com/carmel/golf/tee-times"
},
"award": [
"Golf Digest Top 100 Courses",
"Golf Magazine Top Courses You Can Play"
],
"containedInPlace": {
"@id": "https://www.grandviewresorts.com/carmel"
}
}
For golf tournaments, use SportsEvent:
{
"@context": "https://schema.org",
"@type": "SportsEvent",
"@id": "https://www.grandviewresorts.com/carmel/golf/tournaments/summer-invitational-2024",
"name": "Oceanview Summer Invitational",
"description": "Annual championship tournament featuring top amateur golfers",
"startDate": "2024-07-15T07:00:00-07:00",
"endDate": "2024-07-17T18:00:00-07:00",
"location": {
"@id": "https://www.grandviewresorts.com/carmel/golf"
},
"sport": "Golf",
"competitor": [
{
"@type": "Person",
"name": "Tournament Field"
}
],
"offers": {
"@type": "Offer",
"name": "Tournament Entry",
"price": "450",
"priceCurrency": "USD",
"url": "https://www.grandviewresorts.com/carmel/golf/tournaments/summer-invitational-2024/register"
}
}
7. Event Schema
For activities, classes, and experiences offered at your property.
Essential properties:
@type: Event(or specific subtypes like SportsEvent, MusicEvent, Festival)name: Event namedescription: Event descriptionstartDate: Start date and timeendDate: End date and time (if applicable)location: Event locationoffers: Pricing and availability
Example for resort activity:
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Sunset Yoga on the Beach",
"description": "Guided vinyasa flow yoga class on the beach, suitable for all levels",
"startDate": "2024-03-15T18:00:00-08:00",
"endDate": "2024-03-15T19:00:00-08:00",
"location": {
"@type": "Place",
"name": "North Beach",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Coastal Highway",
"addressLocality": "Carmel",
"addressRegion": "CA",
"postalCode": "93923",
"addressCountry": "US"
}
},
"offers": {
"@type": "Offer",
"price": "25",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://www.grandviewresorts.com/carmel/activities/sunset-yoga"
},
"organizer": {
"@id": "https://www.grandviewresorts.com/carmel"
}
}
8. Review Schema
For guest reviews and ratings. Critical for establishing trust and proof signals.
Essential properties:
@type: Reviewauthor: Reviewer informationreviewRating: Star ratingreviewBody: Review textdatePublished: Review date
Aggregate ratings:
{
"@type": "Resort",
"name": "Grandview Resort Carmel",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "1247",
"bestRating": "5",
"worstRating": "1"
}
}
Individual review example:
{
"@type": "Review",
"author": {
"@type": "Person",
"name": "Sarah M."
},
"reviewRating": {
"@type": "Rating",
"ratingValue": "5",
"bestRating": "5"
},
"reviewBody": "Absolutely stunning property with impeccable service. The spa was world-class and the oceanfront dining exceeded all expectations.",
"datePublished": "2024-02-15"
}
9. Offer Schema
For packages, specials, and promotional offerings.
Essential properties:
@type: Offername: Offer namedescription: Offer detailsprice: PricepriceCurrency: Currency codeavailability: Stock statusvalidFrom: Start datevalidThrough: End dateurl: Booking URL
Recommended properties:
availabilityStarts: Precise start datetimeavailabilityEnds: Precise end datetimeinventoryLevel: Available quantityeligibleCustomerType: Customer segmentationcategory: Offer categorization
Example package offer:
{
"@context": "https://schema.org",
"@type": "Offer",
"name": "Romance Package",
"description": "Two nights accommodation in Ocean View Suite, couples spa treatment, champagne and chocolate-covered strawberries, and dinner for two at Coastal Kitchen",
"price": "1500",
"priceCurrency": "USD",
"availability": "https://schema.org/LimitedAvailability",
"inventoryLevel": {
"@type": "QuantitativeValue",
"value": "15"
},
"availabilityStarts": "2024-02-01T00:00:00-08:00",
"availabilityEnds": "2024-04-30T23:59:59-07:00",
"validFrom": "2024-02-01",
"validThrough": "2024-04-30",
"url": "https://www.grandviewresorts.com/carmel/packages/romance/book",
"eligibleCustomerType": "Public",
"category": "Romance",
"itemOffered": {
"@type": "Product",
"name": "Romance Package",
"description": "Includes accommodation, spa treatment, dining, and romantic amenities"
}
}
Why these properties matter:
inventoryLevel: Shows AI engines when availability is limited, creating urgencyavailabilityStarts/Ends: More precise than validFrom/Through for time-sensitive offerseligibleCustomerType: Lets you segment offers (members vs public, corporate vs leisure)category: Helps AI engines understand offer type for better recommendations
Advanced Implementation Strategies
Once you have basic schema working, these advanced strategies improve AI discoverability.
Multi-Property Group Considerations
For resort groups with multiple properties, strategic schema implementation creates brand-level authority while maintaining property-level distinctiveness.
Centralized Brand Management:
Organization Schema Deployment:
- Single Organization schema on corporate website
- Each property references via
parentOrganization - Consistent brand messaging across all properties
- Centralized social media and brand assets
- Shared awards and recognition at brand level
Example structure:
// On corporate site: grandviewresorts.com
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://www.grandviewresorts.com",
"name": "Grandview Luxury Resorts"
}
// On property site: grandviewresorts.com/carmel
{
"@context": "https://schema.org",
"@type": "Resort",
"@id": "https://www.grandviewresorts.com/carmel",
"name": "Grandview Resort Carmel",
"parentOrganization": {
"@id": "https://www.grandviewresorts.com"
},
"containsPlace": [
{"@id": "https://www.grandviewresorts.com/carmel/rooms/ocean-view-suite"},
{"@id": "https://www.grandviewresorts.com/carmel/dining/coastal-kitchen"},
{"@id": "https://www.grandviewresorts.com/carmel/spa"}
]
}
// Room entity
{
"@context": "https://schema.org",
"@type": ["HotelRoom", "Product"],
"@id": "https://www.grandviewresorts.com/carmel/rooms/ocean-view-suite",
"name": "Ocean View Suite",
"containedInPlace": {
"@id": "https://www.grandviewresorts.com/carmel"
}
}
Bidirectional relationships:
The Resort lists venues in containsPlace, and each venue references back with containedInPlace. This bidirectional pattern helps AI engines fully understand your property structure.
Consistency vs. Differentiation:
What should be consistent across properties:
- Brand-level messaging and positioning
- Schema structure and property usage
- Award presentation format
- Image quality standards
- Technical implementation patterns
What should be property-specific:
- Individual property descriptions and unique selling points
- Property-specific amenities and services
- Local awards and recognition
- Geographic and neighborhood context
- Property-level pricing and availability
Implementation Approaches:
Centralized Management:
- Schema templates managed at brand level
- Property teams populate with local data
- CMS integration ensures consistency
- Automated validation across all properties
- Best for: Groups with 5+ properties, strong central IT
Distributed with Guidelines:
- Brand provides schema standards and examples
- Properties implement independently
- Periodic audits ensure compliance
- Best for: Groups with 2-4 properties, property-level IT autonomy
Hybrid Approach:
- Organization and brand-level schemas centrally managed
- Property-specific schemas managed locally within templates
- Best for: Most multi-property luxury resort groups
Technical Considerations:
URL Structure:
- Corporate site:
grandviewresorts.com(Organization schema) - Property pages:
grandviewresorts.com/carmel,grandviewresorts.com/napa(Resort schemas) - OR property subdomains:
carmel.grandviewresorts.com(Resort schemas) - Ensure
@idvalues are absolute URLs pointing to canonical pages
Data Synchronization:
- Brand-level data (Organization) updates propagate to all properties
- Property-level data (Resort, amenities) updates independently
- Shared services (spas, restaurants) may have schema on multiple property pages
Measurement and Optimization:
- Track AI visibility for brand name vs. individual property names
- Monitor which properties appear for category searches
- Identify visibility gaps across portfolio
- Share successful optimizations across properties
Dynamic Data Integration
Pull real-time data into your schema.
What to make dynamic:
- Availability (in stock, sold out, limited availability)
- Pricing (current rates, packages, specials)
- Events (upcoming activities and experiences)
- Reviews (latest aggregated ratings)
How to implement:
- API integration between booking system and website
- Scheduled updates (hourly or daily)
- Cache management for performance
- Fallback to static data if dynamic fails
Seasonal and Event-Based Schema
Adjust schema for seasonal offerings and special events.
Examples:
- Ski season: Emphasize mountain access, ski-in/ski-out, equipment rental
- Summer: Highlight beach access, water sports, outdoor dining
- Holiday seasons: Feature special menus, decorations, packages
- Local events: Wine harvest, festivals, tournaments
Multi-Language Implementation
International luxury properties need schema in multiple languages.
Implementation approach:
- Use
availableLanguageon Hotel/LodgingBusiness for languages spoken at property - Use
inLanguageon WebPage or CreativeWork for the language of specific content - Separate schema for each language version of your website
- Ensure consistency across languages
- Test in regional AI engines
Important distinction:
availableLanguage= Languages your staff speaks and can serve guests ininLanguage= Language a specific piece of content (webpage, document) is written in
Local Business Optimization
For properties with strong local presence.
Additional schemas to implement:
- LocalBusiness (broader than Hotel)
- Organization (corporate structure)
- Place (geographic and landmark information)
- TouristAttraction (if applicable)
Measuring Success
Schema implementation should drive measurable outcomes.
Technical Metrics
Track these indicators:
- Pages with valid schema (percentage)
- Schema coverage across content types
- Validation errors resolved
- Implementation consistency score
Visibility Metrics
AI engine appearance tracking:
- Query categories where you appear
- Ranking position in AI recommendations
- Competitors appearing vs. you
- Information accuracy in AI responses
Business Metrics
Ultimate measures of success:
- Direct booking traffic from AI referrals
- Conversion rate on AI-driven visits
- Revenue attributed to AI channels
- Brand search volume (awareness indicator)
Your Implementation Roadmap
Here’s how to approach schema implementation strategically.
Phase 1: Foundation (Week 1-2)
For multi-property groups, implement Organization schema first:
- Brand/company information on corporate site
- Logo and brand assets as ImageObject
- Contact information
- Social media profiles
- Brand-level awards
Implement core Resort schema for each property:
- Property information with all recommended properties
- Contact details and contactPoint array
- Geographic coordinates (geo, hasMap)
- Images as ImageObject arrays
- Basic amenities
- Location data
- Pricing indication
- parentOrganization link to brand Organization
Validate and test:
- Run through Schema Markup Validator
- Fix all errors
- Deploy to production
Phase 2: Depth (Week 3-4)
Add detailed schemas:
- Restaurant schema with potentialAction for reservations
- HotelRoom schema with MTE pattern, proper unitCode, images, identifier
- DaySpa schema with hasOfferCatalog and proper DayOfWeek IRIs
- GolfCourse schema with offers and openingHours
- Activities and events
- Offer schema for packages with inventoryLevel
Establish relationships:
- Link each Resort to parent Organization via parentOrganization
- Connect places with containedInPlace (rooms, restaurants, spas, golf courses within resort)
- Use containsPlace from resort to contained venues
- Link related offerings
- Ensure all entities have explicit @id properties
Phase 3: Proof Signals (Week 5-6)
Implement trust indicators:
- AggregateRating from multiple sources
- Award and certification markup
- Featured reviews
- Media mentions
- sameAs links to authoritative profiles
Phase 4: Automation (Week 7-8)
Connect to dynamic data:
- Availability integration
- Pricing updates
- Event calendar
- Review aggregation
Phase 5: Optimization (Ongoing)
Continuous improvement:
- Monitor AI engine appearances
- Test new query patterns
- Expand schema coverage
- Update for seasonal offerings
- Track and refine based on results
When to Get Expert Help
Schema implementation looks straightforward but has complexity that trips up many properties.
You need expert help when:
- You have multiple properties needing consistency
- Your CMS doesn’t support structured data well
- You need dynamic data integration
- You want to avoid months of trial and error
- You need to prove ROI quickly
- You’re unsure about technical patterns like MTE, proper unit codes, or relationship properties
The Visibility Igniter includes complete schema.org implementation as part of the 90-day quick wins, with strategic guidance on what to implement first for maximum AI discoverability.
The Foundation for Everything Else
Schema.org implementation for AI visibility creates the foundation for conversational commerce, personalization, and multi-channel distribution.
When you structure your content properly:
- AI engines can discover and recommend you
- Conversational booking becomes possible
- Content distributes correctly across channels
- Personalization systems can leverage structured data
- Future AI platforms can integrate easily
You’re not just improving visibility. You’re building the strategic content architecture that enables modern hospitality technology.
Next Steps
Schema.org implementation is technical work with strategic impact. You can tackle it yourself with this guide, or accelerate with expert guidance.
Ready to make your property discoverable to AI engines?
The Visibility Igniter includes comprehensive schema.org implementation, AI visibility assessment, and 90-day transformation roadmap.
Your content exists. Make sure AI engines can find it.
