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: Dieurlim 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:
- Google indexiert den sichtbaren Seitentext direkt und zuverlässig
- Nutzer mit Hörbeeinträchtigungen profitieren (Barrierefreiheit)
- Längere Zeit auf der Seite (weil Nutzer den Text lesen)
- Natürliche interne Verlinkungsmöglichkeiten im Text
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
- Selbst gehostete Videos: Verwende
contentUrl(MP4-Direktlink) und optionalembedUrl(dein Player) - YouTube-Videos: Verwende nur
embedUrl(https://www.youtube.com/embed/VIDEO_ID) - Vimeo-Videos: Verwende nur
embedUrl(https://player.vimeo.com/video/VIDEO_ID)
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 Sekunden | PT45S |
| 5 Minuten | PT5M |
| 5 Minuten 30 Sekunden | PT5M30S |
| 1 Stunde | PT1H |
| 1 Stunde 23 Minuten 45 Sekunden | PT1H23M45S |
| 2 Stunden 10 Minuten | PT2H10M |
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:
- Mindestgröße: 1200 × 675 Pixel (16:9 bevorzugt) oder 1200 × 900 (4:3)
- Minimalgröße: Mindestens 1200 Pixel breit
- Format: JPG, PNG oder WebP
- Zugänglichkeit: Das Bild muss für Googlebot crawlbar sein (nicht hinter Login)
- Inhalt: Das Bild muss das Video repräsentieren — kein leeres oder irreführendes Bild
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:
- Google Rich Results Test:
search.google.com/test/rich-results— zeigt direkt an, ob dein Video für Video Rich Results in Frage kommt und welche Properties erkannt werden. - Schema.org Validator:
validator.schema.org— validiert das JSON-LD gegen die Schema.org-Spezifikation (unabhängig von Google).
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.