Google shows event rich results for concerts, workshops, conferences, and local meetups directly in search results, complete with dates, times, venues, and ticket links. When it works, it's one of the highest-click-through-rate SERP features available. When the schema is wrong, your events page looks like every other blue link, and your competitors with correct markup get the visual real estate.
The frustrating part is that Event schema errors are almost always silent. Google Search Console doesn't always flag them. Your page still renders fine for visitors. You just never get the rich result, and you have no idea why until you manually inspect the JSON-LD.
The errors that kill rich results
Missing or malformed startDate. This is the most common failure. The Event schema spec requires startDate in ISO 8601 format with a timezone offset. "Saturday, June 14" doesn't work. "2026-06-14" works for all-day events, but "2026-06-14T19:00" without a timezone offset is ambiguous and Google may reject it. The correct format is 2026-06-14T19:00:00-07:00 for a 7pm Pacific event.
Stale events. Google explicitly penalizes pages that list past events with future-looking schema. If your events page still has JSON-LD for last month's webinar, Google may suppress rich results for the entire page, including your upcoming events. The fix is simple (remove or update the schema when the event passes), but most CMS setups don't automate this.
Wrong or missing location. For in-person events, location needs to be a Place with name, address, and ideally geo coordinates. For online events, Google introduced VirtualLocation with an url property during 2020. Many sites still use Place for virtual events or omit the location entirely, which makes the schema invalid for rich result eligibility.
Missing performer or organizer. These aren't strictly required by the spec, but Google's documentation notes that events with performer or organizer properties are more likely to receive rich results. A local venue listing a concert without the performer's name is leaving data on the table.
What the audit checks
The Event Schema Audit parses your page's JSON-LD and Microdata looking for Event types, then validates each one against Google's rich result requirements. It checks for:
Required properties: name, startDate, location (with the correct sub-type for in-person vs. virtual). Missing any of these means no rich result.
Date format compliance: ISO 8601 with timezone offset. Flags dates that parse but lack timezone information, which can cause events to display at the wrong time in search results.
Stale event detection: events whose startDate or endDate has already passed. These should be removed from the schema or updated.
Location type matching: catches Place used for virtual events and VirtualLocation used for in-person events.
Optional but impactful properties: performer, organizer, offers (ticket pricing), image, and description. Each one increases rich result eligibility.
Schema that actually works
Here's what a correctly structured Event looks like:
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Summer Jazz Festival",
"startDate": "2026-07-12T18:00:00-05:00",
"endDate": "2026-07-12T23:00:00-05:00",
"location": {
"@type": "Place",
"name": "Riverside Amphitheater",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 River Road",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701"
}
},
"performer": {
"@type": "Person",
"name": "Sarah Mitchell Quartet"
},
"offers": {
"@type": "Offer",
"price": "35.00",
"priceCurrency": "USD",
"url": "https://example.com/tickets",
"availability": "https://schema.org/InStock"
},
"image": "https://example.com/images/jazz-fest.jpg",
"description": "An evening of live jazz on the riverfront."
}
Every field has a purpose. The timezone offset on startDate means Google displays the correct local time. The offers block enables the price and availability badge in the rich result. The image gives Google something to show in the visual carousel.
Building with events in mind
If you run a venue, a conference series, or a workshop business, event schema should be part of your CMS template, not something you add by hand each time. WordPress plugins like Events Calendar Pro and custom Eleventy data files both support auto-generating the JSON-LD from your event database.
Run the Event Schema Audit alongside the Schema JSON-LD Graph Linter to catch structural issues in your JSON-LD beyond just the Event type, and the Rich Results Eligibility tool to check whether Google currently considers your markup valid.
For anyone building an event-driven business, The $97 Launch covers how to structure your site so that every event page is both a landing page and a search-optimized entry point.
Fact-check notes and sources
- Google's Event structured data requirements and rich result eligibility: Source: Google Search Central, "Event structured data".
- VirtualLocation support added in 2020: Source: Schema.org release notes and Google's updated documentation for online events.
- ISO 8601 date format specification for timezone offsets: Source: ISO 8601:2004.
- Past-event schema suppression: Google's documentation recommends removing or marking past events to maintain page-level rich result eligibility.
Related reading
- Schema JSON-LD Graph Linter — structural validation for all your JSON-LD, not just events
- FAQ Schema Parity — another schema type where visible content and markup drift apart
- How-To Schema Audit — similar validation for instructional content markup
- Structured Data overview — the full picture of schema types and their search impact
This post is informational, not SEO-consulting advice. Mentions of Google and CMS platforms are nominative fair use. No affiliation is implied.