Fill in the details, take away the block
This event schema generator produces the Event JSON-LD that puts a date, a venue and a ticket link
into search results, calendars and aggregators. Type the facts, watch the block build itself as you
go, and copy it into the page. Nothing is sent anywhere; the work happens in the browser tab you are
reading this in.
The two fields that govern the rest
Most schema types are a flat list of properties. Event is not: two enumerated fields change what
the other fields are allowed to say.
eventAttendanceMode decides which location is legal. An in-person event takes a Place with a
PostalAddress. A fully online event takes a VirtualLocation with the URL of the stream. A hybrid
takes both, as an array. Marking an online event with a street address sends people to an empty
building, and it happens constantly — usually because the venue field was left filled in from last
year's page. This tool drops whichever node contradicts the mode you picked, and tells you it did.
eventStatus decides whether previousStartDate is required. Move a date and the markup has to
carry both the new time and the one it replaced, or a calendar that already stored the old entry has
no way to match them up. Choose Rescheduled here and the field appears, becomes mandatory, and is
checked like any other date.
Time zones are not optional
2026-11-14T19:30:00 is not a moment. It is a clock reading, and it means one thing on a server in
London and another in a listing shown in New York. Add the offset — +00:00 in winter, +01:00
during British Summer Time — or use Z for UTC.
The one case where a time is genuinely absent is an all-day event, and there the plain date
2026-11-14 is correct. The generator accepts it and flags it, so that a missing time is always a
decision rather than an oversight.
Recurring events are many events
There is no repeat rule in this vocabulary. A weekly quiz night is fifty-two events, each with its
own URL and its own startDate. One block claiming a range is wrong for every occurrence except the
first, and aggregators will show it as a single evening that lasts a year.
Cancelling is a change of status, not a deletion
The instinct when something falls through is to pull the page. Do the opposite: keep the URL, set
the status to cancelled, and leave the original startDate in place. That combination is the only
signal that tells the systems holding a copy of your event to mark it as off. A deleted page just
goes quiet, and the listing lingers.
What this checks, and what only Google can
The output is valid JSON-LD using schema.org properties with the value types they are defined to take. That is conformance, and it is what a generator can be held to. Feature eligibility is a separate judgement made by the search engine against your live page: paste the published URL into Google's Rich Results Test to see it. If the event sits at a venue you also run, the local business schema generator marks up the venue itself, and the breadcrumb schema generator handles the path from the listings page down to this date.