Event schema incomplete: missing required fields
Event JSON-LD without name, startDate, or a location with a PostalAddress earns no Event rich result and no 'events near me' placement. Find incomplete Event markup free and add the required fields.
What it means
This page contains Event structured data (or a subtype such as ConferenceEvent or PerformingArtsEvent), but one of the three required fields is absent or malformed: name (the event title), startDate (an ISO 8601 datetime), or location (a Place with a nested PostalAddress, or a location.url for online events). Without all three, Google generates no Event rich result.
Why it matters
Google's Event rich result surfaces event cards — name, date, location, ticket availability — directly in search, including the 'events near me' experience, above standard organic results for event-intent queries. The three required fields are a matched set: a missing name leaves nothing to display; a startDate without a timezone offset is ambiguous for timed events; and a location that is only a city name or a bare string does not satisfy the physical-location requirement from Google's June 2025 update. Online-only events must instead set eventAttendanceMode to OnlineEventAttendanceMode and provide location.url.
How to fix it
- Locate the
EventJSON-LD block. - Add
namewith the event title — not the venue name (a common mistake is putting the event name inlocation.name). - Add
startDatein ISO 8601. For timed events include the timezone offset; for all-day events use the date only, notT00:00:00. - Add
locationas aPlacewith a nestedPostalAddress— a venue name alone does not qualify. - For online events, set
eventAttendanceModetoOnlineEventAttendanceModeand providelocation.url. - Add
offers.urlto the ticketing page to unlock ticket data, and validate in the Rich Results Test.
Example
{
"@context": "https://schema.org",
"@type": "Event",
"name": "React Summit 2027"
}{
"@context": "https://schema.org",
"@type": "Event",
"name": "React Summit 2027",
"startDate": "2027-06-14T09:00:00+02:00",
"endDate": "2027-06-15T17:00:00+02:00",
"location": {
"@type": "Place",
"name": "RAI Amsterdam",
"address": {"@type":"PostalAddress","streetAddress":"Europaplein 24","addressLocality":"Amsterdam","addressCountry":"NL"}
},
"eventStatus": "https://schema.org/EventScheduled"
}name, startDate and a location are required. For an online event, set location to a VirtualLocation with a url instead of a Place.
When it's not a problem
A page listing multiple events may use an ItemList of Event nodes that intentionally omit detail-level fields; verify at the individual event detail page. Evergreen content that uses Event as a semantic type without intending Google eligibility, or content for third-party tooling, can be suppressed per-URL. Past events still warn when fields are absent, but valid markup on a past event is harmless. This rule is separate from schema.invalid (structurally broken markup).
How Crawlinx detects it
We check every Event JSON-LD block for name, startDate and location. A bare string location does not satisfy the requirement — a physical event needs a Place with a PostalAddress, an online event needs a VirtualLocation with a url.
How common is it?
72 audited sites in our corpus currently show this issue. The breakdowns below show which platforms, gatekeepers, verticals and countries are most exposed.
FAQ
- What are the required Event schema properties?
- name, startDate and location. location must be a Place with a PostalAddress for in-person events, or a VirtualLocation with a url for online events.
- Do online-only events need a physical address?
- No. Set location to {"@type":"VirtualLocation","url":"..."} and add eventAttendanceMode OnlineEventAttendanceMode. Google won't expect a street address then.
- Why did my event stop showing after it passed?
- A startDate in the past is dropped from the event experience — that's the separate schema.stale_date signal. Remove or update ended events so the markup stays current.
Audit your own site — free
157 checks, internal PageRank, render-diff. No signup, results in ~30s.