SportsEvent
SportsEvent is an Event subtype for games, matches, races, and athletic competitions. Unlike MusicEvent (which adds nothing), SportsEvent defines 4 properties of its own: homeTeam, awayTeam, competitor, and sport. These let you describe who is playing, where, and what sport it is. Google reads SportsEvent for the Event rich result and feeds the data into sports search features.
The type hierarchy is Thing → Event → SportsEvent. All Event properties apply on top of the 4 SportsEvent-specific ones. You still need eventStatus, eventAttendanceMode, location with a full address, and startDate to qualify for the Event rich result.
Full example of schema.org/SportsEvent json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@id": "https://dunmoredynamos.com/schedule/2026-06-21-scranton#event",
"@type": "SportsEvent",
"name": "Dunmore Dynamos vs Scranton Miners",
"url": "https://dunmoredynamos.com/schedule/2026-06-21-scranton",
"description": "Lackawanna County Basketball League regular-season game. The Dunmore Dynamos host the Scranton Miners at The Thunderdome.",
"sport": "Basketball",
"image": [
"https://dunmoredynamos.com/schedule/2026-06-21-scranton/poster-1x1.jpg",
"https://dunmoredynamos.com/schedule/2026-06-21-scranton/poster-4x3.jpg",
"https://dunmoredynamos.com/schedule/2026-06-21-scranton/poster-16x9.jpg"
],
"startDate": "2026-06-21T19:00:00-04:00",
"endDate": "2026-06-21T21:30:00-04:00",
"doorTime": "2026-06-21T18:00:00-04:00",
"duration": "PT2H30M",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@id": "https://thunderdomedunmore.com#venue",
"@type": "StadiumOrArena",
"name": "The Thunderdome",
"url": "https://thunderdomedunmore.com",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 Main Street",
"addressLocality": "Dunmore",
"addressRegion": "PA",
"postalCode": "18512",
"addressCountry": "US"
}
},
"homeTeam": {
"@id": "https://dunmoredynamos.com#team",
"@type": "SportsTeam",
"name": "Dunmore Dynamos",
"url": "https://dunmoredynamos.com",
"sport": "Basketball"
},
"awayTeam": {
"@type": "SportsTeam",
"name": "Scranton Miners",
"url": "https://scrantonminers.com",
"sport": "Basketball"
},
"organizer": {
"@type": "SportsOrganization",
"name": "Lackawanna County Basketball League",
"url": "https://lcbl.org"
},
"offers": [
{
"@type": "Offer",
"name": "General Admission",
"price": "15.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://dunmoredynamos.com/tickets/2026-06-21-scranton",
"validFrom": "2026-05-01"
},
{
"@type": "Offer",
"name": "Courtside",
"price": "45.00",
"priceCurrency": "USD",
"availability": "https://schema.org/LimitedAvailability",
"url": "https://dunmoredynamos.com/tickets/2026-06-21-scranton?tier=courtside",
"validFrom": "2026-05-01"
}
],
"sponsor": {
"@id": "https://xoocode.com#organization",
"@type": "Organization",
"name": "Xoo Code Inc."
},
"maximumAttendeeCapacity": 2000,
"isAccessibleForFree": false,
"inLanguage": "en"
}
</script>homeTeam and awayTeam
homeTeam and awayTeam each take a Person or SportsTeam object. Both are sub-properties of competitor. For team sports with a home/away distinction (basketball, football, baseball, hockey), use these instead of the generic competitor. Reference existing SportsTeam entities via @id so Google can connect the game to the team's knowledge panel, schedule, and season record.
competitor
competitor is the generic version. Use it for individual sports (tennis, golf, boxing, track) where home/away does not apply, or for multi-competitor events like races. It takes a Person or SportsTeam. For a tennis match, competitor is an array of two Person objects. For a marathon, it could be an array of hundreds. For team sports with a home/away split, prefer homeTeam/awayTeam over competitor since the distinction carries meaning.
sport
sport takes a text string or URL naming the sport: "Basketball", "Football", "Tennis". This is the same property that appears on SportsTeam via SportsOrganization. It is technically in schema.org's pending extensions, but Google reads it and it is widely adopted. Use the common English name. Do not use compound descriptions like "Men's Professional Basketball."
SportsEvent vs Event
Use SportsEvent for any athletic competition. Use generic Event for watch parties, fan meetups, or sports-adjacent gatherings that are not the competition itself. A Super Bowl watch party at a bar is an Event. The Super Bowl itself is a SportsEvent. If you are marking up a game schedule page, each game is a SportsEvent.
Minimal valid version
The smallest markup that still produces a valid SportsEvent 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.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SportsEvent",
"name": "Dunmore Dynamos vs Scranton Miners",
"startDate": "2026-06-21T19:00:00-04:00",
"eventStatus": "https://schema.org/EventScheduled",
"eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
"location": {
"@type": "StadiumOrArena",
"name": "The Thunderdome",
"address": {
"@type": "PostalAddress",
"streetAddress": "500 Main Street",
"addressLocality": "Dunmore",
"addressRegion": "PA",
"postalCode": "18512",
"addressCountry": "US"
}
},
"homeTeam": {
"@type": "SportsTeam",
"name": "Dunmore Dynamos"
},
"awayTeam": {
"@type": "SportsTeam",
"name": "Scranton Miners"
},
"image": "https://dunmoredynamos.com/schedule/2026-06-21-scranton/poster-16x9.jpg",
"description": "Lackawanna County Basketball League regular-season game 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.
- Google docsEvent rich resultprimary
Common SportsEvent 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.
- 01
Using competitor instead of homeTeam/awayTeam for team sports
Wrong"competitor": [{ "@type": "SportsTeam", "name": "Dunmore Dynamos" }, { "@type": "SportsTeam", "name": "Scranton Miners" }]Right"homeTeam": { "@type": "SportsTeam", "name": "Dunmore Dynamos" }, "awayTeam": { "@type": "SportsTeam", "name": "Scranton Miners" }For team sports with a home/away distinction, homeTeam and awayTeam carry more information than the generic competitor array. The distinction matters for schedules, venue context, and sports search results. Use competitor only for individual sports or multi-competitor events where home/away does not apply.
- 02
homeTeam and awayTeam as plain strings
Wrong"homeTeam": "Dunmore Dynamos"Right"homeTeam": { "@type": "SportsTeam", "name": "Dunmore Dynamos", "@id": "https://dunmoredynamos.com#team" }homeTeam and awayTeam expect Person or SportsTeam objects. A plain string cannot be linked to the team's knowledge graph entity. Use a structured SportsTeam with name, @id or url so Google can connect the game to the team's knowledge panel and schedule.
- 03
Using Event instead of SportsEvent for a game
Wrong"@type": "Event" for a basketball gameRight"@type": "SportsEvent"SportsEvent gives you homeTeam, awayTeam, competitor, and sport. Generic Event has none of these. Google's sports search features read SportsEvent specifically. Using plain Event for a game means you cannot express who is playing whom.
- 04
Missing sport property
WrongSportsEvent with homeTeam and awayTeam but no sportRight"sport": "Basketball"sport tells Google what sport this is. Without it, the only signal is the team names and context. The property is technically pending in schema.org, but it is widely adopted and Google reads it. Use a simple English name: "Basketball", not "Men's Division I College Basketball."
Schema properties in this example
About the example data
The Dunmore Dynamos host the Scranton Miners in a Lackawanna County Basketball League regular-season game at The Thunderdome. The homeTeam references the SportsTeam entity via @id, and Xoo Code Inc. sponsors the game.
Comments
Loading comments...