Event Schema: Time, Location, Online/Offline, and Event Cards
Event structured data enables concerts, exhibitions, lectures, competitions, and other events to appear as "event cards" in Google Search and event experiences, displaying time, location, and ticket entry points. The challenge lies not in the number of fields, but in accurately expressing three things: when, where (offline or online), and current status (scheduled, cancelled, or rescheduled).
What is Event#
Event describes a specific event with a clear occurrence time. Google uses it to generate event rich media cards in search results, and may incorporate it into event-related search experiences, displaying date, location, ticket links, and more.
Official documentation: Google Search Central: Event structured data.
Required and Recommended Fields#
| Field | Required | Description |
|---|---|---|
name | Required | Event name |
startDate | Required | Timezone-aware ISO 8601 date-time |
location | Required | Offline: Place, Online: VirtualLocation |
endDate | Recommended | End time, with timezone |
eventAttendanceMode | Recommended | Offline/online/hybrid |
eventStatus | Recommended | Scheduled/cancelled/rescheduled/moved online |
image | Recommended | Event poster or image |
offers | Recommended | Ticketing Offer, including price and purchase link |
performer / organizer | Recommended | Performers and organizer |
Offline Event Example#
{
"@context": "https://schema.org",
"@type": "Event",
"name": "2026 Chinese SEO Summit",
"startDate": "2026-09-12T09:30:00+08:00",
"endDate": "2026-09-12T18:00:00+08:00",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"image": "https://example.com/events/seo-summit.webp",
"location": {
"@type": "Place",
"name": "National Convention Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "7 Tianchen East Road",
"addressLocality": "Beijing",
"addressCountry": "CN"
}
},
"organizer": {
"@type": "Organization",
"name": "MagicSEO",
"url": "https://magic-seo.com/"
},
"offers": {
"@type": "Offer",
"price": 399,
"priceCurrency": "CNY",
"availability": "https://schema.org/InStock",
"url": "https://example.com/events/seo-summit/tickets",
"validFrom": "2026-07-01T10:00:00+08:00"
}
}
Online and Hybrid Events#
| Format | eventAttendanceMode | location |
|---|---|---|
| Offline only | OfflineEventAttendanceMode | Place + address |
| Online only | OnlineEventAttendanceMode | VirtualLocation + url |
| Hybrid offline/online | MixedEventAttendanceMode | Provide both Place and VirtualLocation |
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"location": {
"@type": "VirtualLocation",
"url": "https://example.com/live/seo-summit"
}
Status: Cancellation and Rescheduling#
| eventStatus | Meaning | Required Actions |
|---|---|---|
EventScheduled | Scheduled as planned | Default status |
EventCancelled | Cancelled | Update promptly, keep page with explanation |
EventRescheduled | Rescheduled | Update startDate, optionally keep previousStartDate |
EventMovedOnline | Moved online | Change attendanceMode + VirtualLocation |
Sync status changes to structured data and page content promptly to avoid giving users incorrect time and location information.
Date Formats#
startDateandendDateuse timezone-aware ISO 8601 date-time, like2026-09-12T09:30:00+08:00;- Timezone awareness prevents users in different regions from seeing incorrect times;
- Multi-day events use startDate/endDate to express span; don't split into fake events.
Why This Site Doesn't Implement Event#
This article doesn't host any actual event. Marking Event on a page without an event equals marking non-existent content.
Validation and Monitoring#
- Use Rich Results Test to check required fields like name, startDate, location.
- Confirm attendanceMode matches location type (online uses VirtualLocation).
- Verify dates, locations, and prices match visible page content.
- Update eventStatus and dates immediately after event cancellation/rescheduling.
- After launch, monitor invalid items in Search Console's event enhancement report.
Common Errors#
| Error | Why Risky | Fix |
|---|---|---|
| Dates without timezone | Time confusion across regions | Use timezone-aware ISO 8601 |
| Place for online events | Location type mismatch | Use VirtualLocation for online |
| Business hours as Event | Not a specific event | Only mark real events with times |
| Cancellation/rescheduling not updated | Misleads users | Promptly update eventStatus and dates |
| Splitting one event into multiple fake events | Inflates count | Multi-day events use start/endDate |
Event Launch Checklist#
- name, startDate, location complete
- startDate/endDate with timezone
- eventAttendanceMode matches location type
- Online uses VirtualLocation, hybrid provides both locations
- eventStatus reflects actual status
- offers provides price, currency, purchase link
- performer/organizer added as applicable
- Prompt update after cancellation/rescheduling
- Visible page content matches JSON-LD
- Rich Results Test shows no critical errors
Frequently Asked Questions#
What fields are required for Event structured data?
Google's required fields for Event are name, startDate, and location. For offline events, location uses Place with PostalAddress; for online events, use VirtualLocation with url. It's strongly recommended to add recommended fields like endDate, eventAttendanceMode, eventStatus, image, description, offers, performer, and organizer.
How do I write location for online events?
For online events, set eventAttendanceMode to OnlineEventAttendanceMode and use VirtualLocation as location, with url pointing to the viewing or participation address. For hybrid online/offline events, set eventAttendanceMode to MixedEventAttendanceMode and provide both Place and VirtualLocation.
How do I mark event cancellation or rescheduling?
Use eventStatus to express status: EventCancelled for cancellation, EventRescheduled for rescheduling, EventMovedOnline when moved online. When rescheduling, update startDate to the new date and optionally keep previousStartDate. Sync status changes promptly to avoid giving users incorrect time and location information.
What pages are suitable for Event markup?
Mark specific events with clear occurrence times, such as concerts, exhibitions, lectures, or competitions. Don't treat business hours, long-term facilities, or promotional periods as Events, and don't mark events that don't actually exist on the page. Dates and locations must match visible page content.