XooCode(){

MusicEvent

MusicEvent is an Event subtype for concerts, recitals, music festivals, DJ sets, and any live music performance. It adds no properties of its own. Everything is inherited from Event. But the @type value matters: Google, Songkick, Bandsintown, and other event aggregators read it to classify the event as a music performance rather than a conference or workshop. Google's Event rich result works with MusicEvent out of the box.

The type hierarchy is Thing → Event → MusicEvent. The properties that matter most for concerts are performer (the artist or band), workPerformed (what compositions are being played), doorTime (when doors open, which is not the same as when the music starts), and offers (ticket information). Google still requires eventAttendanceMode on every Event subtype, a holdover from the pandemic that is now permanent.

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

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

Highlight legend:Required by GoogleRecommendedOptional
schema.org/MusicEvent
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026#event",
  "@type": "MusicEvent",
  "name": "Nora Lindgren & The Copenhagen Ensemble: The Children's Doctor Live",
  "url": "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026",
  "description": "The Copenhagen Ensemble performs Nora Lindgren's award-winning score for The Children's Doctor documentary live at The Thunderdome. A benefit concert for the Children First Foundation's pediatric research fund.",
  "image": [
    "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026/poster-1x1.jpg",
    "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026/poster-4x3.jpg",
    "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026/poster-16x9.jpg"
  ],
  "startDate": "2026-06-14T19:30:00-04:00",
  "endDate": "2026-06-14T22:00:00-04:00",
  "doorTime": "2026-06-14T18:00:00-04:00",
  "duration": "PT2H30M",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@id": "https://thunderdomedunmore.com#venue",
    "@type": "Place",
    "name": "The Thunderdome",
    "url": "https://thunderdomedunmore.com",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "500 Main Street",
      "addressLocality": "Dunmore",
      "addressRegion": "PA",
      "postalCode": "18512",
      "addressCountry": "US"
    }
  },
  "performer": [
    {
      "@id": "https://copenhagenensemble.dk#group",
      "@type": "MusicGroup",
      "name": "The Copenhagen Ensemble"
    },
    {
      "@type": "Person",
      "name": "Nora Lindgren",
      "url": "https://noralindgren.dk",
      "jobTitle": "Conductor"
    }
  ],
  "workPerformed": {
    "@id": "https://xoofilms.dk/music/the-childrens-doctor-score#album",
    "@type": "MusicAlbum",
    "name": "The Children's Doctor: Original Score"
  },
  "organizer": {
    "@id": "https://childrenfirstfoundation.dk#ngo",
    "@type": "NGO",
    "name": "Children First Foundation",
    "url": "https://childrenfirstfoundation.dk"
  },
  "offers": [
    {
      "@type": "Offer",
      "name": "General Admission",
      "price": "45.00",
      "priceCurrency": "USD",
      "availability": "https://schema.org/InStock",
      "url": "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026/tickets",
      "validFrom": "2026-03-01T10:00:00-05:00"
    },
    {
      "@type": "Offer",
      "name": "VIP Seating",
      "price": "120.00",
      "priceCurrency": "USD",
      "availability": "https://schema.org/LimitedAvailability",
      "url": "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026/tickets?tier=vip",
      "validFrom": "2026-03-01T10:00:00-05:00"
    }
  ],
  "sponsor": {
    "@type": "Corporation",
    "@id": "https://redpoint9.com#org",
    "name": "Redpoint 9 Corp",
    "url": "https://redpoint9.com"
  },
  "maximumAttendeeCapacity": 2000,
  "isAccessibleForFree": false,
  "inLanguage": "en",
  "recordedIn": {
    "@type": "VideoObject",
    "name": "The Children's Doctor Live: Concert Film",
    "description": "Full concert recording of The Copenhagen Ensemble performing at The Thunderdome"
  }
}
</script>

performer

performer identifies who is playing. It takes a Person, Organization, or PerformingGroup. For bands and orchestras, reference a MusicGroup (which extends PerformingGroup → Organization). For solo artists, you can use either Person or MusicGroup. Schema.org explicitly says MusicGroup "can also be a solo musician." Multiple acts go in an array. Google pulls performer names into the Event rich result card, so a structured object with name and url gets you more than a plain string.

workPerformed

workPerformed (a sub-property of workFeatured) connects the event to whatever is being performed. For concerts, that means MusicAlbum, MusicComposition, or MusicRecording objects. This is how the knowledge graph connects a live event back to the recorded version: a MusicEvent performs a composition that was recorded as a MusicRecording on a MusicAlbum. Google reads these links to show "performed live at" connections in knowledge panels.

MusicEvent vs Event

Use MusicEvent when the event is primarily a music performance. Use generic Event for conferences, workshops, or mixed-format events that happen to include music. A concert inside a conference is a MusicEvent nested as a subEvent inside the conference Event. Schema.org has no further subtypes under MusicEvent, so concerts, recitals, festivals, and DJ nights all use the same type.

doorTime vs startDate

doorTime is when the venue opens. startDate is when the performance begins. Most concerts have a 30-90 minute gap between the two. If you set them to the same value, you are either telling people to arrive late or misrepresenting when the music actually starts. Google shows both times separately in the Event rich result when both are present. Use ISO 8601 date-time format with timezone offset: 2026-06-14T18:00:00-04:00.

Minimal valid version

The smallest markup that still produces a valid MusicEvent 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/MusicEvent (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MusicEvent",
  "name": "Nora Lindgren & The Copenhagen Ensemble: The Children's Doctor Live",
  "startDate": "2026-06-14T19:30:00-04:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "The Thunderdome",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "500 Main Street",
      "addressLocality": "Dunmore",
      "addressRegion": "PA",
      "postalCode": "18512",
      "addressCountry": "US"
    }
  },
  "performer": {
    "@type": "PerformingGroup",
    "name": "The Copenhagen Ensemble"
  },
  "image": "https://thunderdomedunmore.com/events/copenhagen-ensemble-2026/poster-16x9.jpg",
  "description": "The Copenhagen Ensemble performs the score from The Children's Doctor documentary live at The Thunderdome."
}
</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 MusicEvent 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

    Using generic Event for a concert

    Wrong
    "@type": "Event" for a concert or live music performance
    Right
    "@type": "MusicEvent"

    MusicEvent tells Google and event aggregators that this is a music performance, not a conference. Generic Event works but loses the classification signal. Songkick and Bandsintown filter specifically for MusicEvent when populating concert listings.

  2. 02

    performer as a plain string

    Wrong
    "performer": "The Copenhagen Ensemble"
    Right
    "performer": {
      "@type": "MusicGroup",
      "name": "The Copenhagen Ensemble",
      "url": "https://copenhagenensemble.dk"
    }

    performer expects a Person or Organization (including MusicGroup) object, not a string. A plain string cannot be matched to a knowledge graph entity. Give it name, url, and ideally @id so Google can connect the performer to their artist knowledge panel and Spotify profile.

  3. 03

    doorTime and startDate set to the same time

    Wrong
    "doorTime": "2026-06-14T19:30:00-04:00",
    "startDate": "2026-06-14T19:30:00-04:00"
    Right
    "doorTime": "2026-06-14T18:00:00-04:00",
    "startDate": "2026-06-14T19:30:00-04:00"

    doorTime is when the venue opens to the audience. startDate is when the performance begins. For most concerts, doors open 30-90 minutes before the first act. Setting them to the same time either tells attendees to arrive too late (missing door opening) or misrepresents when the music actually starts. Google displays both times separately in the Event rich result.

  4. 04

    workPerformed as a title string

    Wrong
    "workPerformed": "The Children's Doctor: Original Score"
    Right
    "workPerformed": {
      "@type": "MusicAlbum",
      "name": "The Children's Doctor: Original Score",
      "@id": "https://xoofilms.dk/music/the-childrens-doctor-score#album"
    }

    workPerformed expects a CreativeWork object: MusicAlbum, MusicComposition, or MusicRecording. A structured reference with @id lets Google connect the event to the album or composition in the knowledge graph. A plain title string has no entity to link to.

About the example data

The Copenhagen Ensemble performs Nora Lindgren's film score for The Children's Doctor live at The Thunderdome in Dunmore, PA. The concert is organized by the Children First Foundation as a fundraiser for pediatric research, with Redpoint 9 Corp as sponsor. The performer references the MusicGroup entity and workPerformed references the MusicAlbum via @id.

Comments

Loading comments...

Leave a comment