Structured data

Schema.org for tour operators: the markup that actually matters

In short

For a tour operator, four schema.org types do most of the work: Organization or TravelAgency for the company entity, Product with Offer for each trip and its price, FAQPage for question-led content, and BreadcrumbList for structure. Add Review and AggregateRating only where the reviews genuinely exist on the page. Build them as one connected graph per page rather than separate blocks.

Most advice about structured data for travel is a list of every type schema.org publishes, which is not useful when you have limited engineering time and a catalogue that changes daily. This is the order we actually work in.

Start with one connected graph, not scattered blocks

Before deciding which types to add, decide how they will relate to each other.

The common failure on real sites is four separate <script type="application/ld+json"> blocks, dropped in by four different plugins over five years, each declaring its own unconnected Organization. A parser then has to guess which one is authoritative, and guessing is exactly what structured data exists to prevent.

Emit one script per page, containing one @graph, in which every node has a stable @id and refers to other nodes by @id rather than repeating them:

{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "TravelAgency", "@id": "https://example.co.uk/#organization", "name": "..." },
    { "@type": "WebSite", "@id": "https://example.co.uk/#website", "publisher": { "@id": "https://example.co.uk/#organization" } },
    { "@type": "WebPage", "@id": "https://example.co.uk/kenya#webpage", "isPartOf": { "@id": "https://example.co.uk/#website" } }
  ]
}

Getting this shape right first means everything you add afterwards has somewhere to attach.

The four that earn their place

1. The organisation entity

TravelAgency or TourOperator, sitewide, with your legal name, URL, logo, contact details and — importantly for travel — your accreditations.

ATOL, ABTA, AITO and IATA membership are among the most frequently asked questions about any travel company, and on most sites they exist only as a footer image or a PDF. Neither is readable. Express them explicitly, and give the certificate number.

2. Product and Offer for each trip

This is where travel sites lose the most ground. An itinerary is a structured object — duration, departure points, inclusions, price bands, conditions — and almost none of that reaches a machine in a usable form.

At minimum, every trip page needs a Product (or TouristTrip) carrying the name and description, with an Offer carrying price, priceCurrency and availability. If your prices are per person, say so. If they are “from” prices, use PriceSpecification with minPrice rather than stating a flat price you cannot honour, which is both a markup error and a consumer-law problem waiting to happen.

3. FAQPage, where you genuinely have questions

Question-and-answer content is disproportionately useful to answer engines, because it is already in the shape a model wants to quote.

The rule that matters: only mark up questions and answers that are visible on the page. Marking up content the user cannot see is a spam signal, and on a travel site it is usually unnecessary anyway — most operators already have fast facts, “need to know” panels or destination guides that convert cleanly into FAQPage markup with no new content required.

4. BreadcrumbList

Cheap, mechanical, and it tells a model how your catalogue is organised — that Kenya sits within Africa, that this safari sits within Kenya. Structure is context, and context is what lets a model answer a specific question with a specific page.

The ones to skip, at least at first

Review and AggregateRating are widely abused and increasingly discounted where they cannot be corroborated. Add them only where real reviews appear on the page, and prefer pointing at an independent review platform.

Event is rarely a fit for scheduled departures, despite the temptation. Trip and TouristTrip are useful but less well supported than plain Product, so where you have limited time, do Product first and layer Trip on afterwards.

Templated, not hand-written

The last point is the one that determines whether this survives contact with a real business.

Marking up forty pages by hand is a different job from marking up a catalogue that changes daily across several markets and currencies. If your structured data is written into pages by hand, it will be accurate on the day it ships and wrong within a quarter.

Generate it from the same data that renders the page. Then a price change updates both the visible page and the markup, because they are the same fact expressed twice — which is the only arrangement that stays true.