Structured Data is data that represents the content of a web page in a format that adheres to international standards. For instance, events adhere to the Event schema: https://schema.org/Event. Some of the properties of an event are itself also standardized. Take for instance the actor in a play, that’s a Person: https://schema.org/Person.
This data is inserted in the <head>
element of a page, in a type="application/ld+json”
script tag:
This data is not visible, or useful, for visitors of the website. Instead it’s intended for what we broadly call “robots”: spiders, crawlers, etc. These are systems that add feed search engines and other systems with data on the web pages they crawl. This data can be used to enhance web search results, or to create new websites that for instance link to events they found on your website. The fact that the data is structured according to a standard means that it’s unambiguous and can be reliably interpreted automatically by such systems.
We follow Google’s guidelines for what data to provide since not all properties in those standards are required or even useful:
Google also provides a tool to validate the structured data on a given URL. Note that it’s not a problem if that tool gives warnings for missing data. Not all data is required and if required data is missing it will give an error instead of a warning. Some data is simply not available or does not apply in all cases. Those warnings are just there to motivate you to provide as much data as you can.
We provide various sets of structured data throughout our websites, we’ll go through all of them one by one in detail.
WebSite
This data is present on every page of the website. We provide:
url
- the website homepage URL
name
- the organisation name configuration value, which is also the title of the homepage
potentialAction
: SearchAction (https://schema.org/SearchAction)target
- the search results pagequery-input
- tells robots where to put the search query
The url and name properties of course don’t provide anything the robot can’t figure out on their own, but it’s explicit and unambiguous. More potentially valuable is the potentialAction, which exposes the site’s search feature. In theory this could allow a search engine to provide a search field in their search results, or redirect users to the website’s search (e.g. if the engine can’t find a result). Note however that Google stopped providing this feature in 2024.
Organization
This data requires a PNG logo file, and therefore only works if a logo_schema.png
file is present in the HTML/images
directory of a site repository.
This data is present on every page of the website. We provide:
url
- the website homepage URL
logo
- path to the aforementioned PNG logo file
Note that Google will most likely use the information provided via the Search Console etc.. And other search engines are also not know to use this data at all. So consider this structured data, and providing the logo image optional.
Breadcrumbs
On most pages we provide simplified breadcrumbs to indicate the position of the page in the website structure. This is the breadcrumbs data on an example event page:
This allows search engines to indicate not just the page itself (2 in the screenshot below) but also it’s parent in the breadcrumb structure (1). This is that same page but rendered in Google results:
For themes, events and courses the parent breadcrumb is the overview page for that content. For stories the website homepage is simply provided as the parent breadcrumb. Note that Google is likely to use the actual URL structure instead of the provided structured data, as in this example:
Course
We provide name
and description
, matching the name and description also used for OpenGraph data.
Page/Story
Only breadcrumbs are provided.
News (legacy)
News is will not be supported going forward, please use Stories instead.
People
People can be either an individual, or a group (e.g. a band or ensemble). For all name fields on multi-lingual sites we use the transliterated name (e.g. Tchaikovsky vs. Tsjaikovski) if applicable.
Individual person: Person - Schema.org Type
We provide:
name
- title, first name and surname combined
familyName
- surname
givenName
- first name
image
- the OpenGraph image
description
- the people’s description as processed for use in OpenGraph (ie. limited in length and stripped of HTML markup)
We provide:
name
- just the name field
legalName
- same asname
image
- the OpenGraph image
description
- the people’s description as processed for use in OpenGraph (ie. limited in length and stripped of HTML markup)
Theme
Only breadcrumbs are provided.
Theme Group
Only breadcrumbs are provided.
Event
We provide:
name
- OpenGraph title of the page (a combination of title and subtitle)
startDate
- the start date and time
organizer
- the name of the website, and the url of the homepage
doorTime
- the “doors open” date and time
eventStatus
- if the event is cancelled (the system name of the status is “geannuleerd”) it’s https://schema.org/EventCancelled, otherwise https://schema.org/EventScheduled
eventAttendanceMode
- the attendance of the production (ie. online, offline or mixed)
performer
- requires the performer to be set on the productiontype
- the production performer type, either person (https://schema.org/Person) or group (https://schema.org/PerformingGroup)name
- we use the value of the field specified in the production’s performer field (either title or subtitle)
endDate
- the end date and time, if specified
image
- the OpenGraph image
description
- the OpenGraph description
location
- https://schema.org/Place:- at minimum we provide both
name
andaddress
using the value of the name of the website, e.g. “Parktheater Eindhoven” - if the event is linked (via the hall) to a location with a name, we use that name instead of the website’s name (while keeping that name as the address)
- if that location also has at least both a city and a street, we replace the address with a https://schema.org/PostalAddress:
streetAddress
- street and numberaddressLocality
- citypostalCode
- postal code, if available
offers
- if we have prices for the event, we also provide one https://schema.org/Offer:price
- the lowest price for the event (the same we use for the price range visible on the website)priceCurrency
- the money format currency configured in the control panelvalidFrom
- the start of sale for this event (based on the group and pre-sale settings)availability
- if the status of the event is “visible and bookable” then https://schema.org/InStock, otherwise https://schema.org/SoldOuturl
- the generated direct order link for the event (may be an internal, integrated, purchase link, or an external order link), or when that’s not available the detail page of the production