Event schema markup generator
Event markup describes something happening at a time and a place. It is one of the types where the date format does most of the damage.
Reference copy unfinished. The generator below works and produces valid markup. The explanatory sections are still being written, so this page is not listed for search engines yet.
Google Search features this type can produce
From the registry| Feature | Status | Surface | Last verified |
|---|---|---|---|
| Event (opens in a new tab) | ACTIVE | search | 2026-08-29 |
Meeting a feature’s documented requirements does not guarantee that the feature appears. No tool can promise that, and any that does is describing something it cannot know.
Generate the markup
Runs in your browser<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Autumn Coffee Festival",
"endDate": "2026-09-14T17:00:00+01:00",
"location": {
"@type": "Place",
"name": "Marlow Road Warehouse",
"address": "14 Marlow Road, London SE15 5AA"
},
"offers": {
"@type": "Offer",
"price": 12,
"priceCurrency": "GBP"
},
"startDate": "2026-09-14T10:00:00+01:00"
}
</script>Paste this into the <head> of the page it describes. Markup that describes a page must live on that page.
startDate is where events go wrong
startDate takes ISO 8601, and it should carry a time zone offset whenever the event has a start time. A value ending +01:00 is unambiguous; a bare local time is not, and a consumer resolving it against the wrong zone shows your event an hour out.
endDate matters more than people assume. Without it, a consumer has no way to tell an evening from a three-day festival, and an event with no end is often treated as having passed the moment it starts.
One entity per event
A page listing twelve events carries twelve Event entities, not one. Marking the listing page as a single Event describes something that does not exist, and it is the most common failure on venue and ticketing sites.
eventStatus and eventAttendanceMode are worth setting explicitly. A cancelled event that says nothing about its status reads as going ahead, and an online event with a physical address describes a room nobody needs to travel to.
Mistakes worth avoiding
Local times with no offset
A start time without a time zone is a guess. Include the offset.
Marking up non-events
Coupons, opening hours and general availability are not events, and Event markup does not describe them.
Leaving cancelled events as scheduled
eventStatus exists for exactly this. A cancelled event that still reads as scheduled sends people to a locked door.
Check what you already have
If the page you are marking up already carries structured data, audit it before adding more. Duplicate entities from a theme and a plugin are the most common finding on established sites, and adding a third block makes it worse rather than better.