VideoObject Schema Markup vertieft: Key Moments, hasPart, Clip und transcript Property
Structured Data 20. April 2026 · 14 Min. Lesezeit

VideoObject Schema Markup vertieft: Key Moments, Clips, transcript und seekToAction

Wer sein VideoObject Schema Markup bereits implementiert hat, kennt die Basics: name, description, thumbnailUrl, uploadDate und duration. Aber Google bietet deutlich mehr Möglichkeiten, Videos in den Suchergebnissen hervorzuheben — und die meisten Webmaster nutzen nur einen Bruchteil davon. Dieser Artikel zeigt, wie du mit Key Moments (hasPart + Clip), seekToAction, der transcript-Property und der Video-Sitemap-Integration das Maximum aus deinem VideoObject-Markup herausholst.

Wenn du die Grundlagen von VideoObject noch nicht kennst, empfehle ich zunächst unseren Einsteiger-Artikel zu VideoObject Schema Markup. Dieser Artikel setzt darauf auf und behandelt ausschließlich fortgeschrittene Properties.

1. Key Moments: So funktioniert hasPart mit Clip

Key Moments sind eine der wirkungsvollsten Funktionen in der Google-Videosuche: Sie zeigen Nutzern direkt in den Suchergebnissen Kapitelmarken an, die in das Video an einer bestimmten Zeitstelle springen. Das erhöht die Klickrate deutlich, weil Nutzer sofort sehen, welcher Teil des Videos für ihre Frage relevant ist.

Technisch werden Key Moments über die hasPart-Property eines VideoObject umgesetzt. Jeder Clip ist ein eigenes Clip-Objekt mit Name, Start- und Endzeitpunkt.

Die Clip-Properties im Überblick

Property Typ Pflicht? Beschreibung
@type Text ✅ Ja Immer "Clip"
name Text ✅ Ja Name des Kapitels (z.B. "Einleitung")
startOffset Number ✅ Ja Startzeit in Sekunden ab Videobeginn
endOffset Number ✅ Ja Endzeit in Sekunden
url URL ✅ Ja URL mit Zeitstempel, z.B. https://example.com/video#t=30

Vollständiges JSON-LD-Beispiel mit Key Moments

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "SEO für Anfänger: Vollständige Anleitung 2026",
  "description": "In diesem Video lernst du alles über SEO — von der Keyword-Recherche bis zur technischen Optimierung.",
  "thumbnailUrl": "https://example.com/thumbnails/seo-anfaenger.jpg",
  "uploadDate": "2026-04-01T10:00:00+02:00",
  "duration": "PT42M30S",
  "contentUrl": "https://example.com/videos/seo-anfaenger.mp4",
  "embedUrl": "https://www.youtube.com/embed/abc123xyz",
  "interactionStatistic": {
    "@type": "InteractionCounter",
    "interactionType": "https://schema.org/WatchAction",
    "userInteractionCount": 15847
  },
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Was ist SEO?",
      "startOffset": 0,
      "endOffset": 180,
      "url": "https://example.com/seo-anfaenger#t=0"
    },
    {
      "@type": "Clip",
      "name": "Keyword-Recherche Grundlagen",
      "startOffset": 180,
      "endOffset": 720,
      "url": "https://example.com/seo-anfaenger#t=180"
    },
    {
      "@type": "Clip",
      "name": "On-Page SEO: Title und Meta-Tags",
      "startOffset": 720,
      "endOffset": 1380,
      "url": "https://example.com/seo-anfaenger#t=720"
    },
    {
      "@type": "Clip",
      "name": "Technisches SEO: Ladezeit und Mobile",
      "startOffset": 1380,
      "endOffset": 2100,
      "url": "https://example.com/seo-anfaenger#t=1380"
    },
    {
      "@type": "Clip",
      "name": "Linkaufbau und Backlinks",
      "startOffset": 2100,
      "endOffset": 2550,
      "url": "https://example.com/seo-anfaenger#t=2100"
    }
  ]
}
Wichtig: Die url im Clip-Objekt muss auf eine Seite zeigen, die deinen Player enthält und bei der das Video an der angegebenen Zeitstelle startet. YouTube-Videos unterstützen das automatisch über den #t=-Anker.

2. seekToAction: Sprung direkt in den Player

Die seekToAction-Property ist weniger bekannt als Key Moments, aber ebenfalls relevant: Sie erlaubt es Google, dem Nutzer eine direkte Aktion anzubieten, um an eine bestimmte Zeitstelle im Video zu springen. Das nutzt Google in einigen Rich-Results-Formaten, um interaktive Timeline-Elemente anzuzeigen.

Wie seekToAction funktioniert

Du definierst eine SeekToAction mit einem URL-Template, das einen Zeitstempel-Platzhalter enthält. Google füllt diesen Platzhalter mit der tatsächlichen Zeitangabe, wenn der Nutzer auf einen Sprung klickt.

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "CSS Grid Tutorial",
  "thumbnailUrl": "https://example.com/thumbnails/css-grid.jpg",
  "uploadDate": "2026-03-15T09:00:00+01:00",
  "duration": "PT25M10S",
  "contentUrl": "https://example.com/videos/css-grid.mp4",
  "potentialAction": {
    "@type": "SeekToAction",
    "target": "https://example.com/css-grid-tutorial?t={seek_to_second_number}",
    "startOffset-input": "required name=seek_to_second_number"
  }
}

Der Platzhalter {seek_to_second_number} ist standardisiert — so heißt er immer. Die URL muss auf eine Seite zeigen, auf der dein Video-Player die Zeitangabe aus dem URL-Parameter liest und das Video an dieser Stelle startet. Für eingebettete YouTube-Videos funktioniert das out-of-the-box.

seekToAction und Key Moments kombinieren

Du kannst hasPart (Key Moments) und potentialAction (seekToAction) gleichzeitig im selben VideoObject verwenden. Das maximiert die Darstellungsmöglichkeiten in Google:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "React Hooks erklärt",
  "thumbnailUrl": "https://example.com/thumbs/react-hooks.jpg",
  "uploadDate": "2026-02-20T08:00:00+01:00",
  "duration": "PT35M00S",
  "contentUrl": "https://example.com/videos/react-hooks.mp4",
  "potentialAction": {
    "@type": "SeekToAction",
    "target": "https://example.com/react-hooks?t={seek_to_second_number}",
    "startOffset-input": "required name=seek_to_second_number"
  },
  "hasPart": [
    {
      "@type": "Clip",
      "name": "useState Hook",
      "startOffset": 0,
      "endOffset": 450,
      "url": "https://example.com/react-hooks?t=0"
    },
    {
      "@type": "Clip",
      "name": "useEffect Hook",
      "startOffset": 450,
      "endOffset": 1020,
      "url": "https://example.com/react-hooks?t=450"
    },
    {
      "@type": "Clip",
      "name": "useContext und useReducer",
      "startOffset": 1020,
      "endOffset": 1800,
      "url": "https://example.com/react-hooks?t=1020"
    },
    {
      "@type": "Clip",
      "name": "Custom Hooks schreiben",
      "startOffset": 1800,
      "endOffset": 2100,
      "url": "https://example.com/react-hooks?t=1800"
    }
  ]
}

3. transcript: Das unterschätzte SEO-Signal für Videos

Die transcript-Property ist eine der am meisten ignorierten Möglichkeiten im VideoObject-Markup — dabei ist sie für SEO besonders wertvoll. Wenn du das vollständige Transkript deines Videos als Text hinterlegst, kann Google diesen Text für die Indexierung nutzen und dein Video für viel mehr Suchanfragen ranken lassen.

Google kann zwar mittlerweile Audio aus Videos eigenständig transkribieren, aber ein explizites Transkript ist präziser, wird schneller verarbeitet und ermöglicht es dir, das Transkript suchmaschinenfreundlich zu formulieren.

transcript in JSON-LD implementieren

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "JavaScript Closures erklärt",
  "description": "Was sind Closures in JavaScript? Einfache Erklärung mit Beispielen.",
  "thumbnailUrl": "https://example.com/thumbs/closures.jpg",
  "uploadDate": "2026-04-10T09:00:00+02:00",
  "duration": "PT12M45S",
  "contentUrl": "https://example.com/videos/closures.mp4",
  "transcript": "Willkommen in diesem Video zu JavaScript Closures. Ein Closure entsteht immer dann, wenn eine innere Funktion Zugriff auf Variablen der äußeren Funktion hat — auch nachdem die äußere Funktion bereits zurückgekehrt ist. Das klingt erst kompliziert, wird aber mit einem Beispiel sofort klar. Stell dir vor, du hast eine Funktion makeCounter..."
}

Das Transkript kann beliebig lang sein. Es ist sinnvoll, es so zu strukturieren, dass wichtige Keywords natürlich vorkommen. Verwende den genauen gesprochenen Text — ergänzt um Zeitstempel-Hinweise, falls gewünscht.

Transkript als sichtbarer Text auf der Seite

Noch wirkungsvoller als das JSON-LD-Transkript ist ein sichtbares, aufklappbares Transkript direkt auf der Video-Seite. Gründe dafür:

Das JSON-LD-Transkript und das sichtbare Transkript schließen sich nicht aus — nutze beides. Im transcript-Feld von JSON-LD zeigst du Google explizit an: "Hier ist der Sprachinhalt des Videos."

4. contentUrl vs. embedUrl — was ist der Unterschied?

Viele Entwickler verwechseln diese beiden Properties oder lassen eine davon weg. Dabei erfüllen sie völlig unterschiedliche Funktionen:

Property Was sie enthält Wann nötig?
contentUrl Direkte URL zur Videodatei (MP4, WebM) Immer wenn du das Video selbst hostest
embedUrl URL zum eingebetteten Player (iFrame-Quelle) Bei YouTube, Vimeo, eigene Player-Seiten

Für Google ist contentUrl die bevorzugte Property — sie erlaubt Google, das Video direkt zu crawlen und zu indexieren. Wenn du deine Videos auf YouTube hostest, hast du keine contentUrl (die MP4-Datei ist nicht direkt zugänglich), aber dafür eine embedUrl.

Empfehlung je nach Hosting-Situation

5. duration korrekt im ISO-8601-Format angeben

Das Format für duration ist ISO 8601 und eine häufige Fehlerquelle. Das Kürzel "PT" steht für "Period Time". Hier sind die wichtigsten Beispiele:

Videolänge ISO 8601
45 SekundenPT45S
5 MinutenPT5M
5 Minuten 30 SekundenPT5M30S
1 StundePT1H
1 Stunde 23 Minuten 45 SekundenPT1H23M45S
2 Stunden 10 MinutenPT2H10M

Fehler hier sind häufig und führen zu Validierungsfehlern im Rich Results Test. Achte besonders darauf: Es gibt kein "Komma" oder "Punkt" im Format — nur die Buchstaben H, M, S nach den jeweiligen Zahlen.

6. thumbnailUrl: Was Google verlangt

Google stellt spezifische Anforderungen an das Thumbnail. Wer diese nicht erfüllt, verliert die Chance auf Video Rich Results — auch wenn alle anderen Properties korrekt sind:

Für YouTube-Videos: Das beste Thumbnail-Format ist https://i.ytimg.com/vi/VIDEO_ID/maxresdefault.jpg (HD). Prüfe vorher, ob dieses Bild für dein Video existiert — manche Videos haben nur hqdefault.jpg (480×360).

7. publisher und author richtig angeben

Die publisher-Property ist für Video Rich Results in Google nicht zwingend erforderlich, verbessert aber das E-E-A-T-Signal (Expertise, Experience, Authoritativeness, Trust). Insbesondere für Videos auf themenspezifischen Websites lohnt es sich:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Gitarren-Tutorial für Anfänger",
  "thumbnailUrl": "https://example.com/thumbs/gitarre.jpg",
  "uploadDate": "2026-03-01",
  "duration": "PT18M20S",
  "contentUrl": "https://example.com/videos/gitarre.mp4",
  "publisher": {
    "@type": "Organization",
    "name": "MusicSchool GmbH",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png",
      "width": 200,
      "height": 60
    },
    "url": "https://example.com"
  },
  "author": {
    "@type": "Person",
    "name": "Maria Wagner",
    "url": "https://example.com/autoren/maria-wagner"
  }
}

8. Video-Sitemap: Das Duo mit VideoObject

VideoObject Schema Markup und die Video-Sitemap sind keine Alternativen, sondern Ergänzungen. Während Schema Markup Google das Video auf der Seite beschreibt, teilt die Video-Sitemap Google mit, welche Seiten Videos enthalten und welche Metadaten dazugehören. Zusammen sorgen sie für die zuverlässigste Indexierung.

Eintrag in der Video-Sitemap

<url>
  <loc>https://example.com/videos/seo-tutorial</loc>
  <video:video>
    <video:thumbnail_loc>https://example.com/thumbs/seo.jpg</video:thumbnail_loc>
    <video:title>SEO Tutorial für Einsteiger</video:title>
    <video:description>Vollständige SEO-Anleitung von Grund auf — von Keyword-Recherche bis Linkaufbau.</video:description>
    <video:content_loc>https://example.com/videos/seo.mp4</video:content_loc>
    <video:duration>2550</video:duration>
    <video:publication_date>2026-04-01T09:00:00+02:00</video:publication_date>
    <video:family_friendly>yes</video:family_friendly>
  </video:video>
</url>

Beachte: In der Video-Sitemap wird duration in Sekunden angegeben (ganzzahlig), nicht im ISO-8601-Format wie im Schema Markup. 2550 Sekunden = 42 Minuten 30 Sekunden.

Wann brauche ich eine Video-Sitemap?

Wenn du viele Videos auf deiner Website hast (mehr als 10–20), ist eine Video-Sitemap empfehlenswert. Für einzelne Videos auf wenigen Seiten reicht Schema Markup allein — Google findet und verarbeitet es zuverlässig, sofern Googlebot die Seite crawlen kann.

9. Häufige Fehler und wie du sie vermeidest

Fehler 1: uploadDate ohne Zeit-Offset

Falsch: "uploadDate": "2026-04-01"
Richtig: "uploadDate": "2026-04-01T09:00:00+02:00"
Ohne Zeitangabe und Zeitzone akzeptiert Google das Datum zwar, aber die Angabe ist unvollständig.

Fehler 2: Thumbnail zu klein oder nicht crawlbar

Googlebot muss das Thumbnail abrufen können. Prüfe mit dem Robots.txt-Tester, ob das Bild-Verzeichnis für Crawler freigegeben ist. Bilder hinter Disallow: /wp-content/uploads/ sind für Google nicht sichtbar.

Fehler 3: Key Moments ohne passende URL

Jedes Clip-Objekt braucht eine URL, die bei Aufruf tatsächlich an der richtigen Zeitstelle startet. Wenn du einfach die Seiten-URL ohne Anker angibst, funktionieren Key Moments nicht.

Fehler 4: Markup auf Seiten, die Googlebot blockieren

Das häufigste Problem überhaupt: Du hast perfektes Schema Markup, aber die Seite ist hinter einem Login oder wird durch noindex blockiert. Google kann nur Video Rich Results für öffentlich zugängliche, indexierte Seiten anzeigen. Prüfe das mit unserer kostenlosen SEO-Analyse auf shift07.ai.

Fehler 5: description zu kurz oder deckungsgleich mit name

Die description muss den Videoinhalt wirklich beschreiben — nicht einfach den Titel wiederholen. Google nutzt description auch für die Snippet-Generierung. Mindestens 2–3 Sätze, die erklären, was der Nutzer im Video lernt.

10. Vollständiges VideoObject mit allen fortgeschrittenen Properties

Hier ist ein komplettes, praxisnahes Beispiel, das alle in diesem Artikel besprochenen Properties kombiniert:

{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "Python für Anfänger: Vollständiger Kurs 2026",
  "description": "In diesem vollständigen Python-Kurs lernst du von Grund auf: Variablen, Schleifen, Funktionen, Objektorientierung und erste Projekte. Kein Vorwissen nötig.",
  "thumbnailUrl": "https://example.com/thumbs/python-kurs-1200x675.jpg",
  "uploadDate": "2026-04-15T10:00:00+02:00",
  "duration": "PT2H15M30S",
  "contentUrl": "https://example.com/videos/python-kurs-2026.mp4",
  "embedUrl": "https://www.youtube.com/embed/dQw4w9WgXcQ",
  "transcript": "Willkommen beim vollständigen Python-Kurs 2026. Mein Name ist Max und in den nächsten zwei Stunden werden wir Python von Grund auf lernen. Python ist heute eine der meistgenutzten Programmiersprachen der Welt...",
  "interactionStatistic": {
    "@type": "InteractionCounter",
    "interactionType": "https://schema.org/WatchAction",
    "userInteractionCount": 42315
  },
  "publisher": {
    "@type": "Organization",
    "name": "CodeAcademy DE",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo-200x60.png",
      "width": 200,
      "height": 60
    },
    "url": "https://example.com"
  },
  "author": {
    "@type": "Person",
    "name": "Max Mustermann"
  },
  "potentialAction": {
    "@type": "SeekToAction",
    "target": "https://example.com/python-kurs?t={seek_to_second_number}",
    "startOffset-input": "required name=seek_to_second_number"
  },
  "hasPart": [
    {
      "@type": "Clip",
      "name": "Einleitung und Installation",
      "startOffset": 0,
      "endOffset": 600,
      "url": "https://example.com/python-kurs?t=0"
    },
    {
      "@type": "Clip",
      "name": "Variablen und Datentypen",
      "startOffset": 600,
      "endOffset": 1800,
      "url": "https://example.com/python-kurs?t=600"
    },
    {
      "@type": "Clip",
      "name": "Schleifen: for und while",
      "startOffset": 1800,
      "endOffset": 3000,
      "url": "https://example.com/python-kurs?t=1800"
    },
    {
      "@type": "Clip",
      "name": "Funktionen schreiben",
      "startOffset": 3000,
      "endOffset": 4500,
      "url": "https://example.com/python-kurs?t=3000"
    },
    {
      "@type": "Clip",
      "name": "Objektorientierte Programmierung",
      "startOffset": 4500,
      "endOffset": 6300,
      "url": "https://example.com/python-kurs?t=4500"
    },
    {
      "@type": "Clip",
      "name": "Erstes Python-Projekt",
      "startOffset": 6300,
      "endOffset": 8130,
      "url": "https://example.com/python-kurs?t=6300"
    }
  ]
}

11. Validierung und Testing

Nach der Implementierung solltest du dein Markup immer validieren. Dafür gibt es zwei Haupttools:

Unser eigener JSON-LD Structured Data Validator prüft ebenfalls die Syntax deines Markups und zeigt Fehler übersichtlich an — direkt im Browser, ohne Installation.

Fazit

VideoObject Schema Markup ist weit mehr als name + duration + thumbnailUrl. Mit Key Moments (hasPart + Clip) machst du dein Video interaktiv in der Suche, seekToAction erlaubt direktes Springen, und transcript erschließt den gesprochenen Inhalt für die Indexierung.

Die größten Fehler sind fast immer einfach zu vermeiden: Thumbnail-Größe prüfen, duration im richtigen Format angeben, und sicherstellen, dass Googlebot die Seite tatsächlich crawlen kann. Letzteres prüfst du am schnellsten mit unserer kostenlosen SEO-Analyse auf shift07.ai — in Sekunden siehst du, ob deine Seite Indexierungsprobleme hat.

Wer tiefer in strukturierte Daten für spezifische Inhaltstypen einsteigen möchte, findet auf shift07.ai weitere Artikel: HowTo Schema Markup für Anleitungen, FAQPage Schema vertieft oder speakable Property für Sprachassistenten.

Hat deine Website SEO-Probleme?

Prüfe deine Website kostenlos — in Sekunden siehst du alle technischen SEO-Fehler, fehlende Schema-Markups und Verbesserungspotenziale.

Kostenlose SEO-Analyse starten →
L

Laurenz Thümmler

Co-Founder Shift07 · SEO & Structured Data

Weitere Artikel zu Schema Markup