VideoObject: kapitoly, přepisy a náhledy

Proč řešit VideoObject precizně: kapitoly, přepisy a náhledy jako nositele relevance

Videoobsah je dnes indexován nejen přes titulek a popis, ale také přes strukturu. Správně nasazený VideoObject s kapitolami (Clip), přepisem a náhledy (thumbnails) zvyšuje pokrytí dotazů, viditelnost v „Key moments“, dostupnost obsahu a konzistenci dat napříč kanály (SERP, sociální sítě, interní vyhledávání). Tento článek je praktickým manuálem, jak tyto prvky modelovat a udržet v souladu s principy „Strukturovaná data a datová konzistence“.

Jádro VideoObject: minimální pole a konzistentní hodnoty

  • Identita videa: name, description, inLanguage, uploadDate (ISO 8601), duration (ISO 8601, např. PT12M5S), contentUrl (přímé přehrání), embedUrl (iframe).
  • Náhledy: thumbnailUrl (jedna nebo více URL) a/nebo image s ImageObject (url, width, height).
  • Vydavatelství & autorství: publisher (Organization s logo), creator/author, license (pokud relevantní).
  • Technické parametry (volitelné, avšak užitečné): encodingFormat, contentSize, bitrate (na MediaObject), regionsAllowed, expires.

Kapitoly: modelování přes Clip + hasPart pro „Key moments“

Kapitoly ve videu mapujte jako seznam objektů typu Clip v poli hasPart. Každý Clip by měl mít name, startOffset (v sekundách), volitelně endOffset a vlastní url s časovým parametrem (deep-link na sekundu). Doplňte také position pro deterministické pořadí.

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "@id": "https://www.example.com/video/ai-seo#video", "url": "https://www.example.com/video/ai-seo", "name": "AI SEO: Entitní strategie v praxi", "description": "Praktický workshop s kapitolami o entitách, clusterech a interním prolinkování.", "inLanguage": "sk", "uploadDate": "2025-09-01T09:00:00+02:00", "duration": "PT18M42S", "contentUrl": "https://cdn.example.com/videos/ai-seo.mp4", "embedUrl": "https://player.example.com/embed/ai-seo", "thumbnailUrl": [ "https://cdn.example.com/videos/ai-seo/cover-1280.jpg", "https://cdn.example.com/videos/ai-seo/cover-640.jpg" ], "hasPart": [ { "@type": "Clip", "name": "Úvod a cíle", "startOffset": 0, "endOffset": 75, "position": 1, "url": "https://www.example.com/video/ai-seo?t=0" }, { "@type": "Clip", "name": "Entitní mapa a zdroje dat", "startOffset": 76, "endOffset": 420, "position": 2, "url": "https://www.example.com/video/ai-seo?t=76" }, { "@type": "Clip", "name": "Topic clustery a interní linky", "startOffset": 421, "endOffset": 900, "position": 3, "url": "https://www.example.com/video/ai-seo?t=421" } ], "potentialAction": { "@type": "SeekToAction", "target": "https://www.example.com/video/ai-seo?t={seek_to_second_number}", "startOffset-input": "required name=seek_to_second_number" }, "publisher": { "@type": "Organization", "name": "Example Media", "logo": { "@type": "ImageObject", "url": "https://www.example.com/static/logo-600x60.png", "width": 600, "height": 60 } } } </script>

Přepisy: transcript, caption a vícejazyčnost

  • Přepis uložte do transcript (Text) v rámci VideoObject, nebo u delších souborů poskytněte caption jako MediaObject (např. VTT/SRT) s inLanguage a contentUrl.
  • Vícejazyčnost: použijte více caption objektů pro jednotlivé jazyky. transcript držte v primárním jazyce videa.
  • Časované kapitoly v přepisu: pokud přepis obsahuje timestampy, zachovejte stejné startOffset hodnoty jako v Clip – to je klíč ke konzistenci.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "@id": "https://www.example.com/video/ai-seo#video", "transcript": "00:00 Úvod... 01:16 Entitní mapa... 07:01 Topic clustery...", "caption": [ { "@type": "MediaObject", "inLanguage": "sk", "encodingFormat": "text/vtt", "contentUrl": "https://cdn.example.com/videos/ai-seo/subtitles/sk.vtt" }, { "@type": "MediaObject", "inLanguage": "en", "encodingFormat": "text/vtt", "contentUrl": "https://cdn.example.com/videos/ai-seo/subtitles/en.vtt" } ] } </script>

Náhledy a filmstripy: thumbnailUrl, image a sprite mapy

  • Thumbnail jako signál kvality: poskytněte alespoň dva rozdílné rozměry v thumbnailUrl (1280×720 a 640×360), alternativně použijte image s ImageObject.
  • Sprite/filmstrip: samotný sprite není vlastnost schématu, ale odkazujte na něj v hasPart (volitelně) jako MediaObject s encodingFormat image/jpeg nebo image/webp a v přehrávači mapujte čas → souřadnici sprite.
  • Konzistentní URL: neměňte názvy souborů při běžných aktualizacích; při forced refresh použijte query hash (?v=169).
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "thumbnailUrl": [ "https://cdn.example.com/videos/ai-seo/cover-1280.jpg", "https://cdn.example.com/videos/ai-seo/cover-640.jpg" ], "image": { "@type": "ImageObject", "url": "https://cdn.example.com/videos/ai-seo/cover-1920.jpg", "width": 1920, "height": 1080 }, "hasPart": [ { "@type": "MediaObject", "name": "Preview sprite", "encodingFormat": "image/webp", "contentUrl": "https://cdn.example.com/videos/ai-seo/sprite.webp" } ] } </script>

URL vzory a kompatibilita: SeekToAction, deeplinky a parametry

  • Podpořte SeekToAction s urlTemplate používajícím parametr sekund ({seek_to_second_number}), který funguje i bez JavaScriptu.
  • Deeplink url při každém Clip směřuje na stejný základní URL videa s časovým parametrem, aby nedošlo ke kanibalizaci (nemá jít o novou stránku).
  • Stabilizujte parametry (?t= nebo ?start=) napříč přehrávačem, oEmbed a otevřenou schémou.

Datová konzistence: jeden zdroj pravdy pro video metadata

Zaveďte „source-of-truth“ pro video metadata (CMS/JSON). Odtud generujte:

  • JSON-LD (VideoObject, Clip, SeekToAction),
  • Open Graph (og:video, og:image) a Twitter Cards,
  • sitemapy (video-sitemap s thumbnail_loc, duration, publication_date),
  • oEmbed (pro externí vložení),
  • interní vyhledávání (index kapitol a přepisu).

Klíčem je, aby name, description, duration, uploadDate a kapitoly byly totožné v každém kanálu.

Více enkódů a adaptivní streaming: modelování

Pokud máte HLS/DASH, doplňte VideoObject o encoding s MediaObject položkami (různé bitrate/rozlišení). Každý encoding má contentUrl, volitelně encodingFormat (application/x-mpegURL pro HLS) a bitrate.

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "name": "AI SEO: Entitní strategie v praxi", "encoding": [ { "@type": "MediaObject", "encodingFormat": "application/x-mpegURL", "contentUrl": "https://cdn.example.com/videos/ai-seo/index.m3u8" }, { "@type": "MediaObject", "encodingFormat": "video/mp4", "contentUrl": "https://cdn.example.com/videos/ai-seo/1080p.mp4", "contentSize": "500MB" } ] } </script>

Testování a validace: co kontrolovat před zveřejněním

  • Schéma: validita JSON-LD; @id je kanonický identifikátor, na který se vážou kapitoly (isPartOf/hasPart).
  • Konzistence času: startOffset nepřesahuje duration; pořadí kapitol je souvislé a bez překrývání (pokud to není úmyslné).
  • Náhledy: dostupnost, správné rozměry, rozumná velikost souborů, rychlý TTFB.
  • Přepisy: existuje minimálně hlavní jazyk; soubor VTT/SRT je bez chyb (časové značky).
  • Deeplinky: parametry ?t= nebo ?start= fungují i bez JS a vracejí 200.

Accessibility a UX: benefity nad rámec SEO

  • Captions a transcript zlepšují srozumitelnost pro neslyšící a pro vícekanálovou konzumaci (mobil/bez zvuku).
  • Kapitoly snižují bounce rate – uživatelé přeskočí přímo na relevantní úsek.
  • Náhledy (cover + filmstrip) zkracují čas rozhodování a zvyšují CTR v seznamech.

Verzionování a governance: jak udržet pořádek při změnách

  • Každá úprava kapitol mění i přepis – nastavte workflow, kde změna startOffset/endOffset automaticky aktualizuje timestampy v přepisech.
  • Průběžné kontroly konzistence mezi JSON-LD, sitemapou a Open Graph (CI kontrola).
  • Changelog: dateModified na stránce videa a interní audit log kapitol/thumbnailů.

Antivzory: čemu se vyhnout při VideoObject

  • Chybějící kapitola „Úvod“ se startOffset 0 – klíčová pro parsery i uživatele.
  • Nesoulad duration (VideoObject má jinou délku než skutečný soubor/stream).
  • Generické náhledy (rozmazané, s textem malého kontrastu) – ovlivňuje CTR.
  • Duplicitní URL kapitol (nesprávné parametry nebo hash-only #t= bez serverové podpory).

Kompletní šablona: VideoObject s kapitolami, přepisem, náhledy a encodingy

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "@id": "https://www.example.com/video/ai-seo#video", "url": "https://www.example.com/video/ai-seo", "name": "AI SEO: Entitní strategie v praxi", "description": "Workshop s přehledem entit, clusterů a interního prolinkování.", "inLanguage": "sk", "uploadDate": "2025-09-01T09:00:00+02:00", "dateModified": "2025-10-10T12:30:00+02:00", "duration": "PT18M42S", "contentUrl": "https://cdn.example.com/videos/ai-seo/1080p.mp4", "embedUrl": "https://player.example.com/embed/ai-seo", "thumbnailUrl": [ "https://cdn.example.com/videos/ai-seo/cover-1280.jpg", "https://cdn.example.com/videos/ai-seo/cover-640.jpg" ], "image": { "@type": "ImageObject", "url": "https://cdn.example.com/videos/ai-seo/cover-1920.jpg", "width": 1920, "height": 1080 }, "hasPart": [ { "@type": "Clip", "name": "Úvod a cíle", "startOffset": 0, "endOffset": 75, "position": 1, "url": "https://www.example.com/video/ai-seo?t=0" }, { "@type": "Clip", "name": "Entitní mapa a zdroje dat", "startOffset": 76, "endOffset": 420, "position": 2, "url": "https://www.example.com/video/ai-seo?t=76" }, { "@type": "Clip", "name": "Topic clustery a interní linky", "startOffset": 421, "endOffset": 900, "position": 3, "url": "https://www.example