XooCode(){

ReservationPackage

ReservationPackage is a Reservation subtype for a bundle of related reservations booked together: a flight + hotel package, a conference registration + hotel + dinner bundle. It adds one property: subReservation, an array of individual Reservation entities that share common booking details (reservationId, underName, provider).

For a complete property walkthrough, see the Reservation example. The shared properties (underName, provider, priceCurrency) go on the ReservationPackage. Individual booking details (checkinTime, pickupLocation, partySize) go on each subReservation. Gmail can display the package as a multi-card itinerary.

Full example of schema.org/ReservationPackage json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/ReservationPackage
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ReservationPackage",
  "reservationId": "XOOCON-TRAVEL-PKG-042",
  "reservationStatus": "https://schema.org/ReservationConfirmed",
  "underName": { "@type": "Person", "name": "Tomás Herrera" },
  "provider": { "@id": "https://xoocode.com#organization", "@type": "Organization", "name": "Xoo Code Inc." },
  "totalPrice": "4647.00",
  "priceCurrency": "DKK",
  "bookingTime": "2026-09-15T11:30:00+02:00",
  "subReservation": [
    {
      "@type": "FlightReservation",
      "reservationId": "NA-XBHF42",
      "reservationStatus": "https://schema.org/ReservationConfirmed",
      "reservationFor": {
        "@type": "Flight",
        "flightNumber": "NA 412",
        "departureAirport": { "@type": "Airport", "iataCode": "CPH" },
        "arrivalAirport": { "@type": "Airport", "iataCode": "LVA" },
        "departureTime": "2026-11-13T08:30:00+01:00"
      }
    },
    {
      "@type": "LodgingReservation",
      "reservationId": "HD-2026-4471",
      "reservationStatus": "https://schema.org/ReservationConfirmed",
      "reservationFor": { "@type": "Hotel", "name": "Hotel Dunmore" },
      "checkinTime": "2026-11-13T15:00:00-05:00",
      "checkoutTime": "2026-11-16T11:00:00-05:00"
    }
  ]
}
</script>

Minimal valid version

The smallest markup that still produces a valid ReservationPackage entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/ReservationPackage (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ReservationPackage",
  "reservationId": "XOOCON-TRAVEL-PKG-042",
  "reservationStatus": "https://schema.org/ReservationConfirmed",
  "underName": { "@type": "Person", "name": "Tomás Herrera" },
  "subReservation": [
    { "@type": "FlightReservation", "reservationFor": { "@type": "Flight", "flightNumber": "NA 412" } },
    { "@type": "LodgingReservation", "reservationFor": { "@type": "Hotel", "name": "Hotel Dunmore" } }
  ]
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common ReservationPackage mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    Duplicating underName on every subReservation

    Wrong
    Each subReservation repeats underName
    Right
    Set underName on the ReservationPackage; subReservations inherit it

    subReservations inherit common values (underName, provider, priceCurrency) from the parent ReservationPackage. Duplicating them adds noise without information.

  2. 02

    Using ReservationPackage for a single booking

    Wrong
    "@type": "ReservationPackage" with one subReservation
    Right
    Use the specific Reservation subtype directly (FlightReservation, LodgingReservation)

    ReservationPackage is for bundling multiple reservations. A single flight booking is just a FlightReservation. Wrapping it in a package adds an unnecessary layer.

About the example data

A bundled XooCon travel package: Nordic Air flight + Hotel Dunmore stay, booked together through Xoo Code Inc.

Comments

Loading comments...

Leave a comment