TechnicalSchema

Event Schema: Google's Rules, Status and Dates

Event schema is structured data using the schema.org Event type to describe one event on its own page: what it is, when it starts, where it happens, and how to get tickets. Google requires three properties (name, startDate and location) and uses the markup to make pages eligible for its event experience in Search and Maps. The details that trip people up are what counts as an event, how to handle cancellations, and the fact that Google no longer supports online-only events.

This guide is for venues, promoters, ticket sellers and anyone who runs events from their own site. It covers the properties Google uses, its content rules, the current position on online events, status changes, dates and time zones, and a complete example.

On this page

Event markup makes a page eligible for Google’s event experience, an interactive result that lists upcoming events with dates, venues and ticket links. Google’s event structured data documentation says the experience appears in Search and “other Google products, like Google Maps”, and cites Eventbrite seeing “a 100% increase in the typical year-over-year growth of traffic from Google Search”.

Before you write any markup, check whether you need to. Google lists three routes to eligibility:

  1. You post events on a ticketing or social platform that already integrates with Google. Keep posting there; Google says “you can stop reading here”.
  2. You use a CMS without HTML access. Look for a plugin that outputs event structured data.
  3. You can edit your HTML. Add the markup yourself, one event per page.

Beyond Google, clear event facts help any assistant that answers “what’s on near me this weekend” describe your event correctly. Which types matter for AI answers generally is covered in structured data for AI search.

The experience isn’t available everywhere. Google’s documentation lists Australia, Brazil, Canada, Germany, India, Latin America, Spain, the United Kingdom and the United States, each with specific languages. Schema.org’s own Event page reports the type in use on 100,000 to 1 million domains, based on Google’s web index.

Google requires name, startDate and location, where location is a Place with a name and a PostalAddress. Everything else is recommended.

PropertyStatusGoogle’s rule worth knowing
nameRequiredThe event’s title, not the venue; no prices, URLs or “buy now”
startDateRequiredISO 8601 with a UTC offset; date only if the time isn’t known
locationRequiredA Place with name and a detailed address
descriptionRecommendedEvent details; don’t repeat date and venue
endDateRecommendedSame format as startDate
eventStatusRecommendedDefaults to scheduled if omitted
imageRecommended1920px wide recommended, 720px minimum
offersRecommendedOne Offer per ticket type; lowest price including fees
organizerRecommendedPerson or Organization, with name and url
performerRecommendedPerson or PerformingGroup, one per performer
previousStartDateRecommendedOnly with EventRescheduled

The offers.url has its own requirements: it must lead to a page that “clearly and predominantly provides the opportunity to buy a ticket” to that event, and it must be crawlable. If tickets aren’t on sale yet, Google says you can omit availability and set validFrom to the on-sale date. For a free event, set price to 0.

What counts as an event?

An event, for Google, is something bookable by the general public that happens at a specific time in a physical place. Its guidelines rule out several things site owners are tempted to mark up:

  • Non-event products or services, such as “Trip package: San Diego/LA, 7 nights”
  • Short-term sales: “Concert, buy your tickets now” or “50% off until Saturday”
  • Business hours, such as “Adventure park open 8 AM to 5PM”
  • Coupons and vouchers
  • Events that require a membership or invitation before you can buy a ticket or attend
  • Spectator events on school premises where the participants and audience are mainly minors

Getting this wrong has a documented consequence. Google’s manual actions report lists “Non-event labeled as an event” and “Event structured data is actually a promotion” among its structured data issues. A structured data manual action removes rich result eligibility; Google’s general guidelines say it “doesn’t affect how the page ranks”.

Structure matters too. Each event needs its own page and URL, and Google recommends marking up event pages rather than pages that list schedules. A three-day festival gets one Event with a start and end date. A show with separate performances on different days, each with its own tickets, gets a separate Event for each performance.

Online, hybrid and in-person events: what Google supports now

Google’s event experience now supports in-person events only. Its current content guidelines say: “Virtual experiences that have no real-world component aren’t supported. Events must take place in a physical location.” The timeline below shows how that position changed.

How Google's support for online events changed between 2020 and 2026 Two panels. Left panel, March 2020: Google added optional properties for virtual, postponed and canceled events during COVID-19, including VirtualLocation, eventAttendanceMode set to OnlineEventAttendanceMode, and the EventMovedOnline status. Right panel, current documentation in 2026: virtual experiences with no real-world component are not supported; events must take place in a physical location; Google's supported eventStatus values are EventCancelled, EventPostponed, EventRescheduled and EventScheduled. A bottom band notes that schema.org still defines VirtualLocation, the attendance modes and EventMovedOnline, so the markup validates but does not earn Google's event feature. Online events in Google: then and now The vocabulary stayed; Google's support didn't March 2020 Google adds optional properties for virtual, postponed and canceled events: location: VirtualLocation eventAttendanceMode: Online eventStatus: EventMovedOnline Current docs (2026) Virtual-only events not supported Events must take place in a physical place Supported statuses: Cancelled, Postponed, Rescheduled, Scheduled (EventMovedOnline no longer listed) Schema.org still defines VirtualLocation, attendance modes and EventMovedOnline. The markup validates; it just doesn't earn Google's event feature.

Scroll the diagram sideways to see all of it.

Source: Ambeltek diagram based on Google Search Central's March 17, 2020 post on virtual and canceled events, Google's current Event documentation, and schema.org's EventStatusType page.

In March 2020, Google’s post on virtual, postponed and canceled events told organizers to set location to VirtualLocation and eventAttendanceMode to OnlineEventAttendanceMode for online-only events, and offered EventMovedOnline as a status. Many guides still repeat that advice. The current documentation drops it: the supported eventStatus values are EventCancelled, EventPostponed, EventRescheduled and EventScheduled.

What that means in practice:

  • Webinars and online-only classes won’t appear in Google’s event experience, whatever the markup says. Schema.org’s EventStatusType still includes EventMovedOnline, and the markup remains valid for other consumers, but don’t build a plan around Google showing it.
  • Hybrid events with a real venue have a real-world component, so the online-only exclusion doesn’t apply to them. Mark up the physical venue as the Place. Google doesn’t document how it treats the online part.
  • In-person events are the core use case. Put the effort there.

How do you update eventStatus when plans change?

Change the status and leave everything else alone. Google’s documentation warns: “When the event status changes, DON’T remove the startDate”, because the start date and location identify the unique event. The flow below shows each case.

What to change in event markup for each eventStatus value A flow starting from EventScheduled, the default when eventStatus is omitted. Three branches. Canceled: set EventCancelled and keep startDate, location and every other property unchanged. Postponed with no new date: set EventPostponed and keep the original startDate until a new date is known. Rescheduled to a known date: set startDate and endDate to the new dates, optionally set EventRescheduled and add previousStartDate with the old date. A dotted arrow shows Postponed moving to Rescheduled once the new date is announced. A footer says previousStartDate may only be used with EventRescheduled. When plans change, change the status, not the identity startDate and location are how Google tells which event you mean EventScheduled default if omitted Canceled EventCancelled; keep startDate, location and all else unchanged Postponed, new date unknown EventPostponed; keep the original startDate for now Rescheduled to a known date New startDate and endDate; optionally EventRescheduled plus previousStartDate with the old date previousStartDate is only valid with EventRescheduled. Don't pair it with other statuses.

Scroll the diagram sideways to see all of it.

Source: Ambeltek diagram based on the eventStatus and previousStartDate definitions in Google's Event structured data documentation.

A postponed event moves to rescheduled once you know the new date: switch the status, put the new dates in startDate and endDate, and optionally record the old date in previousStartDate. In the rare case of an event rescheduled more than once, Google says previousStartDate may be repeated.

Status values are an enumeration, so spelling matters. In a test we ran in the Schema Markup Validator on September 22, 2026, "eventStatus": "Cancelled" returned an error listing the accepted values; the correct value is https://schema.org/EventCancelled.

Dates, times and time zones

Most event markup errors are date errors. Google’s documentation asks for ISO 8601 dates with the UTC offset of the event’s location, and gives specific rules for edge cases.

  • Known start time: include the offset. An event at 7pm in New York during daylight saving time is 2026-10-15T19:00:00-04:00.
  • Day-long event, or time not announced: give the date only, like 2026-10-15. Don’t invent midnight.
  • Multi-day event: give both startDate and endDate.

Google’s documentation shows why midnight is a trap, with worked examples of how it reads different date strings. The diagram below reproduces them.

How Google interprets four startDate strings, from its Event documentation Four rows. 2019-08-15T00:00:00+00:00 is read as 2019-08-14 at 17:00 minus 07:00 for a California venue, or 2019-08-15 at 09:00 in Korea, so a UTC midnight becomes the previous afternoon in California. 2019-08-15T23:59:59+00:00 is read as 16:59:59 on August 15 in California or 08:59:59 on August 16 in Korea, so it does not mean end of day. 2019-07-10 means that date in the event's location regardless of time zone, which is correct for day-long events or unknown start times. 2019-07-20T00:00:00 means midnight local time, which Google calls likely wrong unless the event really starts at midnight. What Google reads from your startDate Google's own examples; the dates are from its documentation You write Google reads Verdict 2019-08-15T00:00:00+00:00 Aug 14, 17:00 in California Wrong day 2019-08-15T23:59:59+00:00 Aug 16, 08:59 in Korea Not "end of day" 2019-07-20T00:00:00 Midnight, local time Likely wrong 2019-07-10 That date, wherever the event is Right if time unknown

Scroll the diagram sideways to see all of it.

Source: Ambeltek diagram based on the "Examples of how Google interprets dates" table in Google's Event structured data documentation.

A bare 2019-07-20T00:00:00 is, in Google’s words, “likely wrong unless the event was meant to start at midnight”. Dates that come from a template default often produce exactly this. If you’re unsure how the date fields sit inside the markup, the JSON-LD guide walks through the syntax.

A complete event schema example

Here’s a complete block for a single in-person concert with one ticket type. Replace every value with your own and keep it identical to what the page shows.

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "The Harbor Lights: Autumn Tour, feat. Q&A with the band",
  "startDate": "2026-10-15T19:30:00-04:00",
  "endDate": "2026-10-15T22:30:00-04:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "description": "An evening set of the album in full, followed by a 20-minute audience Q&A.",
  "image": ["https://example.com/img/harbor-lights-1920x1080.jpg"],
  "location": {
    "@type": "Place",
    "name": "Riverside Music Hall",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "200 River Rd",
      "addressLocality": "Springfield",
      "addressRegion": "MA",
      "postalCode": "01103",
      "addressCountry": "US"
    }
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/tickets/harbor-lights-oct-15/",
    "price": 35.00,
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-08-01T10:00:00-04:00"
  },
  "performer": { "@type": "PerformingGroup", "name": "The Harbor Lights" },
  "organizer": { "@type": "Organization", "name": "Riverside Music Hall", "url": "https://example.com/" }
}

Note what isn’t in the name: no venue, no price, no “tickets on sale”. Google’s best practice is a title that highlights “a unique aspect of the event”, which is why the Q&A is there. Test the live page in the Rich Results Test, which supports Event, and use the preview to check the date and venue read correctly.

Events can also carry reviews and ratings; Event is one of the types Google lists as eligible in its review snippet guidelines, covered in review schema. If the venue itself has a page, describe it with local business schema and keep its name identical to location.name.

Keeping event schema accurate through the event lifecycle

Event schema goes stale faster than any other type. Every event has a lifecycle (announced, on sale, sold out, maybe postponed, over) and the markup has to follow it.

A lifecycle checklist:

  1. At announcement: publish the event page with name, startDate, location and eventStatus. If tickets aren’t on sale, omit availability and set validFrom.
  2. At on-sale: add availability: InStock and the lowest price including fees.
  3. When it sells out: switch to SoldOut. Google asks you to update the price “as prices change or tickets sell out”.
  4. If plans change: update eventStatus as shown above, never deleting startDate.
  5. After it ends: Google’s general guidelines say it won’t show rich results for time-sensitive content that is no longer relevant. Keep the page for history, but don’t expect it in the event experience.

Generate the markup from your event database or ticketing system so these changes happen automatically; hand-edited event markup is how canceled shows keep appearing as on sale. After changes, Google’s 2020 events post recommended making your sitemap available automatically through your server so updates are found quickly, and Search Console’s Events report shows valid and invalid items at scale (see our Google Search Console guide).

If you publish a large calendar, run events across several venues, or need markup generated from a ticketing feed, our schema markup service builds event markup from your source data and tests every template.

Frequently asked questions

What is event schema?

Event schema is structured data using the schema.org Event type to describe a single event on its own page: its name, start date and time, venue and address, tickets, organizer and status. Google uses it to make pages eligible for the event experience in Search and other products such as Maps.

What is an example of event schema?

A minimal example is a JSON-LD block with @type Event, a name such as the concert title, a startDate with a time and UTC offset, and a location of type Place with a name and PostalAddress. Google requires those three properties; offers, image, description, organizer and eventStatus are recommended.

Does Google support event schema for online events?

Not in its event experience any more. Google's current guidelines say virtual experiences with no real-world component are not supported and that events must take place in a physical location. Schema.org still defines VirtualLocation and online attendance modes, so the markup remains valid; it just will not earn Google's event feature.

What should I do in event schema when an event is canceled?

Set eventStatus to EventCancelled and leave everything else, including startDate and location, exactly as it was. Google uses those properties to identify the event, so removing or changing them makes it harder to show people that this specific event was canceled.

Can I use event schema for a sale or a promotion?

No. Google's guidelines tell you not to mark up non-events such as short-term discounts, coupons, trip packages or business hours as events. Google's manual actions list includes both non-events labeled as events and event markup that is really a promotion.

Where is Google's event search experience available?

Google's documentation lists Australia, Brazil, Canada, Germany, India, Latin America, Spain, the United Kingdom and the United States, in the languages listed for each region, such as English in the United States and Portuguese in Brazil.

OK

Olga Kunger

Founder & Lead Strategist, Ambeltek

Olga leads Ambeltek's web development, AI SEO, and GEO work — helping brands rank on Google and get cited by AI engines. More about Olga →

Want structured data that engines trust?

We audit, design and ship connected JSON-LD for your whole site, validated and monitored.