Skip to content

SEO & Structured Data

SEO & Structured Data

Search engines display rich results for events — date, location, ticket price, and a direct link — when your pages include structured data. Tickets Please automatically outputs JSON-LD Event schema on every single event page, giving search engines exactly what they need without any manual configuration.

JSON-LD Output

On every single event page, Tickets Please injects a <script type="application/ld+json"> block in the page head containing an Event schema object. The output includes:

PropertySourceExample
@typeAlways "Event""Event"
nameEvent title"Spring Bird Count"
startDate_tribe_event_start_date in ISO 8601"2026-04-15T09:00:00-04:00"
endDate_tribe_event_end_date in ISO 8601"2026-04-15T17:00:00-04:00"
locationLinked venuePlace object with address
organizerLinked organizer(s)Organization object(s)
offersTicket pricesOffer objects with price and availability
imageFeatured image URL"https://example.com/image.jpg"
descriptionEvent excerpt or contentTruncated plain text
eventStatusEvent status meta"EventScheduled"

Location Object

When an event has a linked venue with address data, the location property outputs a Place schema:

{
"@type": "Place",
"name": "Seward Park Audubon Center",
"address": {
"@type": "PostalAddress",
"streetAddress": "5902 Lake Washington Blvd S",
"addressLocality": "Seattle",
"addressRegion": "WA",
"postalCode": "98118",
"addressCountry": "US"
}
}

If latitude and longitude are available (from geocoding or manual entry), geo coordinates are included as well.

Offers Object

Each ticket attached to the event generates an Offer schema entry:

{
"@type": "Offer",
"price": "25.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/event/spring-bird-count/",
"validFrom": "2026-01-01T00:00:00-05:00"
}

Availability reflects real-time ticket status: InStock, SoldOut, or PreOrder (for tickets whose sale date has not started).

Customizing Schema Output

Use the tickets_please_json_ld_data filter to modify the schema array before it is serialized to JSON:

add_filter( 'tickets_please_json_ld_data', function ( $data, $event_id ) {
// Add a performer to the schema.
$data['performer'] = array(
'@type' => 'Person',
'name' => 'Dr. Jane Wilson',
);
// Change the event status.
$data['eventStatus'] = 'https://schema.org/EventPostponed';
return $data;
}, 10, 2 );

The filter receives the complete schema array and the event post ID. Return the modified array. The plugin handles JSON encoding and script tag output.

Removing Schema Output

To disable JSON-LD output for specific events or globally:

// Disable for a specific event.
add_filter( 'tickets_please_json_ld_data', function ( $data, $event_id ) {
if ( 42 === $event_id ) {
return array(); // Empty array = no output.
}
return $data;
}, 10, 2 );
// Disable globally.
add_filter( 'tickets_please_json_ld_data', '__return_empty_array' );

Tickets Please generates SEO-friendly permalinks for events, venues, and organizers:

  • Events: example.com/event/spring-bird-count/
  • Venues: example.com/venue/seward-park-audubon-center/
  • Organizers: example.com/organizer/seattle-audubon-society/

The base slug for events is customizable via the tickets_please_event_rewrite_slug filter:

add_filter( 'tickets_please_event_rewrite_slug', function ( $slug ) {
return 'happening'; // URLs become example.com/happening/event-name/
} );

After changing the slug, visit Settings > Permalinks in WordPress admin (no changes needed, just loading the page flushes rewrite rules).

Stable permalinks protect your SEO investment. Changing slugs after your site is indexed requires 301 redirects from old URLs to new ones. Plan your URL structure before launching.

Validating Your Structured Data

After setting up events, validate the output:

  1. Open a single event page on your site.
  2. View the page source and search for application/ld+json.
  3. Copy the JSON block.
  4. Paste it into Google’s Rich Results Test or the Schema.org Validator.

Fix any warnings or errors reported by the validator. Common issues include missing required fields (usually image or description).

Common Questions

Does JSON-LD output affect page load speed? No. The JSON-LD block is a small inline script (typically under 1 KB) injected in the page head. It does not make external requests or block rendering.

Do I need an SEO plugin like Yoast alongside Tickets Please? Tickets Please handles Event-specific structured data. General SEO plugins like Yoast handle site-wide meta tags, sitemaps, and other schema types. They complement each other without conflict. If your SEO plugin also outputs Event schema, disable one to avoid duplicate structured data.

How long until rich results appear in Google? Google crawls and processes structured data on its own schedule. Rich results typically appear within days to weeks after Google re-crawls the page. Use Google Search Console to monitor indexing status.

Does the schema include cancelled event status? Yes. When an event’s _tribe_event_status is set to cancelled, the JSON-LD output includes "eventStatus": "https://schema.org/EventCancelled". Google displays this status in search results.

Are virtual events supported in the schema? The current schema outputs Place for the location. To add virtual event support, use the tickets_please_json_ld_data filter to change the location to a VirtualLocation object with the appropriate url property.

Is the structured data compatible with Google Events? Yes. The output follows Google’s Event structured data guidelines. Events with complete data (name, date, location, offers) are eligible for Google’s event rich results and the Google Events experience.

Next Steps