XooCode(){

Event

Event markup covers anything with a start date, an end date, and a location. Conferences, concerts, workshops, theatrical performances, classes, festivals, all of it. It powers Google's Event rich result, which surfaces as a dedicated card above regular search results for event queries.

One gotcha worth calling out early: since 2020 Google requires eventAttendanceMode on every Event that wants the rich result. Set it to OfflineEventAttendanceMode, OnlineEventAttendanceMode, or MixedEventAttendanceMode. The Common Mistakes section below covers this and a couple of other easy-to-miss requirements.

Full example of schema.org/Event json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/Event
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "@id": "https://xoocode.com/xoocon-2018/#Event",
  "name": "XooCon 2018",
  "url": "https://xoocode.com/xoocon-2018/",
  "sameAs": "https://wikipedia.org/Event/XooCon2018/",
  "description": "Come together for the coding even of the year at XooCon 2018!",
  "alternateName": "Xoo Code Convention 2018",
  "image": "https://xoocode.com/images/xoocode-1018-promo-image-front.jpg",
  "location": {
    "@id": "https://xoocode.com#thunderdome",
    "@type": "Place",
    "name": "Kopenhagen Thunderdome",
    "url": "https://thunderdome.dk/",
    "address": "Thunderdome vej 12"
  },
  "maximumAttendeeCapacity": "3000",
  "remainingAttendeeCapacity": "512",
  "organizer": {
    "@type": "Organization",
    "name": "Xoo Code Inc.",
    "url": "https://xoocode.com"
  },
  "offers": [
    {
      "@id": "https://xoocode.com/shop/events/xoocon-2018-single-day-ticket",
      "name": "XooCon Day Pass",
      "availability": "https://schema.org/InStock",
      "price": "995",
      "priceCurrency": "DKK",
      "validFrom": "2018-04-20",
      "url": "https://xoocode.com/shop/events/xoocon-2018-single-day-ticket"
    },
    {
      "name": "XooCon Full Pass",
      "availability": "https://schema.org/InStock",
      "price": "1495",
      "priceCurrency": "DKK",
      "validFrom": "2018-04-20",
      "url": "https://xoocode.com/shop/events/xoocon-2018-full-pass-ticket"
    },
    {
      "@id": "https://xoocode.com/shop/events/ict-year-ticket",
      "name": "Tour Year Pass",
      "availability": "https://schema.org/InStock",
      "price": "595",
      "priceCurrency": "EUR",
      "validFrom": "2018-01-04",
      "url": "http://internationalcodetour.com/shop/year-pass"
    }
  ],
  "identifier": "XC-ID-2018",
  "potentialAction": "Participation",
  "typicalAgeRange": "24-40",
  "subjectOf": "https://youtube.com/XooCon2018-promo-video/",
  "about": "Programming Code",
  "attendee": [
    {
      "@id": "https://xoocode.com#attendee-github",
      "@type": "Organization",
      "name": "GitHub Inc."
    },
    {
      "@id": "https://xoocode.com#attendee-safra-cruz",
      "@type": "Person",
      "name": "Safra Catz",
      "jobTitle": "CEO",
      "worksFor": {
        "@type": "Organization",
        "name": "Oracle Inc."
      }
    }
  ],
  "audience": {
    "audienceType": "Programmers",
    "geographicArea": {
      "@type": "AdministrativeArea",
      "address": "Denmark"
    }
  },
  "contributor": [
    {
      "@id": "https://xoocode.com#xoo-partner1",
      "@type": "Organization",
      "name": "Xoo Partner 1"
    },
    {
      "@type": "Organization",
      "name": "Xoo Partner 2"
    }
  ],
  "performer": {
    "@id": "https://xoocode.com#attendee-safra-cruz"
  },
  "workFeatured": "Schema Examples 2018",
  "startDate": "2018-04-20",
  "endDate": "2018-04-21",
  "doorTime": "2018-04-20T10:00:00",
  "duration": "P2D",
  "eventStatus": "https://schema.org/EventRescheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "previousStartDate": "2018-03-10",
  "funder": {
    "@id": "https://xoocode.com#funder-microsoft-global",
    "@type": "Organization",
    "name": "Microsoft Global"
  },
  "inLanguage": "da",
  "isAccessibleForFree": true,
  "subEvent": {
    "@type": "Event",
    "name": "Schema Coder of the Year 2018",
    "description": "Award ceremony honoring the most prominent markup coder of the year 2018",
    "url": "https://xoocode.com/events/scy2018/",
    "location": {
      "@id": "https://xoocode.com#thunderdome"
    },
    "startDate": "2018-04-20",
    "endDate": "2018-04-20",
    "offers": {
      "@id": "https://xoocode.com/shop/events/xoocon-2018-single-day-ticket"
    },
    "performer": {
      "@id": "https://xoocode.com#funder-microsoft-global"
    },
    "image": "https://xoocode.com/images/scy-2018.jpg"
  },
  "superEvent": {
    "@type": "Event",
    "name": "Code Tour 2018",
    "description": "The official grand coding tour for the year 2018 kicks off in January and tours 14 locations throughout the year!",
    "url": "http://internationalcodetour.com",
    "location": {
      "@id": "https://xoocode.com#thunderdome"
    },
    "startDate": "2018-01-04",
    "endDate": "2018-12-20",
    "offers": {
      "@id": "https://xoocode.com/shop/events/ict-year-ticket"
    },
    "performer": {
      "@id": "https://xoocode.com#funder-microsoft-global"
    },
    "image": "https://xoocode.com/images/code-tour-main-image-2018.jpg"
  },
  "translator": {
    "@type": "Organization",
    "name": "Intl. Translator Services Inc.",
    "url": "http://itsi.com"
  }
}
</script>

Rich result preview

Approximate preview of what Google may render from this markup. Hover any element inside the card to see which JSON-LD path produced it. Google decides whether to show any rich result. Markup makes you eligible, not guaranteed.

google.com/search?q=xoocon%202018%20tickets
(image)
Apr 20, 2018

XooCon 2018

Kopenhagen Thunderdome
From 995 DKK

Minimal valid version

The smallest markup that still produces a valid Event entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/Event (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "XooCon 2018",
  "startDate": "2018-04-20",
  "endDate": "2018-04-21",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Kopenhagen Thunderdome",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Thunderdome vej 12",
      "addressLocality": "Kopenhagen",
      "addressCountry": "DK"
    }
  },
  "image": "https://xoocode.com/images/xoocode-1018-promo-image-front.jpg",
  "description": "Come together for the coding event of the year at XooCon 2018!"
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common Event mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    eventStatus as a plain string instead of a URL enum

    Wrong
    "eventStatus": "Scheduled"
    Right
    "eventStatus": "https://schema.org/EventScheduled"

    Google requires full schema.org URL enums for eventStatus. The valid values are EventScheduled, EventRescheduled, EventPostponed, EventMovedOnline, and EventCancelled, each prefixed with https://schema.org/.

  2. 02

    Missing eventAttendanceMode after 2020

    Wrong
    Event with only location and no eventAttendanceMode
    Right
    "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode"

    Google introduced eventAttendanceMode during the pandemic and now treats its absence as a quality signal. Set it to OfflineEventAttendanceMode, OnlineEventAttendanceMode, or MixedEventAttendanceMode. Required for the Event rich result since 2020.

  3. 03

    location as a string instead of Place + PostalAddress

    Wrong
    "location": "Kopenhagen Thunderdome, Denmark"
    Right
    "location": {
      "@type": "Place",
      "name": "Kopenhagen Thunderdome",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "Thunderdome vej 12",
        "addressLocality": "Kopenhagen",
        "addressCountry": "DK"
      }
    }

    Google's Event rich result requires location.address with at least streetAddress, addressLocality, and addressCountry. A flat string will validate but the rich result will not appear.

Also mentioned in 22 other examples

Event also appears in ArtGallery, BookStore, BroadcastEvent, Cemetery, CityHall, CompoundPriceSpecification, ConferenceEvent, EntertainmentBusiness, and 14 more. See the full Event schema page for every reference.

About the example data

The example is XooCon 2018, a fictional developer conference in Copenhagen, and follows the schema.org/Event vocabulary. It demonstrates events with multiple ticket tiers (via the offers array), nested sub-events, sponsors, speakers, and the ISO 8601 duration format for doorTime and duration.

Comments

Loading comments...

Leave a comment