Schema markup and structured data

Event Schema Markup for Search-Ready Event Pages

A practical guide to event schema markup: required properties, a working JSON-LD example, common mistakes, and how to validate your structured data for event rich results.

On this page

Event pages have a short shelf life and a specific job: get someone to show up. Structured data is how you tell Google, Bing, and assistants the four things they need to render an event result: what it is, when it starts, where it happens, and how to attend. Get those right and your listing can appear with a date, venue, and ticket link attached, which is a lot more useful than a blue link on its own.

This is a supporting topic under the broader subject of what schema markup is. Here I want to stay narrow and cover the Event type specifically: the properties that matter, a copy-ready example, the mistakes that get pages disqualified, and how to check your work.

What event schema markup describes

The schema.org Event type covers "an event happening at a certain time and location, such as a concert, lecture, or festival." Ticketing details attach through the offers property. According to schema.org's own usage data, the Event type appears on roughly 100K to 1M domains, so it is well-established vocabulary that the major engines recognize.

Event markup can be used across a wide range of formats. Search Engine Watch's guide to event schema lists business events, courses, dance and music events, exhibitions, festivals, food events, hackathons, screenings, sports events, and theater events, among others. You can also connect a series of related events. What you should avoid is marking up things that are not events at all.

Required properties and eligibility

An event record starts with the three core properties below. For Google eligibility, the location also needs a detailed physical address:

  • name: the full event title, without prices or promotional text baked in
  • startDate: the start date and time in ISO 8601 format, in the local timezone; if you do not have an exact time, leave it off rather than guessing
  • location: for physical events, a Place with a venue name and a detailed address

Recommended properties add context once the required event and address fields are complete.

The optional properties worth adding

These are not required, but they let more detail surface and reduce ambiguity for engines and assistants:

PropertyWhy it helps
endDateSignals duration; useful for multi-day conferences and festivals
eventAttendanceModeMarks the event as online, offline, or mixed; critical for virtual events
eventStatusCommunicates scheduled, cancelled, postponed, rescheduled, or moved-online states
offersTicket URL, price, currency, and availability
performerThe act, speaker, or group appearing
organizerWho is running the event
imageGives the result a visual
descriptionPlain-language summary for users

On eventStatus, Rank Math's event schema documentation spells out the practical workflow: if an event is postponed to an unknown date use the postponed status, and once you have a new confirmed date switch it to rescheduled and update startDate and endDate. Keeping that field current is how you avoid sending people to a cancelled show.

A worked JSON-LD example (hypothetical)

Here is a complete, illustrative example for a made-up in-person event. Values are invented for demonstration. Adjust the timezone offset, currency, and dates to your own.

{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Coastal Sound Festival 2026",
  "startDate": "2026-10-18T18:00:00-07:00",
  "endDate": "2026-10-18T23:00:00-07:00",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "Place",
    "name": "Harbor Green Amphitheater",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "400 Marina Blvd",
      "addressLocality": "San Diego",
      "addressRegion": "CA",
      "postalCode": "92101",
      "addressCountry": "US"
    }
  },
  "image": ["https://example.com/events/coastal-sound.jpg"],
  "description": "An outdoor evening of live coastal-inspired music with four acts.",
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/tickets/coastal-sound-2026",
    "price": "45.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-09-01T09:00:00-07:00"
  },
  "performer": {
    "@type": "MusicGroup",
    "name": "The Tidewater Trio"
  },
  "organizer": {
    "@type": "Organization",
    "name": "Harbor Events Co.",
    "url": "https://example.com"
  }
}

A few details in that block do heavy lifting. The country code uses the two-letter ISO 3166-1 alpha-2 format (US), which Rank Math flags as a common requirement. The currency uses an ISO 4217 code (USD). The price field carries only the number with no symbol. Follow those conventions and validators stay quiet.

For a Schema.org description of an online event, VirtualLocation can describe attendance details. Google?s current event guidelines exclude virtual-only experiences from its event search feature and require a physical location. Events must also be publicly bookable. Use the following fragment as a vocabulary example; it does not establish Google event eligibility:

"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"location": {
  "@type": "VirtualLocation",
  "url": "https://example.com/livestream/coastal-sound"
}

One event, one page

Search Engine Watch is direct on this: Google only supports event rich results for pages that feature a single event. If your calendar dumps twenty listings onto one URL, give each event its own crawlable page and mark that page up. Also confirm your robots.txt and robots meta tags allow Googlebot to reach those pages, since a blocked page will never qualify no matter how clean the JSON-LD is.

If you want the mechanics of adding this to a live site, whether by hand in the <head>, through a plugin, or via a tag manager, our walkthrough on how to implement schema markup covers the priority order and the validation loop. If you are weighing JSON-LD against Microdata or RDFA, the format templates guide shows the same markup three ways. JSON-LD is the format Google recommends and the one used above.

Mistakes that get event pages disqualified

  • Marking up non-events. Search Engine Watch warns that tagging business hours, coupons, limited-time discounts, or vacation packages as events risks disqualifying your entire site from event rich results. Reserve the type for real occurrences.
  • Missing a required property. No location, no valid startDate, or no name means no eligibility. Validators catch these immediately.
  • Stale status. A cancelled show still marked EventScheduled sends people to a closed door. Update eventStatus and previousStartDate when plans change.
  • Prices in the name. Keep promotional copy and ticket prices out of the name field.
  • Timezone drift. Use the local timezone offset in your ISO dates so the displayed time matches the actual start.

Test, then trust the data

Before you consider a page done, run it through Google's Rich Results Test and the Schema.org validator. The former checks Google's supported rich-result requirements; the latter checks Schema.org vocabulary and syntax. A clean vocabulary check can coexist with a feature-eligibility failure. Fix errors first, inspect the published URL in Search Console, then monitor indexing and enhancement reports after recrawling.

About results: structured data makes a page eligible for the event enhancement, and eligibility is not the same as a guaranteed appearance. Our piece on whether schema moves rankings or just pixels unpacks the evidence, including Eventbrite's reported year-over-year traffic gains after implementation. Treat those numbers as one company's experience and measure your own.

Event markup is also increasingly how assistants and AI answer engines read your listings, which is the terrain our AI search optimization service is built for. If you want to skip hand-coding the JSON-LD, our schema generator is another structured-data resource to explore alongside this Event example. Either way, the goal stays the same: give machines a clean, current, unambiguous record of who is performing, when, where, and how to buy a ticket.

Sources

Frequently asked questions

What properties are required for event schema markup?
For Google event eligibility, include name, startDate, and a physical location with a detailed address. Recommended fields such as offers, images, performer and organizer add useful context. A valid record still needs to satisfy the content and accessibility requirements of the specific search feature.
Should each event have its own page?
Yes. Per Search Engine Watch's summary of Google's guidance, rich results are only supported for pages that feature a single event. If you list many events on one page, give each its own crawlable URL and mark that page up individually. A dedicated page also gives you room for a proper description, images, and ticketing offers.
Can I mark up online-only or hybrid events?
Schema.org supports online and mixed attendance descriptions. Google currently excludes virtual-only experiences from its event search feature. For an eligible hybrid event, describe the physical venue accurately; virtual markup by itself does not establish eligibility. Match the structured data to the event details visitors can actually see.
What should I not mark up as an event?
Search Engine Watch notes that marking up things that are not real events, such as business hours, coupons, limited-time discounts, or vacation packages, risks disqualifying your whole site from event rich results. Keep Event markup for genuine occurrences with a time and a place: concerts, courses, festivals, conferences, screenings, and similar.
How do I test event schema before publishing?
Use Google?s Rich Results Test for Google feature eligibility and the Schema.org validator for vocabulary and syntax checks. They answer different questions. Fix errors, inspect the published URL in Search Console, and monitor its indexing and enhancement status after recrawling. Passing a test does not guarantee a search appearance.

Free tools for this topic

FREE TOOLAI Search Visibility CheckerCan ChatGPT, Perplexity and Google AI see your site?FREE TOOLSEO Page AuditorA senior-level on-page audit in one paste.PLAYBOOKThe AI Search PlaybookGet cited by ChatGPT, Perplexity and Google AI Overviews.

Keep reading

GlossaryWhat Is Schema Markup? Structured Data, ExplainedRead →GuidesHow to Implement Schema Markup (Priority Types First)Read →StatisticsDoes Schema Markup Actually Move Rankings, or Just PixelsRead →
CATALIST NEWSLETTER

Monthly dose of growth marketing.

Get marketing tips, narratives, guides, and playbooks delivered to your inbox.

Protected by reCAPTCHA — Google's Privacy Policy and Terms of Service apply.