Skip to content
Browse all guides

Issue #63 · important

Issue 63

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 does it matter?

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

  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

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"
  }
}

How PixyScan detects this

PixyScan 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

References