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 for Apps and Tools
Add SoftwareApplication structured data for apps, plugins, and SaaS tools to display ratings and pricing in Google
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