Guide : VideoObject Schema

Comment implement VideoObject schema pour Google's video résultats enrichis à travers recherche, le Video tab, Images, et Découvrir — requis vs. recommended properties, le deux façons à ajouter clé moments (SeekToAction vs. Clip), et le BroadcastEvent Actif badge.

Première publication : 1 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé

VideoObject schema (schema.org/VideoObject) marks up une page's video donc Google peut montrer video résultats enrichis — thumbnail, duration, et clé moments — à travers four surfaces, pas un: le principal résultats de recherche page, le Video tab, Google Images, et Google Découvrir. Que multi-surface reach est broader que la plupart personnes assume et rend ce un de le deux highest-payoff rich-résultat types dans le cluster (alongside Recipe). Seulement three properties sont requis — nom, thumbnailUrl, et uploadDate — avec contentUrl, description, duration, embedUrl, expires, interactionStatistic, et region eligibility tout recommended. Deux fonctionnalités causer la plupart de le confusion. Clé moments (le chapter timestamps) peut être fait deux façons: automatiquement via SeekToAction/potentialAction si votre video URLs déjà accept a timestamp parameter, or manuellement via Clip markup (nom, startOffset, et url sont requis; endOffset est recommended) quand vous vouloir publisher-specified étiquettes et timestamps au lieu de Google's automatic picks. Et le Actif badge n’est pas a séparé schema — c’est BroadcastEvent (isLiveBroadcast, startDate, endDate — requis une fois vous êtes ajout BroadcastEvent à tout) documented on le même page et utilisé alongside VideoObject. Le la plupart courant miss est omitting uploadDate or writing il dans an inconsistent date format. As toujours, valide markup seulement rend vous eligible — Google, et le video étant crawlable, encore decide si il montre.

TL;DR — schema.org/VideoObject markup (généralement JSON-LD) rend a video eligible pour video résultats enrichis à travers four Google surfaces — principal recherche, le Video tab, Google Images, et Google Découvrir. Requis: name, thumbnailUrl, uploadDate. Recommended: contentUrl, description, duration, embedUrl, expires, interactionStatistic, et regionsAllowed/ineligibleRegion. Clé moments ont deux mechanisms — automatic via SeekToAction/potentialAction (si votre URLs accept a timestamp parameter Google peut infer) or manual via Clip (name, startOffset, et url requis per chapter; endOffset recommended). Le Actif badge est BroadcastEvent (isLiveBroadcast, startDate, endDate) utilisé alongside VideoObject, documented on le même page — pas a séparé système. Le la plupart courant miss est omitting uploadDate or en utilisant an inconsistent date format. Valide markup seulement earns eligibility; Google encore decides si à montrer il, et le video a à être crawlable et indexable. Ce est un de le deux highest-payoff types dans le cluster alongside Recipe — worth doing correctement.

Preuve à l’appui de cette affirmation Schema.org VideoObject defines vocabulary for a video media object; being valid Schema.org does not by itself guarantee a Google video feature. Portée : Schema.org type definition, distinct from Google eligibility. Niveau de confiance : élevé · Vérifié : Schema.org: VideoObject Preuve à l’appui de cette affirmation Google's VideoObject documentation requires name, thumbnailUrl, and uploadDate for video structured-data eligibility and recommends additional properties. Portée : Current Google video structured data requirements; eligibility is not a display guarantee. Niveau de confiance : élevé · Vérifié : Google Search Central: Video structured data

Ce que VideoObject schema fait — un markup, four surfaces

«Most guides flatten VideoObject into “get a thumbnail in search.” The reach is wider than that, and it’s worth leading with because it changes the ROI calculation. Google’s own framing: “Videos can appear in several different places on Google, including the main search results page, Video mode, Google Images, and Google Discover.” That’s four distinct surfaces from one block of markup — which is why I rank this, with Recipe, as one of the two genuinely high-payoff types in the whole structured-data cluster. (It’s no coincidence the two overlap: many Recipe pages embed a cooking video via the recipe’s video property, and that video is itself a VideoObject.) » (Traduction) (Résumé en français de la section vingt-deux, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Le vocabulary est schema.org/VideoObject, et Google’s Video guide covers three connexe types on a unique page: VideoObject itself, Clip (clé moments), et BroadcastEvent (le Actif badge). Worth knowing: là est aucun séparé “media-clip” doc page — l’URL vous pourrait guess à renvoie a 404. Clip et segment markup pour video est folded dans le même Video guide as VideoObject, donc ne pas go hunting pour a dedicated page que ne fait pas exist.

Requis — the minimum pour quelconque video rich result:

PropertyCe que c’est
nameLe video’s titre
thumbnailUrlURL à a representative thumbnail image
uploadDateLe date le video était premier publié (ISO 8601)

Recommended — ajouter as nombreux as appliquer; ils faire le résultat richer and plus reliable:

PropertyPourquoi c’est important
contentUrlDirect URL à le media fichier — aide Google récupérer le video
descriptionLe video’s description (plain texte)
durationISO 8601 duration (e.g. PT4M12S) — powers le runtime badge
embedUrlURL à le player embed
expiresQuand le video est ne … plus disponible (omit si il ne fait pas expire)
interactionStatisticView count via WatchAction interaction type
regionsAllowed / ineligibleRegionOù le video peut / peut pas être affiché

Provide soit contentUrl or embedUrl (les deux est meilleur) donc Google a a façon à reach le réel video — a thumbnail avec aucun reachable video est a courant raison a résultat jamais apparaît. Le three URLs que come up ici ne sont pas interchangeable: contentUrl est le video fichier’s réel contenu bytes (Google’s propre docs appel il le la plupart effective façon pour Google à récupérer le video); embedUrl est le player, pas le fichier; et aucun un est le watch page URL — lune page le video est embedded on. A courant mistake est pointing contentUrl à le watch page au lieu de le raw media fichier.

Preuve à l’appui de cette affirmation Google recommends contentUrl when available because it is the actual video bytes and most effective for fetching; embedUrl is the player URL alternative, not the watch page URL. Portée : web Niveau de confiance : élevé · Vérifié : Video structured data

Clé moments: SeekToAction vs. Clip

Clé moments sont le chapter-style deep liens sous a video résultat que jump le viewer à a spécifique timestamp. Là sont deux mechanisms, et confusing les est le unique biggest source de implementation trouble on ce type.

1. Automatic — SeekToAction / potentialAction. Vous tell Google, via a potentialAction de type SeekToAction, l’URL modèle votre player utilise à jump à a timestamp (le startOffset-input placeholder). Si votre video URLs déjà accept a timestamp parameter, Google peut infer le clé moments itself depuis votre sur la page chapter structure. Utiliser ce quand votre Structure d’URL prend en charge timestamps et vous êtes happy letting Google pick le moments.

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "How to tie a bowline knot",
  "thumbnailUrl": "https://example.com/thumbs/bowline.jpg",
  "uploadDate": "2026-05-01T08:00:00-05:00",
  "description": "A step-by-step guide to tying a bowline.",
  "duration": "PT4M12S",
  "contentUrl": "https://example.com/video/bowline.mp4",
  "embedUrl": "https://example.com/embed/bowline",
  "potentialAction": {
    "@type": "SeekToAction",
    "target": "https://example.com/watch/bowline?t={seek_to_second_number}",
    "startOffset-input": "required name=seek_to_second_number"
  }
}

2. Manual — Clip markup. Vous define chaque chapter explicitly as a Clip. Google’s Clip tableau splits ce le même façon as VideoObject itself: requis — name, startOffset (dans seconds), et a url que deep-liens à que moment; recommended — endOffset (dans seconds), donc le clip a a défini fin as bien as a commencer. Utiliser ce quand vous vouloir à supply votre propre étiquettes et timestamps plutôt que le moments Google’s automatic detection voudrait sinon pick.

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "How to tie a bowline knot",
  "thumbnailUrl": "https://example.com/thumbs/bowline.jpg",
  "uploadDate": "2026-05-01T08:00:00-05:00",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Make the loop",
      "startOffset": 30,
      "endOffset": 75,
      "url": "https://example.com/watch/bowline?t=30"
    },
    {
      "@type": "Clip",
      "name": "Thread the tail",
      "startOffset": 75,
      "endOffset": 130,
      "url": "https://example.com/watch/bowline?t=75"
    }
  ]
}

«Which to use? Automatic SeekToAction is less work if your URLs already support timestamp parameters and you trust Google to pick the moments. Manual Clip is the right call when you want to name and bound each chapter yourself. Don’t stack both mechanisms for the same purpose on the same video — pick one. The decision tree in the Resources group walks this fork. » (Traduction) (Résumé en français de la section trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«## LIVE badges with BroadcastEvent » (Traduction) (Résumé en français de la section trente-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«For livestreams, the red LIVE badge is enabled by adding a BroadcastEvent to your VideoObject via the publication property. It is not a separate, unrelated schema type — it’s documented on the same Video guide and layered onto the VideoObject you already have. BroadcastEvent as a whole isn’t required for a plain video rich result, but once you add it for the LIVE badge, Google’s Clip-style table treats isLiveBroadcast, startDate, and endDate as required together: » (Traduction) (Résumé en français de la section trente-neuf, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

  • isLiveBroadcast: true
  • startDate — quand le broadcast commence or est scheduled à commencer. A startDate dans le future signaux a scheduled broadcast; dans le past or présent, il signaux le stream a en réalité commencé.
  • endDate — quand il ends or est attendu à fin. Google est explicit que une fois le stream a en réalité finished, vous doit mettre à jour endDate à a réel valeur — an endDate dans le future signaux a scheduled fin, dans le past or présent il signaux le stream a ended. Si vous ne pas know le fin temps up front, an approximate endDate est fine à commencer; simplement correct il une fois le stream en réalité wraps.

Nesting startDate/endDate ce façon lets Google infer three lifecycle states — scheduled, actif, ended — depuis le même deux champs, qui est aussi pourquoi a stale endDate (pas corrected après le stream arrête) est le principal façon a lingering Actif badge se produit. None de ce guarantees le badge apparaît à quelconque particulier temps; il seulement supplies le timing Google’s systèmes utiliser à decide.

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Launch livestream 2026",
  "thumbnailUrl": "https://example.com/thumbs/launch.jpg",
  "uploadDate": "2026-06-30T09:00:00-05:00",
  "publication": {
    "@type": "BroadcastEvent",
    "isLiveBroadcast": true,
    "startDate": "2026-07-01T14:00:00-05:00",
    "endDate": "2026-07-01T15:30:00-05:00"
  }
}

Vous aussi besoin à appel Google’s Indexation API pour livestream videos donc le Actif badge apparaît et disappears dans a timely façon — le badge est time-sensitive dans a façon a normal on-demand video n’est pas.

Courant implementation mistakes

  • Omitting uploadDate or en utilisant a sloppy date format. c’est un de seulement three requis champs. Utiliser a consistent ISO 8601 valeur (a complet date-time avec offset est safest). Ce est le unique la plupart courant miss on le type.
  • A thumbnail avec aucun reachable video. Provide contentUrl et/or embedUrl donc Google peut en réalité récupérer le video le thumbnail represents.
  • Marking up a video que Google ne peut pas explorer or indexer. Données structurées ne peut pas rescue a video hidden behind a login, bloqué dans robots.txt, or chargé dans a façon le robot d’exploration ne peut pas voir. Markup décrit le video; il ne fait pas faire il accessible.
  • Stacking les deux key-moment mechanisms. Pick automatic SeekToAction or manual Clip pour a donné video, pas les deux.
  • Forgetting à fermer out a livestream. Définir endDate et mettre à jour le markup une fois le stream ends, or le Actif badge peut linger.
  • Treating valide markup as a guaranteed résultat. As avec chaque rich-résultat type, valide VideoObject markup seulement rend lune page eligible — Google’s systèmes encore decide si à montrer il.

Où ce sits, and video SEO plus broadly

VideoObject est le structured-données couche pour video, et il lives ici alongside son siblings — Recipe (whose pages donc souvent embed a cooking video) et Article (où a video est embedded à l’intérieur a written piece, et le VideoObject décrit que embed). Mais le markup est seulement un slice de getting video à perform dans recherche: hosting, sitemaps, thumbnails, transcripts, vitesse de page autour le player, et comment vous embed tout matter aussi. Ceux broader video SEO topics sit à l’extérieur ce structured-données article — ce page est deliberately scoped à le schema itself.

Pour où VideoObject fits dans le wider structured-données picture, voir le Schema Markup et Données structurées hubs ce article nests sous.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.