XooCode(){

TVEpisode

TVEpisode is an Episode subtype for a single television episode. It adds 4 direct properties: countryOfOrigin (Country), titleEIDR (episode-level EIDR), subtitleLanguage (Language or Text, IETF BCP 47 language tags), and partOfSeason (CreativeWorkSeason).

The canonical TV chain is: TVEpisode → partOfSeason → TVSeason → partOfSeries → TVSeries. Each step matters for Google's TV metadata, distributor joins, and EIDR graph connections.

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

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

Highlight legend:Required by GoogleRecommendedOptional
schema.org/TVEpisode
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TVEpisode",
  "name": "The Robots.txt Conspiracy",
  "episodeNumber": 4,
  "datePublished": "2024-10-06",
  "countryOfOrigin": { "@type": "Country", "name": "United States" },
  "titleEIDR": "10.5240/3E7F-A9B2-4C1D-8E5F-6A7B-C",
  "subtitleLanguage": ["en", "es-419", "fr", "pt-BR", "de", "ja"],
  "partOfSeason": { "@type": "TVSeason", "name": "Crawlers - Season 3", "seasonNumber": 3 },
  "partOfSeries": { "@type": "TVSeries", "name": "Crawlers" },
  "duration": "PT54M32S",
  "actor": [
    { "@type": "Person", "name": "Nora Lindgren", "characterName": "Priya" },
    { "@type": "Person", "name": "Rahul Singh", "characterName": "Indexer Prime" }
  ],
  "director": { "@type": "Person", "name": "Jane Xoo" },
  "productionCompany": { "@type": "Organization", "name": "Xoo Code Studios" },
  "trailer": { "@type": "VideoObject", "name": "S3E04 preview", "contentUrl": "https://xoocode.com/crawlers/s3e04/preview.mp4", "uploadDate": "2024-09-29", "duration": "PT00M48S" }
}
</script>

Multiple subtitle languages

subtitleLanguage accepts a single BCP 47 tag ("en", "es-419") or an array. Use the array form when the episode has multi-language subtitles; use BCP 47 regional tags ("en-GB" vs "en-US") when the distinction matters for your audience.

Minimal valid version

The smallest markup that still produces a valid TVEpisode 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/TVEpisode (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TVEpisode",
  "name": "The Robots.txt Conspiracy",
  "episodeNumber": 4,
  "partOfSeason": { "@type": "TVSeason", "seasonNumber": 3 },
  "partOfSeries": { "@type": "TVSeries", "name": "Crawlers" }
}
</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.

  • TV episode rich result (Google Watch Actions)primary
    Google docs

Common TVEpisode 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

    Skipping partOfSeason

    Wrong
    TVEpisode with partOfSeries but no partOfSeason
    Right
    Populate both: partOfSeason AND partOfSeries

    Google's TV metadata and Watch Action flows expect the full chain. Missing partOfSeason breaks season-navigation UIs and some 'next episode' recommenders.

  2. 02

    subtitleLanguage as free text

    Wrong
    "subtitleLanguage": "English, Spanish, French"
    Right
    "subtitleLanguage": ["en", "es", "fr"] (BCP 47 tags)

    BCP 47 language tags are the standard. Free-text language names cannot be reliably parsed for closed-caption availability flags.

About the example data

Crawlers S3E04, "The Robots.txt Conspiracy", directed by Jane Xoo, EIDR-tracked, subtitled in 6 languages.

Comments

Loading comments...

Leave a comment