DEV TOOLBOX · SCHEMA MARKUP · NO SIGNUP
> schemapreview

Event schema

Event powers the events carousel and Google's dedicated events vertical (search "events near me"). Done right, you get a date block, venue, time, and a price-from line directly in the SERP.

Required fields

  • name — event name as you want it shown.
  • startDate — ISO 8601 with timezone, e.g. 2026-09-15T19:30:00+01:00.
  • location — for in-person events, Place with a PostalAddress. For online, VirtualLocation with url.

Strongly recommended

  • endDate — ISO 8601, same format.
  • eventStatusEventScheduled, EventCancelled, EventMovedOnline, EventPostponed, EventRescheduled. Use the URL form (https://schema.org/EventScheduled). Critical post-2020 if dates change.
  • eventAttendanceModeOfflineEventAttendanceMode, OnlineEventAttendanceMode, or MixedEventAttendanceMode.
  • offersOffer with price, priceCurrency, availability, and url (the ticket purchase link). Without this, no "From €X" in the SERP.
  • performerPerson or Organization.
  • image — at least one URL.
  • description — used as the snippet.

Rules

  • Each event = one URL. Don't put a season of events on one page; create individual pages or a hub page that links to each.
  • Update eventStatus if anything changes. Stale EventScheduled on a cancelled event is grounds for Google removing your event listing entirely.
  • For recurring events, use the parent-child pattern: a series Event with subEvent children.

Common mistakes

  1. Missing timezone on startDate. Treated as UTC, which may misalign with the venue's local time.
  2. location.address missing addressCountry. Country code is required even if the city is universally recognised.
  3. Marking up past events. Google indexes them but the events vertical excludes anything in the past, so the rich result vanishes the day after.

CMS notes

  • WordPress (The Events Calendar): emits valid Event schema by default.
  • Ticketing platforms (Eventbrite, Ticketmaster): they emit Event schema on their hosted pages. Don't duplicate it on your own listing page — Google merges them.
  • Custom: generate startDate from the same field you display, including timezone offset.

Generate it below

Last verified: 2026-05-15. Found something inaccurate? Email hello@schemapreview.dev.

Google's Event docs ↗

TYPE
02 — PROPERTIES
Location*
Address+
Tickets+
03 — PREVIEW
Google preview · approximate
Event name
No venue
VALIDATION
× Not eligible3 errors · 7 warnings
  • nameRequired property "Event name" is missing.docs ↗
  • startDateRequired property "Start date/time" is missing.docs ↗
  • locationRequired property "Location" is missing.docs ↗
  • endDateRecommended property "End date/time" is missing.docs ↗
  • eventStatusRecommended property "Status" is missing.docs ↗
  • eventAttendanceModeRecommended property "Attendance mode" is missing.docs ↗
  • imageRecommended property "Image URL" is missing.docs ↗
  • descriptionRecommended property "Description" is missing.docs ↗
  • offersRecommended property "Tickets" is missing.docs ↗
  • performerRecommended property "Performer name" is missing.docs ↗
04 — COPY
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event"
}
</script>