Skip to content

Event schema example

Google requires name, startDate and location for an Event, and a Place location needs an address. eventStatus and eventAttendanceMode tell Google whether the event is on, cancelled, postponed or online, and are how you update an event instead of deleting its markup.

JSON-LD ยท passes this validator with 0 errors
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MusicEvent",
  "name": "The Lowland Quartet: Spring Tour",
  "startDate": "2026-04-17T20:00:00+02:00",
  "endDate": "2026-04-17T22:30:00+02:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Paradiso",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Weteringschans 6-8",
      "addressLocality": "Amsterdam",
      "postalCode": "1017 SG",
      "addressCountry": "NL"
    }
  },
  "image": [
    "https://example.com/img/lowland-quartet.jpg"
  ],
  "description": "The quartet plays its new album in full, with support from Mira Vos.",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/tickets/lowland",
    "price": "32.50",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-01-10T10:00:00+01:00"
  },
  "performer": {
    "@type": "MusicGroup",
    "name": "The Lowland Quartet"
  },
  "organizer": {
    "@type": "Organization",
    "name": "North Sea Live",
    "url": "https://example.com"
  }
}
</script>

What Google checks

Event docs

Required: namestartDatelocation

Recommended: descriptionendDateeventStatuseventAttendanceModeimageoffersorganizerperformer

Taken from Google Search Central's documentation for this type. Meeting the requirements makes a page eligible; Google decides whether to show a rich result.

Mistakes the validator catches on Event

Deleting markup for a cancelled event
Keep it and set eventStatus to EventCancelled (or EventPostponed / EventRescheduled with previousStartDate).
location as plain text
Use a Place with a PostalAddress, or a VirtualLocation with a url for online events.
Start dates with no time zone
Add the offset (+02:00). Otherwise times can shift by hours in results.
Marking up a course or a coupon as an Event
Google's guidelines exclude promotions and multi-day non-event things; use Event only for a real happening at a time.

Paste your own version into the schema markup validator or test a live URL.

Questions

What is required for Event rich results?

name, startDate and location. For a physical Place the address is required too; for an online event, a VirtualLocation with url.

How do I mark an online event?

Set eventAttendanceMode to OnlineEventAttendanceMode and use a VirtualLocation with the URL as location.

Is "MusicEvent" OK instead of "Event"?

Yes. Subtypes such as MusicEvent, SportsEvent and TheaterEvent inherit Event's rules.

Other examples

ArticleProductFAQPageRecipeLocalBusinessOrganizationBreadcrumbListVideoObjectJobPostingReview