XooCode(){

MusicPlaylist

MusicPlaylist is a CreativeWork subtype for any curated, ordered list of music recordings. It is the parent of MusicAlbum and MusicRelease, which is why albums carry numTracks and track. Use MusicPlaylist directly for user-curated playlists, editorial compilations, radio setlists, and streaming-service playlists that are not releases.

MusicPlaylist adds two properties: numTracks (Integer) and track (ItemList or MusicRecording). The track property takes either a bare MusicRecording array (order inferred from array position) or an ItemList with explicit position per item (preferred when the order matters).

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

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

Highlight legend:Required by GoogleRecommendedOptional
schema.org/MusicPlaylist
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MusicPlaylist",
  "name": "Debug Groove",
  "description": "Twelve tracks of instrumental groove curated by Jane Xoo for long coding sessions.",
  "creator": { "@type": "Person", "name": "Jane Xoo" },
  "numTracks": 12,
  "url": "https://xoocode.com/radio/playlists/debug-groove",
  "datePublished": "2026-03-20",
  "track": {
    "@type": "ItemList",
    "itemListElement": [
      { "@type": "ListItem", "position": 1, "item": { "@type": "MusicRecording", "name": "Null Check", "byArtist": { "@type": "MusicGroup", "name": "Stack Trace" } } },
      { "@type": "ListItem", "position": 2, "item": { "@type": "MusicRecording", "name": "Off-by-one", "byArtist": { "@type": "MusicGroup", "name": "Stack Trace" } } },
      { "@type": "ListItem", "position": 3, "item": { "@type": "MusicRecording", "name": "Pointer Arithmetic", "byArtist": { "@type": "MusicGroup", "name": "Segfault Orchestra" } } }
    ]
  }
}
</script>

track vs itemListElement

Prefer track at the top level of MusicPlaylist. If you use itemListElement with ItemList nesting, keep position on each ListItem. Do not duplicate the list: either the MusicPlaylist IS the ItemList (same entity), or it links to one via track, not both.

Minimal valid version

The smallest markup that still produces a valid MusicPlaylist 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/MusicPlaylist (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MusicPlaylist",
  "name": "Debug Groove",
  "numTracks": 12,
  "creator": { "@type": "Person", "name": "Jane Xoo" }
}
</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 MusicPlaylist 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

    numTracks mismatch with the track array length

    Wrong
    numTracks: 12 but track has 8 items
    Right
    Keep numTracks and the track array count in sync (or omit numTracks and let consumers count)

    Mismatches confuse consumers and can cause ItemList validation warnings. If the playlist is variable or partial, leave numTracks out.

  2. 02

    Using MusicPlaylist for a release

    Wrong
    MusicPlaylist for an officially released album
    Right
    MusicAlbum (a MusicPlaylist subtype) for releases

    MusicAlbum carries release-specific properties (albumProductionType, byArtist, albumRelease). A commercial release should be MusicAlbum, not its parent.

About the example data

"Debug Groove", a Jane Xoo editorial playlist on the Xoo Code radio station, 12 tracks for long coding sessions.

Comments

Loading comments...

Leave a comment