Structured data for events
Adding structured data to your event pages helps search engines — and event discovery services like Near Here — understand what you're actually listing. It's good practice regardless of who's reading it, and it takes less effort than you'd think.
What is structured data?
Structured data is a way of labelling the information on your page so that machines can read it reliably. Think of it as putting name badges on your event details — instead of a computer trying to guess which bit of text is the date and which is the venue, you tell it explicitly. It sits alongside your normal HTML and doesn't change how your page looks to visitors.
JSON-LD — the easy way
There are a few formats for structured data, but JSON-LD is the one Google recommends and the easiest to work with. It's a small block of JSON that you drop into a <script> tag in your page — it doesn't affect how anything looks, and you don't need to touch your existing HTML.
Here's a complete example you can adapt for your own events:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Your Event Name",
"startDate": "2026-04-12T19:30:00+01:00",
"endDate": "2026-04-12T22:00:00+01:00",
"description": "A short description of your event — what it is,
who it's for, and what to expect.",
"location": {
"@type": "Place",
"name": "Your Venue Name",
"address": {
"@type": "PostalAddress",
"streetAddress": "1 High Street",
"addressLocality": "Exampletown",
"addressRegion": "Exampleshire",
"postalCode": "EX1 2AB",
"addressCountry": "GB"
}
},
"offers": {
"@type": "Offer",
"price": "3",
"priceCurrency": "GBP",
"url": "https://www.example.com/events/your-event",
"availability": "https://schema.org/InStock"
},
"organizer": {
"@type": "Organization",
"name": "Your Venue Name",
"url": "https://www.example.com"
},
"image": "https://www.example.com/images/your-event.jpg",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode"
}
</script>Place this block inside the <head> or anywhere in the <body> of your event page. One block per event.
The bits that matter most
You don't have to include every field — but some are much more important than others.
name, startDate, location — the essentials
Without these three, it's not really an event listing. The name should be the actual event name (not your venue name). The startDate should always be a full ISO 8601 datetime, including time and timezone. The location should be a Place object with a proper address — not just a string.
description
Keep it concise and front-load the key details. What is it, who's it for, what should someone expect? A couple of sentences is plenty. Avoid copying in long blocks of marketing copy.
offers — even for free events
If your event is free, say so explicitly rather than leaving the field out. Use "price": "0" and "priceCurrency": "GBP". It's a strong signal for anyone searching for free things to do.
image
A good image helps your event stand out in listings. Use a direct URL to an image that's at least 1200 × 630 px if you can — that's the size that works best across search results and social cards.
Common mistakes
A few things that catch people out:
- Wrong date format. The date must be ISO 8601 —
2026-04-12T19:30:00, notSaturday 12th April. Written dates that humans can read are great for your page copy — just not for structured data. - Missing timezone. Always include the offset, for example
+00:00for GMT or+01:00for BST. Without it, a tool reading your data has to guess, and it might guess wrong. - Location as a plain string. Writing
"location": "Your Venue Name"is technically allowed but much less useful. Use aPlaceobject with a full address so the postcode and region are properly structured. - Forgetting to update eventStatus. If an event is cancelled or postponed, update the
eventStatusfield accordingly (EventCancelledorEventPostponed). Leaving it asEventScheduledafter a cancellation is confusing for everyone.
Testing your markup
Once you've added structured data to a page, it's worth running it through a validator before you call it done. Two tools worth knowing about:
- Google's Rich Results Test — checks whether your markup qualifies for rich results in Google Search, and flags any errors or missing recommended fields.
- Schema.org Validator — a more general-purpose tool that validates your markup against the Schema.org specification directly.
Both are free and easy to find with a quick search.
Already using a CMS?
If your site runs on WordPress, Squarespace, or a dedicated events platform, there's a good chance structured data is already being added for you. Most event plugins — including The Events Calendar for WordPress — output Schema.org markup automatically. It's worth checking what's already there before doing it manually. The Rich Results Test will show you exactly what a crawler sees on any given page.