Identify the relationships among TV series, TV season, and TV episode

You need to provide the relationships among all the TVEpisode, TVSeason, and TVSeries entity types in your catalog. This information helps Google display the proper order and structure of your content to users and identify the correct TV shows when a user query is ambiguous.

TVSeries, TVSeason, and TVEpisode relations

Watch Actions' TVSeries, TVSeason, and TVEpisode entity types describe the following:

  • TVEpisode - A single episode of a TV series.
    • For example, Episode 3 of My Favorite TV Show (season 7).
  • TVSeries - A television program that contains a series of episodes.
    • For example, My Favorite TV Show.
  • TVSeason - A single season of a TV series; a season contains a group of episodes are broadcast in the same run.
    • For example, My Favorite TV Show (season 7).
    • Providing TVSeason as a full entity is optional.
      • However, if you choose to provide TVSeason entities for a TV series, those TVSeason entities must cover all the episodes of the TV series in your catalog. For instance, My Favorite TV Show has 8 seasons and each season has 5 episodes. Your feed contains all 40 episodes of My Favorite TV Show. If you provide TVSeason entities for the show, then your feed must include all 8 TVSeason entities.
Figure 1. The partOfSeries and partOfSeason properties connect the TV show entity types together.

These entity types have the following relations:

  • A TVEpisode entity requires you to provide the partOfSeries property, which specifies the @id and name of the episode's TVSeries entity.

    "partOfSeries": {
      "@type": "TVSeries",
      "@id": "http://www.example.com/my_favorite_tv_show",
      "name": "My Favorite TV Show",
    },
    
  • If your feed contains TV seasons, a TVSeason entity also requires you to specify its TVSeries entity in the partOfSeries property.

  • A TVEpisode entity requires you to provide the partOfSeason property, which specifies the @id and seasonNumber of the episode's TVSeason entity.

    "partOfSeason": {
      "@type": "TVSeason",
      "@id": "http://www.example.com/my_favorite_tv_show/s7",
      "seasonNumber": 7
    },
    

    If a TVEpisode entity doesn't have a corresponding TVSeason entity in the feed, take the following steps to provide the partOfSeason.@id and partOfSeason.seasonNumber properties for the TVEpisode entity:

    • Take its partofSeries.@id and attach a dummy query field (for example, ?season1) to create a unique partOfSeason.@id (for example, http://www.example.com/my_favorite_tv_show?season1).
    • Set partOfSeason.seasonNumber to 1.
    Later, if you decide to provide TV seasons in the feed, you can either reuse the existing partOfSeason.@id for the corresponding TVSeason entity or replace this placeholder partOfSeason.@id with the actual @id of the TVSeason entity.

TVSeries, TVSeason, and TVEpisode examples

TVSeries

My Favorite TV Show

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "TVSeries",
  "@id": "http://www.example.com/my_favorite_tv_show",
  "url": "http://www.example.com/my_favorite_tv_show",
  "name": "My Favorite TV Show",
  "potentialAction":{ … },
  ...
}

TVSeason

My Favorite TV Show (season 7)

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "TVSeason",
  "@id": "http://www.example.com/my_favorite_tv_show/s7",
  "url": "http://www.example.com/my_favorite_tv_show/s7",
  "name": "My Favorite TV Show, Season 7",
  "seasonNumber": 7,
  "partOfSeries": {
    "@type": "TVSeries",
    "@id": "http://www.example.com/my_favorite_tv_show",
    "name": "My Favorite TV Show",
  },
  "potentialAction":{ … },
  ...
}

TVEpisode

Episode 3 of My Favorite TV Show (season 7)

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "TVEpisode",
  "@id": "http://www.example.com/my_favorite_tv_show/s7/e3",
  "url": "http://www.example.com/my_favorite_tv_show/s7/e3",
  "name": "John Doe returns at night",
  "episodeNumber": 3,
  "partOfSeason": {
    "@type": "TVSeason",
    "@id": "http://www.example.com/my_favorite_tv_show/s7",
    "seasonNumber": 7
  },
  "partOfSeries": {
    "@type": "TVSeries",
    "@id": "http://www.example.com/my_favorite_tv_show",
    "name": "My Favorite TV Show",
  },
  "potentialAction":{ … },
  ...
}

Identify the relationships

Do the following:

  1. For each TVEpisode,
    • Collect @id and name of its TVSeries.
    • If the TVEpisode has a corresponding TVSeason, collect @id and seasonNumber of its TVSeason.
  2. For each TVSeason,
    • Collect @id and name of its TVSeries.