Skip to Content

No Event schema on an event page

What Is This Issue

Event listing pages are missing Event schema, preventing the event from appearing in Google’s Events carousel, event rich results, and Google Maps event listings.

Without Event schema:

  • Your events won’t appear in Google’s Events carousel
  • Event details won’t show in rich results (date, time, location)
  • Events won’t be listed in Google Maps event listings
  • Users can’t easily add events to their calendars from search results
  • Ticket links won’t appear in search results

A proper Event schema should include: @type (Event), name, startDate, location, and optionally endDate, eventStatus, eventAttendanceMode, offers, description, image.

Why Is This Important

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 XeoPix Detects This

XeoPix follows these logical steps to detect missing Event schema:

  1. Detect event pages: The crawler identifies pages with:

    • Event URL patterns (/events/, /conference/, /webinar/, /workshop/)
    • Visible date/time/location information on the page
    • Text indicating an event (e.g., “Register now”, “Join us”, “Tickets”)
  2. Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page

  3. Check for Event schema: The crawler verifies if any schema block has:

    • @type set to Event
    • Required properties: name, startDate, location
  4. Validate schema completeness: If Event schema is found, the crawler checks for:

    • startDate in ISO 8601 format with timezone
    • location property (Place or VirtualLocation)
    • endDate if the event has an end time
    • eventStatus declared (Scheduled/Cancelled/Postponed)
    • eventAttendanceMode (in-person/online/mixed)
  5. Trigger conditions: The issue is flagged when:

    • Page has event content but no Event schema
    • Event schema exists but startDate is missing
    • Event schema exists but location is missing

How To Fix

  1. Identify event pages: Look for pages with event URL patterns (/events/, /conference/, /webinar/) or visible date/time/location information

  2. Add 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 a url property

  3. Include required properties:

    • name: Event name
    • startDate: ISO 8601 format with timezone
    • location: Place or VirtualLocation
  4. Add recommended properties:

    • endDate: Event end date/time
    • eventStatus: Scheduled, Cancelled, or Postponed
    • eventAttendanceMode: In-person, online, or mixed
    • offers: Ticket pricing and availability
    • description: Event description
    • image: Event image URL
  5. Validate with Google’s Rich Results Test

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

FieldTypeDescription
schemaTypeSchemaTypeThe type of schema (e.g., Organization, Person)
schemaFormatSchemaFormatThe format of the schema (JSON-LD, Microdata, RDFa)
schemaIdentifierString?Unique identifier for the schema
rawJsonJson?The raw JSON-LD or structured data content
schemaErrorsJson?Array of validation errors found in the schema
isValidSchemaBoolean?Whether the schema is valid according to validation
missingFieldsJson?Array of required fields that are missing

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

Examples

Example 1: Missing Event Schema on Event Page

Problematic state:

<!-- Event page without 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>

Corrected state:

<!-- Event page with Event schema --> <html> <head> <title>Annual Tech Conference 2024</title> <script type="application/ld+json"> { "@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" } } </script> </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>

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

Problematic state:

{ "@context": "https://schema.org", "@type": "Event", "name": "Workshop" }

Missing required properties: startDate, location

Corrected state:

{ "@context": "https://schema.org", "@type": "Event", "name": "SEO Workshop", "startDate": "2024-05-20T10:00:00Z", "location": { "@type": "Place", "name": "Conference Room A" } }

Unit Test

Test File

xeopix-crawling-v2/__tests__/seo-audit-checks/structuredDataRichResults/issue-63-event-schema.test.js

Purpose

Validates that the crawler correctly detects when a page with event-related content (event classes, headings, or date patterns) is missing an Event schema.

Tested Function

runStructuredDataRichResults()

Issue Information

  • Issue Number: 63
  • Issue Code: event_schema_event
  • Toggle Group: structuredDataRichResults

Test Scenarios

Positive Test Cases

  • Event schema present: Page has an Event schema with name, startDate, and location — no issue reported.
  • No event content: Page has no event-related content — no issue reported.

Negative Test Cases

  • Event class detected: Page has elements with event or calendar class but no Event schema — issue is reported with detectionHints.hasEventClass set to true.
  • Event heading detected: Page has event-related headings like “Webinar:” or “Upcoming Events” but no schema — issue is reported with detectionHints.hasEventHeading set to true.
  • Event date patterns detected: Page has text content with date patterns suggesting events (e.g., “June 15, 2024”) but no schema — issue is reported with detectionHints.hasEventPatterns set to true.

Boundary Cases

None.

Edge Cases

  • Empty HTML: <html></html> — no issue reported, no crash.
  • Malformed HTML: Unclosed tags — no crash.

Expected Outcome

Pass

Issue should not be reported when an Event schema is present or when the page has no event-related content.

Fail

Issue should be reported when the page contains event-related content (classes, headings, or date patterns) but lacks an Event schema. Detection hints indicate which pattern was matched.

Validation

  • Correct issue detection when event content exists without schema
  • No issue detection when Event schema is present
  • No issue detection when no event content exists
  • Detection hints (hasEventClass, hasEventHeading, hasEventPatterns) populated correctly
  • Graceful handling of empty and malformed HTML
  • xeopix-crawling-v2/toggleGroups/structuredDataRichResults.js
  • xeopix-crawling-v2/issueCodes.js
  • xeopix-crawling-v2/utils/context.js
  • xeopix-crawling-v2/utils/issues.js
  • xeopix-crawling-v2/utils/schema.js

Coverage Summary

  • Covers presence of Event schema
  • Covers detection of event class names, headings, and date patterns
  • Covers absence of false positives when no event content exists
  • Covers empty HTML resilience
  • Covers malformed HTML resilience

References

Last updated on