Start with the basics in JSON-LD: name, startDate, endDate, eventStatus, and eventAttendanceMode. If the event is in person, add a clear location object with venue name, address, city, and country. For online events, use a valid URL and mark the attendance mode as online, not “hybrid” unless both formats are truly available.
Ticket data is where many pages break. Use offers for each ticket type, and keep price, currency, availability, and validFrom aligned with the page. If tickets are free, still include an offer with price set to 0. Missing offer details can make the markup look incomplete, even when the event itself is fine.
Keep the visible page and the structured data in sync. If the page says “doors open at 7,” the markup should not hide a different start time. For recurring events, create separate entries for each instance instead of stuffing everything into one generic block. Add organizer only when it is real and clearly named.
Test for three things: valid JSON, required fields, and consistency with the page copy. Then trim anything that is not on-page or not needed. Clean Event markup is not about stuffing every property; it is about making one event easy for Google and users to trust.
Rich Result Rx
@RichResultRx
Event schema only works when date, place, and offer details match the page
This post was published in the Telegram channel Rich Result Rx. Subscribe here: @RichResultRx.