I have a website that lists tours from many different tour operators. Each tour page has pricing, location, ratings and reviews, and may or may not have tour dates (some tours run every day, some run on demand, some run on specific dates).

There doesn't seem to be a correct schema.org schema for this. Event or SaleEvent seem to be good choices but StartDate is a required field. Then there is Product and Service which might be the right choice.

I am wondering how best to mark this up for best ranking by search engines, local search (by tour location), and rich snippets?

  • I have not looked, but the schema.org mark-up is limited and not inclusive for everybody. You may need to use a combination of several such as business, place, event, etc. I am not an expert. For a while I knew as much as anyone, but find it does not help my work and have not looked for a while. The up-shot is this, you may not find a perfect fit, but perhaps a workable solution. See if there are other tour sites using mark-up and check their source code for ideas. Good Luck! I wish that the schemas were more extensive- perhaps one day.
    – closetnoc
    Sep 1 '15 at 4:59
  • Thanks @closetnoc, I did have a look at similar sites but after viewing source of many I found only one that marked up the tour itself, as a Product and Offer.
    – johna
    Sep 1 '15 at 5:18
  • I up-voted (I can be a bit slow sometimes...) your question. I want to do what I can to attract attention to it.
    – closetnoc
    Sep 1 '15 at 14:39
  • "[…] but StartDate is a required field": Schema.org does not require any properties. You probably refer to Google’s Rich Snippets? They require certain properties for showing one of their Rich Snippets, but it’s totally fine not to provide these (in which case you don’t get this Rich Snippet for your document in their SERP). -- So do you ask about providing structured data (by using Schema.org), or do you ask about getting Google Rich Snippets (which supports only a very small and specific subset of Schema.org)?
    – unor
    Sep 1 '15 at 17:43
  • Thanks @unor, I am specifically interested in SEO benefits and getting more people to the site. Rich snippets would be desirable.
    – johna
    Sep 1 '15 at 21:15

Here's how you would do this:

Have a wrapper for https://schema.org/ProfessionalService for the Tour Guide Company.

Because ProfessionalService is a child of LocalBusiness, you can inherit all of the relevant business properties details or simply use mainEntityOfPage to reference the Tour Company page on your website.

Then, use the makesOffer item property - the expected type for this is an Offer found at https://schema.org/Offer.

Each offer would contain your pricing, location, ratings and reviews. Here is the list:

  • Pricing: The price item property of itemtype Offer. The expected type is either plain text or number.
  • Location: The availableAtOrFrom item property of itemtype Offer. The expected itemtype is Place, meaning you can use any of it's children such as LocalBusiness or even grandchildren like ProfessionalService.*
  • Reviews and Ratings: The review item property of itemtype Review. Straight forward, the reviewRating item property of Review will be used for reviews. reviewRating is of Rating itemtype, use the child aggregatedRating for a collation of reviews.
  • Dates and Flexibility: availabilityStarts and availabilityEnds cover you for this one. These both return the DateTime - this is where the flixibility of time comes in. DateTime contains a whole lot of properties, including availabilityStarts and availabilityEnds - which can be either a Demand or an Offer. **

Some other notes:

  • https://schema.org/AggregateOffer is a child of Offer and can be used to replace the expected itemtype of Offer for the makesOffer item property of ProfessionalService. This can be useful if you have different versions of tours (such as a premium package) or if you have a list view page containing all tours from a single company.

You can also inverse this, by having a AggregatedOffer for just the location, and list all of the ProfessionalServices and their Offers if multiple Tour Companies work at the same location and the same date etc.

As a general tip, pay attention to the expected type column on schema.org to figure out how best to tackle a problem.

The LocalBusiness + children being used with Offer is a very common data design pattern and would probably be one of most use in practical rich snippet design.

You can also use additionalType to marry two or more Schema Item Types.

* Notice an inception theme? Good. This can be used to create a recursive schema, meaning that you can have an offer within an offer. Pay attention to expected types to see if you can jump back up the hierarchy and find an appropriate child item type if you are ever in a jam. ** Notice that this can also create a recursive schema, so you can have and offer within an offer.

  • This was the kind of answer I was dreaming of... Thank you so much.
    – johna
    Sep 4 '15 at 22:06

Schema.org now has several types specific to the travel industry.

The following types are all linked to from this page:

  • TouristType
  • TravelAgency
  • Trip
  • TravelAction
  • ReservationTouristTrip
  • TouristDestination
  • TouristAttraction
  • FlightReservation
  • PlanAction
  • BusOrCoach
  • BusTrip
  • TrainTrip

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.