XooCode(){

Movie

Movie covers feature films, documentaries, shorts, and made-for-TV movies. Google's Movie rich result populates the knowledge panel that appears for movie-title queries: the poster, rating, cast, director, synopsis, and streaming links. It also feeds Google TV, Google Assistant recommendations, and Knowledge Graph entries. If you run a movie database, review site, or streaming platform, Movie markup is how you contribute to that panel.

The pattern worth studying here is potentialAction with a WatchAction. This is how streaming services tell Google "you can watch this title here." Google reads the WatchAction target URL, availability, and pricing to build the "Watch" buttons in the movie panel. Without it, your platform will not appear in the list of providers even if you host the film.

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

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

Highlight legend:Required by GoogleRecommendedOptional
schema.org/Movie
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://xoofilms.dk/the-childrens-doctor#movie",
  "@type": "Movie",
  "name": "The Children's Doctor",
  "alternateName": "Børnelægen",
  "description": "A documentary tracing Jane Xoo's journey from wartime Copenhagen to the pediatric wards that transformed children's medicine across Scandinavia. Features interviews with colleagues, archival footage from Rigshospitalet, and readings from her 1948 textbook.",
  "image": "https://xoofilms.dk/the-childrens-doctor/poster-portrait.jpg",
  "url": "https://xoofilms.dk/the-childrens-doctor",
  "datePublished": "2024-09-14",
  "duration": "PT1H42M",
  "contentRating": {
    "@type": "Rating",
    "ratingValue": "PG",
    "author": {
      "@type": "Organization",
      "name": "MPAA"
    }
  },
  "genre": ["Documentary", "Biography"],
  "inLanguage": "da",
  "subtitleLanguage": ["en", "sv", "no"],
  "countryOfOrigin": {
    "@type": "Country",
    "name": "Denmark"
  },
  "director": {
    "@type": "Person",
    "name": "Mikkel Brandt",
    "url": "https://xoofilms.dk/team/mikkel-brandt"
  },
  "actor": [
    {
      "@type": "Person",
      "name": "Astrid Holm",
      "characterName": "Narrator"
    }
  ],
  "creator": {
    "@type": "Organization",
    "name": "Xoo Films ApS",
    "url": "https://xoofilms.dk"
  },
  "productionCompany": {
    "@type": "Organization",
    "name": "Xoo Films ApS",
    "url": "https://xoofilms.dk"
  },
  "about": {
    "@id": "https://janexoo.com#person"
  },
  "mentions": [
    {
      "@id": "https://roydanmedjournal.dk/archive/1945/pediatric-care-post-war-denmark#article"
    },
    {
      "@id": "https://roydanmedjournal.dk/books/children-first#book"
    }
  ],
  "releasedEvent": {
    "@type": "PublicationEvent",
    "name": "Copenhagen Documentary Festival 2024",
    "startDate": "2024-09-14",
    "location": {
      "@type": "Place",
      "name": "Grand Teatret",
      "address": {
        "@type": "PostalAddress",
        "addressLocality": "Copenhagen",
        "addressCountry": "DK"
      }
    }
  },
  "potentialAction": {
    "@type": "WatchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "https://xoofilms.dk/watch/the-childrens-doctor",
      "actionPlatform": [
        "https://schema.org/DesktopWebPlatform",
        "https://schema.org/MobileWebPlatform"
      ]
    },
    "expectsAcceptanceOf": {
      "@type": "Offer",
      "price": "0",
      "priceCurrency": "DKK",
      "availability": "https://schema.org/InStock"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": "214",
    "bestRating": "5"
  },
  "review": {
    "@type": "Review",
    "author": {
      "@type": "Person",
      "name": "Søren Vestergaard"
    },
    "datePublished": "2024-10-02",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5"
    },
    "reviewBody": "A quiet, powerful film. The archival footage from Rigshospitalet is haunting, and the way the filmmakers connect Xoo's framework to modern pediatric practice makes it feel urgent rather than historical."
  }
}
</script>

WatchAction for streaming links

Each streaming availability is a potentialAction containing a WatchAction. The target is an EntryPoint with the watch URL. The expectsAcceptanceOf Offer specifies whether the film is free, rental, or subscription. Google supports multiple WatchActions per Movie (one per platform or pricing tier). The actionAccessibilityRequirement property can specify whether a subscription is needed.

contentRating

contentRating takes a rating string like "PG-13", "R", "TV-MA", or a full Rating object with ratingValue and author (the rating authority, like "MPAA"). Google displays the content rating in the knowledge panel. Use the abbreviated form ("PG-13") for US audiences, or a Rating object when you need to specify the rating authority for international releases.

duration

duration uses ISO 8601 format: PT1H42M for 1 hour 42 minutes. This is the same format as totalTime on HowTo and timeRequired on TechArticle. Google displays it in the knowledge panel alongside the content rating.

releasedEvent

releasedEvent is a PublicationEvent (or ScreeningEvent) that records where and when the movie premiered. It takes a startDate and an optional location. This is distinct from datePublished, which records the general release date. Use releasedEvent for festival premieres, limited releases, or country-specific release dates.

actor vs director vs creator

director and actor both take Person objects or arrays. creator can be a Person or Organization (the production company). Google reads all three for the knowledge panel's cast and crew section. For each Person, include at least name and ideally url or sameAs (IMDb/Wikipedia link) so Google can match them to existing knowledge graph entities.

Minimal valid version

The smallest markup that still produces a valid Movie 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/Movie (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Movie",
  "name": "The Children's Doctor",
  "image": "https://xoofilms.dk/the-childrens-doctor/poster-portrait.jpg",
  "datePublished": "2024-09-14",
  "director": {
    "@type": "Person",
    "name": "Mikkel Brandt"
  }
}
</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 Movie 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

    duration as plain text

    Wrong
    "duration": "1 hour 42 minutes"
    Right
    "duration": "PT1H42M"

    duration uses ISO 8601 format. PT1H42M means 1 hour 42 minutes. Plain-text durations are not machine-parseable. Google ignores durations it cannot parse and will not display the runtime in the knowledge panel.

  2. 02

    contentRating without a rating authority

    Wrong
    "contentRating": "PG"
    Right
    "contentRating": { "@type": "Rating", "ratingValue": "PG", "author": { "@type": "Organization", "name": "MPAA" } }

    A plain string like "PG" is ambiguous: different countries use the same abbreviations for different age restrictions. A Rating object with an author (the rating authority) removes the ambiguity. The plain string form works for US-centric sites, but the structured form is better for international releases.

  3. 03

    Missing WatchAction for streaming availability

    Wrong
    "url": "https://example.com/watch/movie" (page URL only, no WatchAction)
    Right
    "potentialAction": { "@type": "WatchAction", "target": { "@type": "EntryPoint", "urlTemplate": "https://example.com/watch/movie" } }

    Google uses WatchAction (not plain URLs) to build the "Watch" buttons in the movie knowledge panel. Without a WatchAction, your streaming platform will not appear as a provider even if the url property points to a valid watch page.

  4. 04

    actor as a plain string array

    Wrong
    "actor": ["Astrid Holm", "Mikkel Brandt"]
    Right
    "actor": [{ "@type": "Person", "name": "Astrid Holm" }, { "@type": "Person", "name": "Mikkel Brandt" }]

    actor expects Person objects, not plain strings. Person objects let Google match actors to existing knowledge graph entities. Plain strings validate but lose the connection to the actor's other credits and profile information.

  5. 05

    Using dateCreated instead of datePublished

    Wrong
    "dateCreated": "2024-09-14" (production completion date)
    Right
    "datePublished": "2024-09-14" (public release date)

    Google reads datePublished for the release year shown in the knowledge panel. dateCreated records when production finished, which is usually not what users search for. Use datePublished for the public release date and releasedEvent for premiere details.

About the example data

The film is "The Children's Doctor", a fictional 2024 documentary about Jane Xoo's life and her post-war pediatric framework. The about property references Jane Xoo via @id, and mentions links to the 1945 paper and the 1948 book. The director and narrator are new fictional characters. The film premiered at the Copenhagen Documentary Festival before streaming on a fictional platform.

Comments

Loading comments...

Leave a comment