No Event schema on an event page
What is this issue?
This issue reports an Event schema block your page already declares that is
missing a required property or carries an invalid date, location or offer — not a
page describing an event with no Event schema at all.
Checked once a page declares Event schema:
name,startDateandlocationare presentstartDateandendDate, when present, are valid ISO 8601 dateslocationis a well-formedPlace(nameandaddress) orVirtualLocation(url)- any declared
offerscarry a validprice,priceCurrencyandavailability
What this issue is not: it does not guess that a page under /events/ or
/webinar/, or one mentioning "Register now" or ticket prices, ought to declare
Event schema. A page with none declared is never reported. eventStatus and
eventAttendanceMode are not part of this check.
Why it matters
Event schema is critical for event visibility and user engagement:
- Google Events carousel: Events with proper schema can appear in Google's dedicated Events carousel
- Rich results: Enables event details (date, time, location, price) to appear in search results
- Google Maps: Events are listed in Google Maps event listings
- Calendar integration: Users can add events to their calendars directly from search results
- Ticket sales: Ticket links and pricing can appear in search results
- Voice search: Voice assistants can provide event details and ticket information
Resolving this issue improves your SEO health score by ensuring events are properly structured for maximum visibility and user engagement.
How to fix it
If this issue was raised, your page already declares an Event schema missing a
required property or value — open the finding for specifics. The steps below are for
a page that declares none yet: worthwhile to add, and never reported as a defect
while absent.
Identify event pages: Look for pages with event URL patterns (
/events/,/conference/,/webinar/) or visible date/time/location informationAdd Event JSON-LD structured data to the page's
<head>or before</body>:For in-person events:
{ "@context": "https://schema.org", "@type": "Event", "name": "Annual Tech Conference 2024", "startDate": "2024-09-15T09:00:00-05:00", "endDate": "2024-09-16T18:00:00-05:00", "eventStatus": "https://schema.org/EventScheduled", "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode", "location": { "@type": "Place", "name": "Austin Convention Center", "address": { "@type": "PostalAddress", "addressLocality": "Austin", "addressRegion": "TX", "addressCountry": "US" } }, "offers": { "@type": "Offer", "price": "299", "priceCurrency": "USD", "availability": "https://schema.org/InStock" } }For online events: Use
"@type": "VirtualLocation"with aurlpropertyInclude required properties:
name: Event namestartDate: ISO 8601 format with timezonelocation: Place or VirtualLocation
Add recommended properties:
endDate: Event end date/timeeventStatus: Scheduled, Cancelled, or PostponedeventAttendanceMode: In-person, online, or mixedoffers: Ticket pricing and availabilitydescription: Event descriptionimage: Event image URL
Validate with Google's Rich Results Test
Examples
Example 1: No Schema Declared — Not This Issue
<!-- Event page with visible date, location and price, but no Event schema -->
<html>
<head>
<title>Annual Tech Conference 2024</title>
</head>
<body>
<h1>Annual Tech Conference 2024</h1>
<p><strong>Date:</strong> September 15-16, 2024</p>
<p><strong>Location:</strong> Austin Convention Center</p>
<p><strong>Price:</strong> $299</p>
<button>Register Now</button>
</body>
</html>Nothing is reported, however clearly the page describes an event.
Example 1b: The Same Event, Declared and Valid (passes)
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Annual Tech Conference 2024",
"startDate": "2024-09-15T09:00:00-05:00",
"endDate": "2024-09-16T18:00:00-05:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "Place",
"name": "Austin Convention Center",
"address": {
"@type": "PostalAddress",
"addressLocality": "Austin",
"addressRegion": "TX",
"addressCountry": "US"
}
},
"offers": {
"@type": "Offer",
"price": "299",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}eventStatus and eventAttendanceMode are good practice but are not checked by this
issue today.
Example 2: Online Event with VirtualLocation
Corrected state (webinar):
{
"@context": "https://schema.org",
"@type": "Event",
"name": "SEO Webinar: Advanced Techniques",
"startDate": "2024-04-10T14:00:00Z",
"eventAttendanceMode": "https://schema.org/OnlineEventAttendanceMode",
"location": {
"@type": "VirtualLocation",
"url": "https://zoom.us/j/123456789"
}
}Example 3: Incomplete Event Schema (fails)
Problematic state:
{
"@context": "https://schema.org",
"@type": "Event",
"name": "Workshop"
}Reported: startDate missing, location missing.
Corrected state:
{
"@context": "https://schema.org",
"@type": "Event",
"name": "SEO Workshop",
"startDate": "2024-05-20T10:00:00Z",
"location": {
"@type": "Place",
"name": "Conference Room A",
"address": {
"@type": "PostalAddress",
"addressLocality": "Austin",
"addressCountry": "US"
}
}
}A Place location needs both name and address — a name-only location still
fails with location.address missing.
How PixyScan detects this
Read the declared structured data: every JSON-LD block is parsed, and
@graphwrappers are flattened.Select declared
Evententities: any schema block whose@typeisEvent. A page that declares none is not examined — this check does not infer an event page from its URL, or from visible dates, calls to action ("Register now") or ticket text.Check the required properties: a declared
Eventmust havename,startDateandlocation.Check the value rules, when present:
startDate/endDate— each, if present, must be a valid ISO 8601 datelocation— aPlaceneeds anameand anaddress; aVirtualLocation(an online event) needs aurlinstead, and is not asked for a street addressoffers— validated the same way as a Product's offers:price,priceCurrencyandavailabilitymust be present and well-formed (anAggregateOffercarrieslowPriceinstead ofprice)
This is reported when: the page declares an
Eventmissing a required property, or whose declaredstartDate/endDate,locationoroffersfail the rules above. A page describing an event with noEventschema at all is never reported.eventStatusandeventAttendanceModeare not checked at all today.
What we store
Storage Level
Page Level — This issue is evaluated for each individual URL that contains structured data.
Database Table / Prisma Model
PageStructuredData
Stored Fields
| Field | Type | Description |
|---|---|---|
| schemaType | SchemaType | The type of schema (e.g., Organization, Person) |
| schemaFormat | SchemaFormat | The format of the schema (JSON-LD, Microdata, RDFa) |
| schemaIdentifier | String? | Unique identifier for the schema |
| rawJson | Json? | The raw JSON-LD or structured data content |
| schemaErrors | Json? | Array of validation errors found in the schema |
| isValidSchema | Boolean? | Whether the schema is valid according to validation |
| missingFields | Json? | Reserved for future use — the crawler always writes null here today; no check currently populates it |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawler parses the HTML to find structured data (JSON-LD, Microdata, RDFa)
- Structured Data Validation — The extracted schema is validated against Schema.org definitions
- Schema Parser — JSON-LD scripts, Microdata attributes, and RDFa markup are parsed