Event Schema

No Comments
Event schema

Element Code: RI-013

TL;DR: Event schema is structured data that tells search engines the name, start date, and location of an event you host or list. Without it, your event pages are not eligible for Google's event rich results, and the ticketing middlemen who do mark up their pages will gladly take that visibility, plus a booking fee, instead.
Element code
RI-013
Category
Structured data
Format
JSON-LD preferred
Required fields
name, startDate, location
Validate with
Rich Results Test

I audit a lot of venue, university, and conference sites, and event pages are where structured data earns its keep most visibly. Most schema types give you an abstract, hard-to-measure benefit. Event schema gives you a listing with a date, a place, and often a ticket link, right in the search results. When a client's own event page loses that placement to an Eventbrite or Ticketmaster copy of the same event, it is almost always because the aggregator shipped clean markup and the client shipped nothing.

What Event schema actually is

Event schema is the schema.org Event vocabulary applied to a page that describes a single real-world or online happening: a concert, a webinar, a conference, a workshop, a match. You express it as a JSON-LD block in the page source, and Google reads it to understand the who, when, and where of the event without having to guess from your prose.

The vocabulary includes useful subtypes, and you should use the most specific one that fits: MusicEvent, SportsEvent, BusinessEvent, EducationEvent, TheaterEvent, Festival, and more. Google treats them all as events for rich result purposes, but specificity costs you nothing and helps other consumers of the data.

Three properties are required by Google before an event is even considered for rich results: name, startDate, and location. Everything else is recommended, and the recommended fields are where the listing actually gets attractive.

How Google decides whether you get the rich result

Your event page HTML + JSON-LD Googlebot parses the Event object name, startDate, location present and valid? yes Eligible for event rich results date, venue, tickets no Plain blue link error logged in Search Console

One honest caveat before you get excited: valid markup makes you eligible, it does not guarantee anything. Google decides case by case, and the dedicated event search experience is not available in every country. But ineligible is a guaranteed no, so the markup is still the price of entry.

Why this matters for SEO

Event queries carry strong, time-boxed intent. Someone searching "jazz concerts near me this weekend" is going to click something within minutes, and Google's event surfaces are built to capture exactly that. If your page is in that surface, you get the click and the ticket revenue. If not, an aggregator gets it, resells your own event back to your audience, and takes a cut.

There is also a plain CTR effect in regular results. An event snippet showing the date and venue directly answers the searcher's first two questions before they click, and listings that answer questions get chosen. This is one of the few schema types where I have watched clicks move within weeks of deployment, simply because the result type changed.

Property reference

PropertyStatusWhat to provide
nameRequiredThe event title only. No city, no dates, no promo copy stuffed in.
startDateRequiredISO 8601 with timezone offset, e.g. 2026-09-12T19:30:00-05:00.
locationRequiredA Place with a full PostalAddress, or VirtualLocation with a URL for online events.
endDateRecommendedSame format as startDate. Matters for multi-day events.
eventStatusRecommendedEventScheduled, EventPostponed, EventCancelled, or EventMovedOnline. Keep it current.
eventAttendanceModeRecommendedOffline, online, or mixed. Pair mixed mode with both a Place and a VirtualLocation.
offersRecommendedReal price, currency, availability, and a URL that lands directly on the purchase step.
performer / organizerRecommendedPerson or Organization objects. Helps disambiguation for touring acts.
image, descriptionRecommendedA real event image and a short factual summary matching the visible page.

How to detect the problem

Start with one representative event URL in Google's Rich Results Test. It tells you immediately whether an Event object was found, and which required or recommended fields are missing or malformed.

For site-wide coverage, crawl with Screaming Frog: enable JSON-LD extraction and Google rich result feature validation under Config, then Spider, then Extraction, and work through the Structured Data tab filters for missing and invalid items. This is how you find the template-level failure, which is what it usually is: one broken date format repeated across four hundred event pages.

Then check Search Console. If Google has already found event markup on your site, the Events report under Enhancements lists every item with errors like a missing startDate or an unrecognized date format. If the report does not exist at all, Google has found no event markup anywhere, which for a site full of events is your answer.

How to fix it, step by step

  1. One Event object per real event, on that event's own URL. Do not mark up a category or listing page as a single event, and do not mark up things that are not events. Google's guidelines explicitly call out promotions like a weekend sale as abuse of event markup.
  2. Fill the three required fields with real values. Dates in ISO 8601 with an explicit timezone offset. A surprising number of "invalid startDate" errors are just 12/09/2026 written the human way.
  3. Model the location correctly. Physical: a Place with name and full street address. Online: VirtualLocation with the join or registration URL, plus OnlineEventAttendanceMode. Hybrid: both locations in an array with MixedEventAttendanceMode.
  4. Add offers, performer, organizer, image. These are what turn the listing from adequate into clickable.
  5. Keep status honest over the event lifecycle. A cancelled event should stay published with eventStatus: EventCancelled, not 404. A postponed one gets EventPostponed with the old date left in place until a new one is confirmed, which is exactly what Google's documentation asks for.
  6. Validate, deploy, request indexing on a few templates, and watch the GSC Events report over the following weeks.

If you are on WordPress, plugins like The Events Calendar, Rank Math, or Yoast can emit Event schema for you. Verify what they actually output with the Rich Results Test rather than trusting the settings screen. I have seen plugin-generated markup with an empty location on every single event because a venue field was never mapped.

DO

  • Use one Event object per actual event, on its own URL
  • Write dates in ISO 8601 with timezone offsets
  • Update eventStatus when things change instead of deleting pages
  • Make the markup match the visible page content exactly
  • Use the most specific Event subtype that fits
DON'T

  • Mark up sales, promos, or coupons as events
  • Stuff cities or keywords into the name field
  • Leave long-past events marked as EventScheduled
  • Mark up a listing page as one giant event
  • Ship the JSON-LD inside a script bundle that only renders after user interaction

What good looks like

Every event has a dedicated URL carrying one valid Event object whose values match the visible content. The GSC Events report shows items with zero errors. Statuses track reality: scheduled, postponed, cancelled. And in the Performance report, filtering by search appearance shows event results actually accruing impressions and clicks. When a venue owns its own event listings in search instead of renting them back from an aggregator, this check is done.

FAQ

We sell through Eventbrite. Doesn't their markup cover us?
It covers their page, not yours. The rich result eligibility belongs to the URL carrying the markup, so Eventbrite's copy of your event becomes the one that earns the enhanced listing. If you want your own page to compete, it needs its own Event schema.
JSON-LD or microdata?
JSON-LD. Google supports both but recommends JSON-LD, and in practice it is far easier to template, review, and debug than attributes scattered through your HTML. There is no ranking difference, only a maintenance one.
How do I handle a recurring event, like a weekly class?
Google wants each occurrence represented as its own Event with its own startDate. You can publish multiple Event objects on one page or give each date its own URL. What fails is a single Event with a vague "every Tuesday" date, because startDate must be a concrete moment in time.
Will Event schema improve my rankings?
Not directly. Structured data is not a ranking factor; it changes how your result can be displayed and where it can appear. The traffic gain comes from eligibility for event surfaces and from a richer snippet earning a higher share of clicks at the same position.
Not sure whether your structured data is helping or quietly failing validation?

I check schema coverage, eligibility errors, and rich result performance as part of every Advanced SEO Audit. You get a prioritized fix list, not a PDF of screenshots.

Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.

About SEO ProCheck

Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.

Work With Me

Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.

Subscribe to our newsletter!

More from our blog