Structured Data

Event Schema Validator

Paste your Event (or MusicEvent, SportsEvent, Festival, and 20+ other subtypes) JSON-LD and get a full spec check against Google's Event structured data guidelines: dates, location/VirtualLocation, eventAttendanceMode, eventStatus transitions, and every Offer field.

Runs entirely in your browser. Nothing you paste here is sent anywhere except an anonymized usage count.

Paste the contents of a <script type="application/ld+json"> block, or a full HTML page — every JSON-LD block is extracted automatically.

What this checks, and how to fix common mistakes

Google only shows Event rich results (date, venue and ticket links directly in search) when your Event JSON-LD is syntactically valid AND complete. This tool parses the actual nested Place, VirtualLocation and Offer objects — the same structures search engines read — not just a flat property list.

Dates are the most common failure: startDate and endDate must be real ISO 8601 values ("2026-09-12T19:00:00+07:00", not "9/12/2026"), a timezone offset is strongly recommended, and endDate can never fall before startDate. If startDate has already passed and eventStatus is still "EventScheduled", Google generally will not surface the event — remove the markup or update the status.

location must resolve cleanly: an in-person event needs a Place with a name and a full address; a fully online event needs eventAttendanceMode set to "OnlineEventAttendanceMode" and a VirtualLocation with a real URL instead of (or alongside, for hybrid events) the Place. Setting eventStatus to "EventMovedOnline" without also switching the attendance mode and location is a common contradiction that fails validation.

Every Offer needs a price and a valid 3-letter priceCurrency (ISO 4217, e.g. "IDR" or "USD") as separate fields — never a currency symbol baked into the price string — plus a recognized availability value ("InStock", "SoldOut", "PreOrder", etc.) and a direct ticket URL. Multiple ticket tiers should use an array of Offer objects, or an AggregateOffer with a valid lowPrice/highPrice range.

"EventRescheduled" and "EventPostponed" should carry a previousStartDate so Google can show what changed. If a page lists more than one Event record, this tool also flags likely duplicates — the same name and startDate appearing twice usually means an accidental double-paste rather than two separate events.

📊 How accurate is this page?

Tap a face to rate it — then see what everyone thinks.

0%

Could not save your vote — please try again.

1