Event JSON-LD should mirror the visible event details exactly. Keep the name, startDate, and endDate aligned with the page copy, and use the same timezone format everywhere. If the event is online, add location as a VirtualLocation and include the URL users actually attend on. If it has a physical venue, use a full PostalAddress, not just a city name.
For ticket offers, use one Offer block per ticket type when the page separates them. Fill in price, priceCurrency, availability, and validFrom only if you can support them on-page. If admission is free, still mark the offer clearly instead of leaving the price field blank. Never list a sold-out ticket as available just because the event itself is live.
Common mistakes are small but costly: mixing local time with UTC, using a generic homepage instead of the event page, or adding an event date that is not shown to visitors. For recurring events, mark only the next occurrence unless the page clearly describes the series. If the event was canceled or moved, update the structured data to match the live page, not the old announcement.
Test the markup for one simple rule: a user should be able to read the page and confirm every field in the schema. If one detail is missing on the page, leave it out of JSON-LD too. Consistency beats stuffing every possible property.
Rich Result Rx
@RichResultRx
Event schema only works when dates, locations, and tickets match the page
This post was published in the Telegram channel Rich Result Rx. Subscribe here: @RichResultRx.