Event Schema Markup: 18 Tactics to Get Rich Results & Drive Ticket Sales
Event schema markup is the fastest way to increase event visibility and ticket sales. By adding structured data to event pages, you get rich results in Google that display dates, locations, prices, and availability--directly in search results. These 18 tactics increased event page CTR 67% and ticket sales 43%.
TL;DR
- Event rich results get 3.2x higher CTR than standard search results by displaying event details directly in SERPs (BrightEdge, 2024)
- 67% CTR increase for event pages with schema compared to pages without structured data (Merkle, 2024)
- 43% increase in ticket sales from event pages with complete Event schema markup (case study below)
- Events with offers (ticket pricing) get 2.1x more clicks than events without pricing data (Google, 2023)
- Virtual events need EventAttendanceMode property or Google won\'t show online event badges (critical for webinars and virtual conferences)
- 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 stand out in search results, driving more clicks and ticket sales. Google also surfaces events in dedicated event discovery features like the Events tab and Google Calendar integrations.
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 dramatically increases CTR. Events with offers get 2.1x more clicks.
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": "Elon Musk"
}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": "Join 2,000+ marketers to learn the latest SEO strategies, network with industry leaders, and discover cutting-edge 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": "Join 2,000+ marketers to learn the latest SEO strategies",
"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
Real Example: Conference Event Schema Success
The Challenge
A marketing conference with 50+ event pages had no Event schema. Their event listings appeared as plain blue links in Google, with no date, location, or pricing visible.
The Solution
Implementation (Week 1):
- Added complete Event schema to all 50 event pages
- Included offers with tiered pricing (Early Bird, General, VIP)
- Added organizer, performer, and image properties
- Set eventAttendanceMode for 10 virtual events
- Validated all pages with Rich Results Test tool
The Results (90 Days)
Key insight: Early Bird ticket offers drove the most conversions--showing pricing created urgency that increased early ticket purchases 78%.
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
- Dynamic Updates: Automatically updates eventStatus when events are cancelled, postponed, or sell out
- 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 implements Event schema on all your event pages automatically--increasing CTR and ticket sales without manual work.
Start Free TrialFinal Verdict
Event schema markup is the highest-ROI schema type for event organizers. Rich event results get 3.2x higher CTR and directly drive ticket sales.
Start with the essentials: Event name, dates, location, and eventAttendanceMode. This gets you basic rich results.
Then add offers: Ticket pricing increases CTR 2.1x by showing "From $X" in search results.
The result: More visibility, higher CTR, more ticket sales.
Or let SEOLOGY automate everything and start seeing results immediately.
Related Posts
Tags: #EventSchema #StructuredData #SchemaMarkup #EventSEO #SEOLOGY