What Is Event Schema? The Complete Guide (2026)

Saar Twito10 min read
Saar Twito
Saar TwitoFounder & SEO Engineer

Hi, I'm Saar - a software engineer, SEO specialist, and lecturer who loves building tools and teaching tech.

View author profile →

What Is Event Schema?

Event schema is a type of structured data — based on the Schema.org Event vocabulary — that tells Google a page describes a specific event: a concert, a conference, a sports match, a theater show, or any other time-bound gathering. When correctly implemented, Google can display your event in a dedicated rich results carousel showing the event name, date, location, and a direct link to buy tickets — all without the user having to click into your page.

Event rich results appear prominently above organic search listings and in Google Maps, putting your event in front of people actively looking for things to do. According to Google, event rich results drive significantly higher click-through rates than standard blue-link results.

TL;DR
  • Event schemais JSON-LD markup that enables Google's event rich results carousel — showing date, location, and ticket info in search.
  • Three required fields: name, startDate (ISO 8601 with timezone), and location (a physical address — online-only events do not qualify for rich results).
  • For cancelled or rescheduled events, use eventStatus. Always keep startDate in the markup even if the event is cancelled. Add previousStartDate when rescheduled.
  • Offer price must be a plain number — no currency symbols, no commas. Use priceCurrency for the 3-letter ISO 4217 code.

How Event Schema Appears in Google Search

Google displays qualifying events in a scrollable carousel at the top of search results. Each card in the carousel shows:

  • The event name and thumbnail image
  • The date and time
  • The venue name and city
  • A ticket link (if offers.url is present)

These carousels appear for queries like "concerts near me," "Taylor Swift tour dates," or "tech conferences 2026" — making Event schema particularly valuable for venues, promoters, conference organizers, and ticketing platforms. Each event in the carousel links directly to its own URL, so structured data must be present on the individual event page — not a listing page.

Events That Do NOT Qualify for Google Rich Results

Google disqualifies several categories of events from appearing as rich results, regardless of how correctly the schema is implemented:

DisqualifierWhy It's Excluded
Online-only events (no physical location)Google requires a physical venue for Event rich results. A VirtualLocation-only event will not appear in the carousel.
Membership or invitation-only eventsThe event must be bookable by the general public. Ticket purchase URLs must be openly crawlable by Googlebot without login walls.
School events where participants and audience are minorsSpectator events held on school premises where the primary participants are minors are not eligible.
Non-events (coupons, discounts, business hours)Marking promotions or operational information as events is a policy violation and will result in manual actions.
Multiple simultaneous events at one URLEach event must have its own dedicated URL with schema on that specific page. Listing pages aggregating many events are not eligible.

Note: online-only events can and should still use Event schema for AI search visibility, voice assistants, and knowledge graph enrichment — they just won't appear in Google's visual event carousel.

Required Properties

Google requires three properties for an event to be eligible for rich results. Missing any one of them will prevent the event from appearing in the carousel.

PropertyTypeDescription
nameTextThe full title of the event. Use a specific, descriptive name — avoid generic terms like "Concert" or "Show" alone. Do not include promotional language such as "Buy tickets now" or discount offers. The venue name belongs in location.name, not here.
startDateDateTimeThe event start date and time in ISO 8601 format. Always include a timezone offset (e.g., 2026-09-15T19:30:00-05:00). If the start time is genuinely unknown, use date-only format (2026-09-15). Avoid using T00:00:00 as a placeholder — Greadme flags this as a warning because midnight start times are typically an error, not an actual event time.
locationPlace or VirtualLocationFor physical events: a Place object containing a nested PostalAddress. Include streetAddress, addressLocality, postalCode, addressRegion, and addressCountry. For online events: a VirtualLocation object with a url — but note that online-only events do not qualify for Google Event rich results.

Recommended Properties

These properties are not required for rich result eligibility, but each one improves how your event appears in Google Search and how accurately AI assistants can describe it. Greadme deducts score for missing recommended fields.

PropertyTypeNotes
descriptionTextA clear description of what makes this specific event unique. Minimum 50 characters — Greadme flags shorter descriptions as warnings.
endDateDateTimeEvent end date and time in ISO 8601 format. Required for multi-day events. Use the same timezone format as startDate.
imageImageObject or URLEvent imagery. Google recommends providing three aspect ratios: 16:9, 4:3, and 1:1. Minimum width: 720px; recommended: 1920px. Minimum total pixels: 50,000. Images must be crawlable and indexable by Googlebot.
eventStatusEventStatusTypeThe current status of the event. See the Event Status section below for all valid values. Defaults to EventScheduled if omitted.
offersOfferTicket pricing, availability, and purchase URL. See the Offers section below for full details.
organizerOrganization or PersonThe host of the event. Include both name and url. Greadme warns separately for missing name and missing URL.
performerPerson or PerformingGroupArtists, speakers, comedians, or other participants. Include name on each performer object. Use an array for multiple performers.
location.nameTextThe venue or place name (e.g., "Madison Square Garden"). Greadme warns if this is missing and also warns if it duplicates the event name — the two should always be different values.
eventAttendanceModeEventAttendanceModeEnumerationWhether the event is in-person, online, or hybrid. See the Attendance Mode section below.
isAccessibleForFreeBooleanSet to true for free events. When used, also set offers.price to 0 for completeness.

eventStatus: Cancelled, Postponed, and Rescheduled Events

When an event's status changes, update the eventStatusproperty immediately rather than removing the schema. Google uses the status to update how your event appears in search results — a cancelled event can still surface with a "Cancelled" badge, which is more helpful to users than a dead page.

ValueMeaningAdditional requirement
EventScheduledEvent proceeds as planned. This is the default.None
EventCancelledEvent has been cancelled.Keep startDate in the markup. Do not remove it even though the event is no longer happening.
EventPostponedEvent is delayed; no new date has been set yet.None
EventRescheduledEvent has been moved to a new date.Must include previousStartDate with the original start date. Greadme flags this as a warning if omitted. Update startDate to the new date.
EventMovedOnlineEvent has moved to an online format. (Schema.org only)Not explicitly listed in Google's rich results documentation. Use with caution; pair with eventAttendanceMode: OnlineEventAttendanceMode.

Values can be written in short form ("EventCancelled") or full URL form ("https://schema.org/EventCancelled"). Greadme accepts both.

Offers: Ticket Pricing and Availability

The offers property tells Google and search users the ticket price, where to buy, and whether tickets are still available. This is one of the most impactful properties for driving clicks from the event carousel — users see the price range before clicking.

PropertyTypeNotes
priceNumberThe ticket price as a plain number — no currency symbol, no comma separators. Example: 49 or 49.99. Greadme throws an error if the value contains "$", "€", or commas. For free events, use 0.
priceCurrencyTextThe 3-letter ISO 4217 currency code. Examples: "USD", "EUR", "GBP".
availabilityItemAvailabilityOnly three values are valid for events: InStock (tickets available), SoldOut, or PreOrder (on sale soon). Greadme rejects any other value.
urlURLDirect link to the ticket purchase page. Must be publicly accessible without login — Googlebot must be able to crawl it.
validFromDateTimeThe date and time when tickets go on sale. Must be in ISO 8601 format. Useful for pre-sale announcements.

For events with multiple ticket tiers, use an array of Offer objects. For events with a price range (e.g., floor and VIP tickets), use an AggregateOffer with lowPrice and highPrice.

eventAttendanceMode: In-Person, Online, or Hybrid

The eventAttendanceMode property explicitly signals how attendees participate. While optional, it is strongly recommended — especially for hybrid events where both physical and online attendance is possible.

ValueUse caselocation type
OfflineEventAttendanceModeIn-person only eventPlace with PostalAddress
OnlineEventAttendanceModeOnline-only event (no physical venue)VirtualLocation with url — note: not eligible for Google Event rich results
MixedEventAttendanceModeBoth in-person and online attendance availableArray: one Place and one VirtualLocation

Use the full Schema.org URL form for these values: "https://schema.org/OfflineEventAttendanceMode".

Complete Implementation Examples

1. Standard Physical Event with Tickets

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Jazz & Blues Festival 2026",
  "startDate": "2026-09-12T18:00:00-05:00",
  "endDate": "2026-09-12T23:00:00-05:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "description": "Live jazz and blues, 12 artists, 3 stages.",
  "image": [
    "https://example.com/img/festival-16x9.jpg",
    "https://example.com/img/festival-4x3.jpg",
    "https://example.com/img/festival-1x1.jpg"
  ],
  "location": {
    "@type": "Place",
    "name": "Millennium Park",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "201 E Randolph St",
      "addressLocality": "Chicago",
      "addressRegion": "IL",
      "postalCode": "60601",
      "addressCountry": "US"
    }
  },
  "organizer": {
    "@type": "Organization",
    "name": "Chicago Music Foundation",
    "url": "https://example.com"
  },
  "performer": [
    { "@type": "MusicGroup", "name": "The Blue Notes" },
    { "@type": "Person", "name": "Maria Estrada" }
  ],
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/tickets",
    "price": 35,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-06-01T09:00:00-05:00"
  }
}

2. Rescheduled Event

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Annual Developer Conference 2026",
  "startDate": "2026-10-20T09:00:00-07:00",
  "endDate": "2026-10-22T18:00:00-07:00",
  "eventStatus": "https://schema.org/EventRescheduled",
  "previousStartDate": "2026-09-15T09:00:00-07:00",
  "description": "3-day conference for software developers. Moved to October.",
  "location": {
    "@type": "Place",
    "name": "Moscone Center",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "747 Howard St",
      "addressLocality": "San Francisco",
      "addressRegion": "CA",
      "postalCode": "94103",
      "addressCountry": "US"
    }
  },
  "organizer": {
    "@type": "Organization",
    "name": "DevConf Foundation",
    "url": "https://example.com"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/tickets",
    "price": 499,
    "priceCurrency": "USD",
    "availability": "https://schema.org/PreOrder"
  }
}

3. Free Hybrid Event (In-Person + Online)

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Product Design Summit: The Future of UX",
  "startDate": "2026-11-05T10:00:00-08:00",
  "endDate": "2026-11-05T17:00:00-08:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/MixedEventAttendanceMode",
  "isAccessibleForFree": true,
  "description": "Full-day UX summit. Attend in Seattle or stream online free.",
  "image": "https://example.com/img/ux-summit-2026.jpg",
  "location": [
    {
      "@type": "Place",
      "name": "Seattle Convention Center",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "705 Pike St",
        "addressLocality": "Seattle",
        "addressRegion": "WA",
        "postalCode": "98101",
        "addressCountry": "US"
      }
    },
    {
      "@type": "VirtualLocation",
      "url": "https://example.com/live"
    }
  ],
  "organizer": {
    "@type": "Organization",
    "name": "UX Collective",
    "url": "https://example.com"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/register",
    "price": 0,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

7 Common Event Schema Mistakes

1. Using Midnight as a Default Start Time

Setting "startDate": "2026-09-15T00:00:00" when the actual start time is unknown is a common mistake. Google interprets this literally as a midnight event. If the time is unknown, use date-only format: "2026-09-15". Greadme flags the midnight pattern as a warning.

2. Putting the Venue Name in the Event Name

"name": "Jazz Festival at Millennium Park"is not wrong per se, but it violates Google's guidance to keep the venue in location.name. Use "name": "Jazz Festival 2026" and put "Millennium Park" in location.name.

3. Promotional Language in the Event Name

"name": "Jazz Festival — Buy Tickets Now! 30% Off" is a policy violation. The namefield must contain the event title only. Greadme detects and warns for keywords like "buy", "sale", "discount", "%", or "$" in the event name.

4. Using a Currency Symbol in the Price

"price": "$49" or "price": "49,00" will cause a Greadme error. Price must be a plain number: 49 or 49.99. The currency goes in the separate priceCurrency field.

5. Missing previousStartDate When EventRescheduled

When you set "eventStatus": "EventRescheduled", you must also include previousStartDate with the original start date. Greadme warns if previousStartDate is absent. Conversely, if you include previousStartDate but forget to set the status to EventRescheduled, Greadme also warns.

6. Using VirtualLocation and Expecting Rich Results

A common misconception: online-only events are automatically excluded from Google's Event rich results carousel. If location is VirtualLocation only (with no physical Place component), Greadme deducts 15 points and shows a warning. Add Event schema anyway for AI assistant visibility — but do not expect the Google carousel.

7. Removing startDate When Cancelling

When an event is cancelled, a natural instinct is to remove or blank out startDate. Don't — Google requires startDate to remain in the markup even for cancelled events. Simply update eventStatus to EventCancelled and leave the rest intact.

Event Schema and AI Search Visibility

AI search platforms — including Google AI Overviews, ChatGPT Search, and Perplexity — increasingly source event information from structured data. When a user asks "What concerts are happening in Chicago in September?" these systems extract event details from JSON-LD markup on event pages.

Even for online-only events that don't qualify for Google's visual carousel, complete Event schema significantly improves how accurately AI assistants describe your event: the title, date, location, performer names, and ticket link all become structured, machine-readable facts that AI systems can extract and cite rather than infer from unstructured body text.

For recurring events such as weekly workshops or monthly meetups, use the eventSchedule property with a Schedule object (from Schema.org) to describe the recurrence pattern — this gives AI systems a richer signal than duplicating the same event markup across dozens of individual pages.

How to Validate Your Event Schema

Paste your event page URL into Greadme to validate your Event schema. Greadme checks every required and recommended field, detects promotional language in the event name, flags midnight start time placeholders, warns about VirtualLocation-only events, and verifies that previousStartDate and eventStatus are consistent with each other. The score report shows exactly which fields are missing or misconfigured so you can fix them before submitting to Google.