Event Schema Markup: 18 Tactics to Get Rich Results
Event schema markup can make your event pages eligible for rich results that show dates, locations, prices, and availability directly in Google search. These 18 tactics cover the required and recommended properties, testing, and common mistakes.
TL;DR
- Event schema can make pages eligible for event rich results that show dates, locations and prices in search (Google Search Central documents the supported properties)
- Required properties: name, startDate and location. Google's documentation lists the rest as recommended
- Offers with ticket pricing give searchers more to act on before they click
- Rich results are never guaranteed: valid markup makes a page eligible, and Google decides whether to show it
- Virtual events need the eventAttendanceMode property so they are marked as online events
- Seology automates Event schema implementation--analyzing your event pages and adding complete, valid structured data for all event types (in-person, virtual, hybrid)
Why Event Schema Matters
Event schema markup transforms how your events appear in Google search. Instead of a plain blue link, your event pages get rich event cards that show:
- Event name and date prominently displayed at the top of the result
- Location or "Online event" badge for virtual events
- Ticket prices ("From $49") and availability ("Tickets available")
- Event image (for conferences and large events)
- Organizer name (builds trust and brand recognition)
The result: Event listings can stand out in search results. Google also surfaces events in dedicated event discovery features, though eligibility and display are up to Google.
The 18 Event Schema Tactics
Category 1: Required Event Properties
These properties are mandatory for Google to display event rich results. Missing any of these = no rich results.
Tactic #1: Add Event Name
The event name is the most important property--it appears as the headline in rich results.
Best practices:
- Use the full official event name (e.g., "TechCrunch Disrupt 2025" not "Disrupt")
- Include the year if it's part of the event name
- Avoid marketing language in the name (e.g., "Amazing SEO Conference" → "SEO Summit 2025")
- Keep it under 60 characters for full display in results
Code example:
"name": "Marketing Tech Summit 2025"
Tactic #2: Define Start Date (and End Date)
Google requires startDate and highly recommends endDate for multi-day events.
Format requirements:
- Use ISO 8601 format:
YYYY-MM-DDTHH:MM - Include timezone:
-05:00for EST orZfor UTC - Single-day events only need startDate
- Multi-day events need both startDate and endDate
Code example:
"startDate": "2025-06-15T09:00:00-07:00", "endDate": "2025-06-17T17:00:00-07:00"
Critical: Incorrect date formats will cause validation errors and prevent rich results.
Tactic #3: Specify Event Location (Place or VirtualLocation)
Every event must have a location--either a physical Place or a VirtualLocation.
Physical event location:
"location": {
"@type": "Place",
"name": "Moscone Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "747 Howard St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94103",
"addressCountry": "US"
}
}Virtual event location:
"location": {
"@type": "VirtualLocation",
"url": "https://zoom.us/j/123456789"
}Result: Google displays "Moscone Center, San Francisco" or "Online event" badge in rich results.
Tactic #4: Set Event Attendance Mode
eventAttendanceMode tells Google if the event is in-person, online, or hybrid.
Three modes:
OfflineEventAttendanceMode- In-person onlyOnlineEventAttendanceMode- Virtual only (webinars, online conferences)MixedEventAttendanceMode- Hybrid events with both options
Code example for virtual event:
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode"
Critical: Without this property, Google won't display "Online event" badges for virtual events.
Tactic #5: Define Event Status
eventStatus indicates if the event is scheduled, cancelled, postponed, or rescheduled.
Status options:
EventScheduled- Normal status (default)EventCancelled- Event is cancelledEventPostponed- New date not yet setEventRescheduled- New date is set (update startDate)
Code example:
"eventStatus": "https://schema.org/EventScheduled"
Best practice: Update eventStatus immediately if plans change--Google will update rich results automatically.
Category 2: Ticket & Pricing Information
Adding ticket pricing gives searchers more information before they click. Use the offers property to include it.
Tactic #6: Add Ticket Offers with Pricing
The offers property shows ticket prices directly in search results.
Required offer properties:
price- Ticket price (e.g., "49.00")priceCurrency- Currency code (e.g., "USD")url- Ticket purchase URLavailability- In stock, sold out, or pre-order
Code example:
"offers": {
"@type": "Offer",
"price": "49.00",
"priceCurrency": "USD",
"url": "https://example.com/tickets",
"availability": "https://schema.org/InStock",
"validFrom": "2025-01-15T12:00:00Z"
}Result: Google displays "From $49 · Tickets available" in event rich results.
Tactic #7: Handle Free Events Correctly
Free events require special handling--set price to "0" and isAccessibleForFree to true.
Code example for free events:
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"url": "https://example.com/register",
"availability": "https://schema.org/InStock"
}
"isAccessibleForFree": trueResult: Google displays "Free" badge in event listings.
Tactic #8: Add Multiple Ticket Tiers
Events with multiple ticket types (VIP, General Admission, Early Bird) need multiple offers objects.
Code example for tiered pricing:
"offers": [
{
"@type": "Offer",
"name": "General Admission",
"price": "99.00",
"priceCurrency": "USD",
"url": "https://example.com/tickets/general",
"availability": "https://schema.org/InStock"
}
{
"@type": "Offer",
"name": "VIP Pass",
"price": "299.00",
"priceCurrency": "USD",
"url": "https://example.com/tickets/vip",
"availability": "https://schema.org/InStock"
}
]Result: Google displays "From $99" (lowest price) with multiple ticket options available.
Tactic #9: Mark Sold Out Events
When tickets sell out, update availability to prevent disappointment.
Code example for sold-out tickets:
"offers": {
"@type": "Offer",
"price": "99.00",
"priceCurrency": "USD",
"url": "https://example.com/tickets",
"availability": "https://schema.org/SoldOut"
}Result: Google displays "Sold out" in event listings, which builds urgency for future events.
Category 3: Organizer & Performer Details
Adding organizer and performer data builds trust and helps Google understand event context.
Tactic #10: Add Event Organizer Information
The organizer property identifies who's hosting the event.
Code example:
"organizer": {
"@type": "Organization",
"name": "TechCrunch",
"url": "https://techcrunch.com"
}Best practice: Use your brand's official name consistently across all events for entity recognition.
Tactic #11: Include Performer Data for Concerts/Talks
For events with speakers, performers, or headliners, add the performer property.
Code example for keynote speaker:
"performer": {
"@type": "Person",
"name": "Jane Speaker"
}For multiple performers:
"performer": [
{
"@type": "Person",
"name": "Sarah Johnson"
}
{
"@type": "Person",
"name": "Mike Chen"
}
]Result: Google may display performer names in event rich results for high-profile speakers.
Category 4: Enhanced Event Properties
These optional properties improve rich result appearance and help Google understand event context better.
Tactic #12: Add Event Description
The description property provides context and can appear in rich results.
Best practices:
- Write 1-3 sentences summarizing what the event is about
- Include key topics, speakers, or activities
- Keep it under 200 characters for best display
- Don't duplicate the event name
Code example:
"description": "Learn the latest SEO strategies, network with industry leaders, and discover tools that drive organic growth."
Tactic #13: Include Event Image
The image property helps your event stand out in rich results and event discovery features.
Image requirements:
- Minimum 1200px wide for best results
- Use 16:9 or 4:3 aspect ratio
- Upload to your own domain (not third-party hosting)
- Use descriptive file names (e.g., "seo-summit-2025.jpg")
Code example:
"image": "https://example.com/images/marketing-summit-2025.jpg"
Result: Google may display your event image in rich results for larger events.
Tactic #14: Specify Event Duration
For single-session events (workshops, webinars), add duration in ISO 8601 format.
Duration format examples:
PT1H- 1 hourPT2H30M- 2 hours 30 minutesPT45M- 45 minutes
Code example:
"duration": "PT2H"
Tactic #15: Add Previous Start Date for Rescheduled Events
If an event was rescheduled, include previousStartDate to maintain historical data.
Code example:
"eventStatus": "https://schema.org/EventRescheduled", "startDate": "2025-09-15T09:00:00-07:00", "previousStartDate": "2025-06-15T09:00:00-07:00"
Category 5: Testing & Validation
Schema validation is critical--one error can prevent all rich results from appearing.
Tactic #16: Test with Rich Results Test Tool
Use Google's Rich Results Test to validate your Event schema before publishing.
Testing process:
- Go to
search.google.com/test/rich-results - Enter your event page URL or paste schema code
- Check for "Event" detected in results
- Fix any errors (red) or warnings (yellow)
- Preview how your event will appear in search
Common validation errors: Missing required properties, incorrect date format, invalid currency codes, broken URLs.
Tactic #17: Monitor in Google Search Console
Track Event schema performance and errors in Search Console → Enhancements → Event.
What to monitor:
- Total valid event pages
- Errors and warnings with specific pages affected
- Event impressions and clicks (Performance report)
- Mobile vs desktop performance
Result: Catch schema errors quickly and track rich result performance over time.
Tactic #18: Use JSON-LD Format (Not Microdata)
Google recommends JSON-LD for Event schema because it's easier to implement and maintain.
Complete JSON-LD example:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Event",
"name": "SEO Summit 2025",
"description": "Learn the latest SEO strategies from industry leaders",
"startDate": "2025-06-15T09:00:00-07:00",
"endDate": "2025-06-17T17:00:00-07:00",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"eventStatus": "https://schema.org/EventScheduled",
"location": {
"@type": "Place",
"name": "Moscone Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "747 Howard St",
"addressLocality": "San Francisco",
"addressRegion": "CA",
"postalCode": "94103",
"addressCountry": "US"
}
}
"image": "https://example.com/images/seo-summit-2025.jpg",
"organizer": {
"@type": "Organization",
"name": "SEO Institute",
"url": "https://example.com"
}
"offers": {
"@type": "Offer",
"price": "299.00",
"priceCurrency": "USD",
"url": "https://example.com/tickets",
"availability": "https://schema.org/InStock",
"validFrom": "2025-01-15T12:00:00Z"
}
}
</script>Best practice: Place JSON-LD in the <head> section of your HTML.
Common Event Schema Mistakes
- ✗Incorrect Date Format:
Using "06/15/2025" instead of ISO 8601 format causes validation errors--always use
2025-06-15T09:00:00-07:00 - ✗Missing eventAttendanceMode:
Virtual events won't show "Online event" badges without this property--it's required for webinars and online conferences
- ✗Not Updating Sold Out Status:
Leaving availability as "InStock" when tickets are sold out creates poor UX--update to "SoldOut" immediately
- ✗Using Relative URLs:
Schema requires full URLs--use
https://example.com/ticketsnot/tickets - ✗Adding Schema to Past Events:
Google ignores Event schema for events with startDate in the past--remove schema after events end
How Seology Automates Event Schema
Manually adding Event schema to every event page is time-consuming. Seology automates the entire process:
- Auto Event Detection: Seology scans your site and identifies all event pages automatically
- Complete Schema Generation: Generates valid Event schema with all required and recommended properties
- Ongoing Monitoring: Re-checks your event pages and flags stale or missing eventStatus and offers data
- Validation & Monitoring: Tests schema with Google's tools and alerts you to errors
- Multi-Event Support: Handles in-person, virtual, and hybrid events with proper attendance modes
Automate Your Event Schema
Seology adds Event schema to your event pages automatically, so you don't have to maintain the markup by hand.
Start FreeFinal Verdict
Event schema markup is one of the most useful schema types for event organizers: it can make your events eligible for rich results that show dates, locations, and prices.
Start with the essentials: Event name, dates, location, and eventAttendanceMode. This gets you basic rich results.
Then add offers: Ticket pricing shows "From $X" in search results when Google displays the rich result.
The result: More visibility for your events in search, where Google chooses to show rich results.
Or let Seology generate and validate your Event schema automatically.
Related Posts
Tags: #EventSchema #StructuredData #SchemaMarkup #EventSEO #Seology
Part of the Schema Markup Guide
Put this into practice with the free schema markup generator.
Related articles
Review Schema: Get Star Ratings in Search Results (15 Implementation Tactics)
How to add review schema with JSON-LD so your pages can be eligible for star ratings in Google results, plus validation and policy tips.
Shopify Schema Markup Guide 2026: Get Rich Results
How to implement structured data on Shopify: Product, review, offer, breadcrumb, and organization schema, with validation steps.
Schema Markup Generators 2026: Tools and Validation Guide
Compare schema generators, WordPress plugins, developer tools, and validators. Learn how to choose accurate markup without outdated rich-result promises.
Schema Markup Types: 12 Essential JSON-LD Examples 2026
Master the 12 essential schema.org types with copy-paste JSON-LD examples. Article, Product, FAQPage, LocalBusiness, Event and more for richer SERPs.
Schema Markup: The Complete Guide (With Examples)
A complete guide to schema markup: the most useful types, a JSON-LD example, common mistakes, and how to implement it by hand or with Seology.
Structured Data & Rich Snippets for Shopify: Schema Markup Guide
How to add Product, Review, FAQ and Breadcrumb schema to a Shopify store, validate it, and check rich result eligibility.