JAVASCRIPTseobeginner
Event Schema Markup for Google Rich Results
Add Event structured data for concerts, webinars, workshops, and conferences to appear in Google event listings
Faisal Yaqoob
December 26, 2025
#event#schema#seo#structured-data#json-ld#google#rich-snippets#webinar#conference
Code
javascript
1 // In-person event schema 2 const physicalEvent = { 3 "@context": "https://schema.org", 4 "@type": "Event", 5 "name": "WordPress Developer Conference 2026", 6 "description": "Join 500+ WordPress developers for three days of talks, workshops, and networking. Learn about headless WordPress, block editor development, and performance optimization.", 7 "startDate": "2026-03-15T09:00:00-05:00", 8 "endDate": "2026-03-17T17:00:00-05:00", 9 "eventStatus": "https://schema.org/EventScheduled", 10 "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode", 11 "location": { 12 "@type": "Place", 13 "name": "Convention Center", 14 "address": { 15 "@type": "PostalAddress", 16 "streetAddress": "500 Convention Way", 17 "addressLocality": "Austin", 18 "addressRegion": "TX", 19 "postalCode": "78701", 20 "addressCountry": "US" 21 }, 22 "geo": { 23 "@type": "GeoCoordinates", 24 "latitude": "30.2672", 25 "longitude": "-97.7431" 26 } 27 }, 28 "image": "https://yoursite.com/images/wp-conf-2026.jpg", 29 "offers": [ 30 { 31 "@type": "Offer", 32 "name": "Early Bird Ticket", 33 "url": "https://yoursite.com/events/wp-conf-2026/tickets", 34 "price": "199.00", 35 "priceCurrency": "USD", 36 "availability": "https://schema.org/InStock", 37 "validFrom": "2025-12-01T00:00:00-05:00" 38 }, 39 { 40 "@type": "Offer", 41 "name": "Regular Ticket", 42 "url": "https://yoursite.com/events/wp-conf-2026/tickets", 43 "price": "349.00", 44 "priceCurrency": "USD", 45 "availability": "https://schema.org/InStock", 46 "validFrom": "2026-01-15T00:00:00-05:00" 47 } 48 ], 49 "performer": { 50 "@type": "Person", 51 "name": "Matt Mullenweg" 52 }, 53 "organizer": { 54 "@type": "Organization", 55 "name": "Your Company Name", 56 "url": "https://yoursite.com" 57 } 58 };
Event Schema Markup for Google Rich Results
Add Event structured data so your events appear in Google's event experience — including event packs, rich results, and Google Search event listings. This works for conferences, webinars, workshops, concerts, and any scheduled happening.
Physical Event Schema
// In-person event schema
const physicalEvent = {
"@context": "https://schema.org",
"@type": "Event",
"name": "WordPress Developer Conference 2026",
"description": "Join 500+ WordPress developers for three days of talks, workshops, and networking. Learn about headless WordPress, block editor development, and performance optimization.",
"startDate": "2026-03-15T09:00:00-05:00",
"endDate": "2026-03-17T17:00:00-05:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Convention Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 Convention Way",
"addressLocality": "Austin",
"addressRegion": "TX",
"postalCode": "78701",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "30.2672",
"longitude": "-97.7431"
}
},
"image": "https://yoursite.com/images/wp-conf-2026.jpg",
"offers": [
{
"@type": "Offer",
"name": "Early Bird Ticket",
"url": "https://yoursite.com/events/wp-conf-2026/tickets",
"price": "199.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2025-12-01T00:00:00-05:00"
},
{
"@type": "Offer",
"name": "Regular Ticket",
"url": "https://yoursite.com/events/wp-conf-2026/tickets",
"price": "349.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"validFrom": "2026-01-15T00:00:00-05:00"
}
],
"performer": {
"@type": "Person",
"name": "Matt Mullenweg"
},
"organizer": {
"@type": "Organization",
"name": "Your Company Name",
"url": "https://yoursite.com"
}
};
Online Event / Webinar Schema
// Virtual event / webinar schema
const onlineEvent = {
"@context": "https://schema.org",
"@type": "Event",
"name": "Free Webinar: Schema Markup for SEO in 2026",
"description": "Learn how to implement Schema.org structured data to improve your search rankings. Covers JSON-LD, rich results, and Google Search Console validation.",
"startDate": "2026-02-20T14:00:00-05:00",
"endDate": "2026-02-20T15:30:00-05:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"location": {
"@type": "VirtualLocation",
"url": "https://zoom.us/j/123456789"
},
"image": "https://yoursite.com/images/schema-webinar.jpg",
"offers": {
"@type": "Offer",
"url": "https://yoursite.com/webinars/schema-seo",
"price": "0",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"organizer": {
"@type": "Organization",
"name": "Your Company",
"url": "https://yoursite.com"
}
};
Hybrid Event Schema
// Event with both in-person and online attendance
const hybridEvent = {
"@context": "https://schema.org",
"@type": "Event",
"name": "E-Commerce Growth Summit 2026",
"description": "Join us in-person or online for a full day of e-commerce strategy, Shopify optimization, and conversion rate talks.",
"startDate": "2026-04-10T09:00:00-04:00",
"endDate": "2026-04-10T17:00:00-04:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/MixedEventAttendanceMode",
"location": [
{
"@type": "Place",
"name": "Tech Hub NYC",
"address": {
"@type": "PostalAddress",
"streetAddress": "200 Park Avenue",
"addressLocality": "New York",
"addressRegion": "NY",
"postalCode": "10166",
"addressCountry": "US"
}
},
{
"@type": "VirtualLocation",
"url": "https://yoursite.com/live-stream"
}
],
"image": "https://yoursite.com/images/ecom-summit.jpg",
"offers": [
{
"@type": "Offer",
"name": "In-Person Pass",
"price": "299.00",
"priceCurrency": "USD",
"availability": "https://schema.org/LimitedAvailability",
"url": "https://yoursite.com/summit/tickets"
},
{
"@type": "Offer",
"name": "Virtual Pass",
"price": "49.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://yoursite.com/summit/virtual"
}
],
"organizer": {
"@type": "Organization",
"name": "Your Company",
"url": "https://yoursite.com"
}
};
Event Status Updates
// Use these eventStatus values for schedule changes:
// Normal scheduled event
"eventStatus": "https://schema.org/EventScheduled"
// Event has been cancelled
"eventStatus": "https://schema.org/EventCancelled"
// Event moved to online only
"eventStatus": "https://schema.org/EventMovedOnline"
// Event postponed (update startDate when new date is known)
"eventStatus": "https://schema.org/EventPostponed"
// Event rescheduled (include both previousStartDate and new startDate)
const rescheduledEvent = {
"@context": "https://schema.org",
"@type": "Event",
"name": "Tech Workshop",
"eventStatus": "https://schema.org/EventRescheduled",
"previousStartDate": "2026-03-01T10:00:00",
"startDate": "2026-04-15T10:00:00",
"endDate": "2026-04-15T16:00:00"
};
WordPress Implementation
/**
* Output Event schema for WordPress event posts
* Works with a custom post type 'event' with custom fields
*/
function wp_event_schema_jsonld() {
if ( ! is_singular( 'event' ) ) {
return;
}
global $post;
$start_date = get_post_meta( $post->ID, 'event_start_date', true );
$end_date = get_post_meta( $post->ID, 'event_end_date', true );
$venue = get_post_meta( $post->ID, 'event_venue', true );
$price = get_post_meta( $post->ID, 'event_price', true );
$ticket_url = get_post_meta( $post->ID, 'event_ticket_url', true );
$is_online = get_post_meta( $post->ID, 'event_is_online', true );
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Event',
'name' => get_the_title(),
'description' => wp_trim_words( get_the_excerpt(), 50 ),
'startDate' => $start_date,
'endDate' => $end_date,
'eventStatus' => 'https://schema.org/EventScheduled',
'eventAttendanceMode' => $is_online
? 'https://schema.org/OnlineEventAttendanceMode'
: 'https://schema.org/OfflineEventAttendanceMode',
'image' => get_the_post_thumbnail_url( $post->ID, 'full' ),
'organizer' => [
'@type' => 'Organization',
'name' => get_bloginfo( 'name' ),
'url' => home_url( '/' ),
],
];
if ( $venue ) {
$schema['location'] = $is_online
? [ '@type' => 'VirtualLocation', 'url' => $venue ]
: [ '@type' => 'Place', 'name' => $venue ];
}
if ( $price && $ticket_url ) {
$schema['offers'] = [
'@type' => 'Offer',
'url' => $ticket_url,
'price' => $price,
'priceCurrency' => 'USD',
'availability' => 'https://schema.org/InStock',
];
}
echo '<script type="application/ld+json">'
. wp_json_encode( $schema, JSON_UNESCAPED_SLASHES )
. '</script>' . "\n";
}
add_action( 'wp_head', 'wp_event_schema_jsonld' );
Best Practices
- Include
offerswith price — required for event rich result eligibility - Use specific date-time with timezone offset (ISO 8601 format)
- Update
eventStatuspromptly for cancellations or schedule changes - Add
image— events with images are more likely to get rich results - Include
locationwith full address for in-person events - Set
eventAttendanceModecorrectly for online, offline, or hybrid
Features
- Google Event Pack: Appear in Google's event experience search results
- Event Status: Handle cancellations, postponements, and reschedules
- Multiple Formats: Physical, virtual, and hybrid event support
- Ticket Integration: Display pricing and availability in search
- WordPress Ready: PHP implementation for WordPress event sites
- Multi-Offer: Support early bird, regular, VIP pricing tiers
Related Snippets
SoftwareApplication Schema Markup (JSON-LD) — Copy-Paste Examples
Copy-paste SoftwareApplication and WebApplication JSON-LD for apps, plugins, and SaaS. Valid schema.org examples for Google rich results.
JAVASCRIPTseobeginner
javascriptPreview
const webAppSchema = {
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "Schema Markup Generator",
...#software#app#schema+7
1/8/2026
View
HowTo Schema for Step-by-Step Guides
Add HowTo structured data for Google how-to rich results with steps, tools, materials, and estimated time
JAVASCRIPTseobeginner
javascriptPreview
const howToSchema = {
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Set Up WordPress on a VPS Server",
...#howto#schema#seo+6
1/5/2026
View
Course Schema for Online Learning Platforms
Add Course structured data for Google course rich results with provider, duration, and pricing details
JAVASCRIPTseobeginner
javascriptPreview
const courseSchema = {
"@context": "https://schema.org",
"@type": "Course",
"name": "Complete WordPress Development Masterclass",
...#course#schema#seo+6
1/2/2026
View