Event Structured Data: Complete Implementation Guide
Event structured data enables search engines to understand and prominently display information about upcoming events, including concerts, conferences, workshops, festivals, and online webinars. When properly implemented, Event markup can trigger rich results in Google Search that display event dates, venue details, ticket availability, and pricing — all directly within the search results page. This makes Event schema one of the most impactful structured data types for event organisers, ticketing platforms, and venue websites looking to increase visibility and drive ticket sales from organic search.
Why Use Event Schema?
- Triggers prominent event rich results in Google Search showing dates, times, venues, and ticket prices, significantly boosting click-through rates.
- Makes events eligible for Google's dedicated Events search experience, where users can browse and filter events by date, category, and location.
- Supports both physical and virtual events through the eventAttendanceMode property, ensuring all event types receive appropriate rich result treatment.
- Increases the likelihood of appearing in Google's event packs and knowledge panels for location-based and brand-related search queries.
- Provides structured ticket and pricing information to search engines, helping users make attendance decisions directly from search results.
Required Properties
These properties are required by Google for Event structured data to be eligible for rich results.
| Property | Description |
|---|---|
| @type | Must be set to 'Event'. For more specific event types, you can use subtypes such as 'MusicEvent', 'BusinessEvent', or 'SportsEvent'. |
| name | The official name of the event. Should be concise and descriptive, avoiding promotional language or unnecessary punctuation. |
| startDate | The start date and time of the event in ISO 8601 format. Include timezone information to avoid ambiguity for international audiences. |
| location | The venue or location of the event. Use a Place object with name and address for physical events, or a VirtualLocation object with url for online events. |
Recommended Properties
Adding these properties improves your chances of appearing in rich results and provides more context to search engines.
| Property | Description |
|---|---|
| endDate | The end date and time of the event in ISO 8601 format. Particularly important for multi-day events such as festivals and conferences. |
| offers | Ticket or registration information using an Offer object. Include price, priceCurrency, availability, and a url linking to the booking page. |
| image | A representative image for the event. Google recommends images with an aspect ratio of 16:9, 4:3, or 1:1 at a minimum width of 720 pixels. |
| performer | The person or group performing at the event. Particularly relevant for music events, comedy shows, and speaking engagements. |
| eventAttendanceMode | Specifies whether the event is held offline, online, or in a mixed format. Use values from the EventAttendanceModeEnumeration. |
JSON-LD Example
Here is a complete Event structured data example you can use as a starting point. Or use our Event generator to create one automatically.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "MusicEvent",
"name": "London Jazz Festival 2026 — Opening Night",
"startDate": "2026-06-12T19:30:00+01:00",
"endDate": "2026-06-12T23:00:00+01:00",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "Place",
"name": "Barbican Centre",
"address": {
"@type": "PostalAddress",
"streetAddress": "Silk Street",
"addressLocality": "London",
"postalCode": "EC2Y 8DS",
"addressCountry": "GB"
}
},
"image": "https://example.com/images/london-jazz-festival-2026.jpg",
"description": "The opening night of the London Jazz Festival 2026, featuring world-class performers in the iconic Barbican Centre.",
"performer": {
"@type": "MusicGroup",
"name": "The Ezra Collective"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/tickets/london-jazz-festival-opening",
"price": "45.00",
"priceCurrency": "GBP",
"availability": "https://schema.org/InStock",
"validFrom": "2026-03-01T10:00:00+00:00"
},
"organizer": {
"@type": "Organization",
"name": "Serious Events Ltd",
"url": "https://example.com"
}
}
</script>How to Implement Event Schema
- 1Identify all event listing pages on your site, including individual event pages, calendar listings, and any pages promoting upcoming events with dates and venue information.
- 2Add a JSON-LD script block to each event page. Set the @type to 'Event' or a more specific subtype such as 'MusicEvent', 'BusinessEvent', or 'EducationEvent'.
- 3Populate the required properties: name, startDate (with timezone), and location. For physical events, use a Place object with a full PostalAddress. For online events, use a VirtualLocation with the event URL.
- 4Add ticket and pricing information using the offers property. Include price, priceCurrency, availability status, and a direct URL to the booking or registration page.
- 5Set the eventAttendanceMode and eventStatus properties to reflect whether the event is in-person, virtual, or hybrid, and whether it is scheduled, postponed, or cancelled.
- 6Validate your structured data with Google's Rich Results Test tool and monitor event pages in Google Search Console for any errors or warnings in the Events enhancements report.
Common Mistakes to Avoid
- Using incorrect or missing timezone information in startDate and endDate values. Always include the UTC offset (e.g., +01:00) or use the Z suffix for UTC to prevent scheduling confusion.
- Marking up past events with structured data that suggests they are still upcoming. Remove or update Event markup once an event has concluded, or set eventStatus to EventCancelled or EventPostponed as appropriate.
- Adding promotional or sales language to the event name, such as 'BEST PRICE' or 'LIMITED OFFER'. The name should be the official event title only.
- Omitting the offers property when ticket information is available on the page. Including pricing and availability data significantly enhances the rich result and user experience.
- Using a generic location like a city name instead of a specific venue with a full postal address. Detailed location data improves local search relevance and map integration.
Testing & Validation
Before deploying your Event structured data, validate it using these tools:
- 1Google Rich Results Test — Paste your page URL or code snippet to check if your structured data is eligible for rich results.
- 2Schema Markup Validator — Validates your JSON-LD syntax against the schema.org specification.
- 3Google Search Console — After deployment, monitor the Enhancements report for any errors or warnings.
Frequently Asked Questions
How do I mark up an online or virtual event?
For virtual events, set eventAttendanceMode to 'https://schema.org/OnlineEventAttendanceMode' and use a VirtualLocation object for the location property, including the URL where the event will be streamed or accessed. For hybrid events, use 'https://schema.org/MixedEventAttendanceMode' and include both a Place and a VirtualLocation.
Should I use Event or a more specific subtype like MusicEvent?
Using a more specific subtype is recommended when one clearly applies. Google recognises subtypes such as MusicEvent, BusinessEvent, EducationEvent, and SportsEvent. Specific types provide additional context and may improve relevance for category-specific search queries.
How do I handle events that are postponed or cancelled?
Use the eventStatus property to communicate changes. Set it to 'https://schema.org/EventPostponed' for postponed events or 'https://schema.org/EventCancelled' for cancelled events. If the event has been rescheduled, update the startDate and endDate to the new times and set eventStatus to 'https://schema.org/EventRescheduled'.
Can I add Event structured data for recurring events?
Each occurrence of a recurring event should have its own Event markup with unique startDate and endDate values. Do not use a single Event object for all occurrences. If your events recur weekly or monthly, generate individual JSON-LD blocks for each instance.
What image specifications does Google recommend for Event structured data?
Google recommends providing images in 16:9, 4:3, and 1:1 aspect ratios, with a minimum width of 720 pixels. Images should be representative of the event and should not contain excessive text or promotional overlays. Multiple images in different aspect ratios can be provided as an array.
Ready to Generate Your Event Schema?
Use our free generator to create valid Event structured data in seconds.
Open Event Generator