Proč se VideoObjectem zabývat precizně: kapitoly, přepisy a náhledy jako nositelé relevance
Videoobsah se dnes indexuje nejen podle titulku a popisu, ale také podle struktury. Správně nasazený VideoObject s kapitolami (Clip), přepisem a náhledy (thumbnails) zvyšuje pokrytí dotazů, viditelnost v sekci „Key moments“, dostupnost obsahu a konzistenci dat napříč kanály (SERP, sociální sítě, interní vyhledávání). Tento článek je praktickou příručkou, jak tyto prvky modelovat a udržovat v souladu s principy „Strukturovaná data a datová konzistence“.
Základ 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/neboimagesImageObject(url,width,height). - Vydavatelství a autorství:
publisher(Organization slogo),creator/author,license(je-li relevantní). - Technické parametry (volitelné, ale užitečné):
encodingFormat,contentSize,bitrate(naMediaObject),regionsAllowed,expires.
Kapitoly: modelování pomocí Clip + hasPart pro „Key moments“
Kapitoly ve videu namodelujte jako seznam objektů typu Clip v poli hasPart. Každý Clip by měl mít name, startOffset (v sekundách), případně endOffset a vlastní url s časovým parametrem (deep link na konkrétní 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: Entity 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": "Mapa entit 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í odkazy", "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ámciVideoObject, nebo u delších souborů poskytnětecaptionjakoMediaObject(např. VTT/SRT) sinLanguageacontentUrl. - Vícejazyčnost: pro jednotlivé jazyky použijte více objektů
caption.transcriptponechte v primárním jazyce videa. - Časované kapitoly v přepisu: pokud přepis obsahuje časové značky, zachovejte stejné hodnoty
startOffsetjako vClip– to je klíčové pro 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 Mapa entit... 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: v
thumbnailUrlposkytněte alespoň dvě různé velikosti (1280×720a640×360), případně použijteimagesImageObject. - Sprite/filmstrip: samotný sprite není vlastností schématu, ale můžete na něj odkázat v
hasPart(volitelně) jako naMediaObjectsencodingFormatimage/jpegneboimage/webpa v přehrávači mapovat čas na souřadnici ve spritu. - Konzistentní URL: při běžných aktualizacích neměňte názvy souborů; při vynuceném obnovení použijte hash v query parametru (
?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": "Náhledový sprite", "encodingFormat": "image/webp", "contentUrl": "https://cdn.example.com/videos/ai-seo/sprite.webp" } ] } </script>
Vzory URL a kompatibilita: SeekToAction, deep linky a parametry
- Podporujte SeekToAction s
urlTemplatevyužívajícím parametr v sekundách ({seek_to_second_number}), který funguje i bez JavaScriptu. - Deep link
urlu každéhoClipsměřuje na stejnou základní URL videa s časovým parametrem, aby nedocházelo ke kanibalizaci (nemá jít o novou stránku). - Sjednoťte parametry (
?t=nebo?start=) napříč přehrávačem, oEmbedem a otevřeným schématem.
Datová konzistence: jeden zdroj pravdy pro metadata videa
Zaveďte „source of truth“ pro metadata videa (CMS/JSON). Z něj generujte:
- JSON-LD (
VideoObject,Clip,SeekToAction), - Open Graph (
og:video,og:image) a Twitter Cards, - sitemapy (video sitemapu s
thumbnail_loc,duration,publication_date), - oEmbed (pro externí vložení),
- interní vyhledávání (index kapitol a přepisu).
Klíčové je, aby name, description, duration, uploadDate a kapitoly byly totožné v každém kanálu.
Více enkódování a adaptivní streamování: modelování
Pokud používáte HLS/DASH, doplňte VideoObject o encoding s položkami MediaObject (různé bitrate/rozlišení). Každé kódování má contentUrl, případně encodingFormat (application/x-mpegURL pro HLS) a bitrate.
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "VideoObject", "name": "AI SEO: Entity 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 zkontrolovat před publikováním
- Schéma: validita JSON-LD;
@idje kanonický identifikátor, na který jsou navázány kapitoly (isPartOf/hasPart). - Konzistence časů:
startOffsetnepřekračujeduration; pořadí kapitol je souvislé a kapitoly se nepřekrývají (pokud to není záměr). - Náhledy: dostupnost, správné rozměry, přiměřená velikost souborů, rychlý TTFB.
- Přepisy: existuje alespoň verze v hlavním jazyce; soubor VTT/SRT neobsahuje chyby (časové značky).
- Deep linky: parametry
?t=nebo?start=fungují i bez JS a vracejí stavový kód 200.
Přístupnost a UX: přínosy nad rámec SEO
- Titulky a přepis zlepšují srozumitelnost pro neslyšící a umožňují konzumaci obsahu v různých situacích (mobilní zařízení / bez zvuku).
- Kapitoly snižují míru okamžitého opuštění – uživatelé mohou přeskočit přímo na relevantní úsek.
- Náhledy (cover + filmstrip) zkracují dobu rozhodování a zvyšují CTR v seznamech.
Verzování a governance: jak udržet pořádek při změnách
- Každá úprava kapitol mění také přepis – nastavte workflow, v němž změna
startOffset/endOffsetautomaticky aktualizuje časové značky v přepisech. - Průběžné kontroly konzistence mezi JSON-LD, sitemapou a Open Graph (kontrola v CI).
- Changelog: dateModified na stránce videa a interní auditní záznamy kapitol/náhledů.
Antivzory: čemu se u VideoObject vyhnout
- Chybějící kapitola „Úvod“ s
startOffset0– klíčová pro parsery i uživatele. - Nesoulad v duration (VideoObject uvádí jinou délku než skutečný soubor/stream).
- Generické náhledy (rozmazané, s málo kontrastním textem) – ovlivňují CTR.
- Duplicitní URL kapitol (nesprávné parametry nebo pouze hash
#t=bez podpory na straně serveru).
Kompletní šablona: VideoObject s kapitolami, přepisem, náhledy a kódováními
<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: Entity 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": "Mapa entit 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í odkazy", "startOffset": 421, "endOffset": 900, "position": 3, "url": "https://www.example.com/video/ai-seo?t=421" }, { "@type": "Clip", "name": "Otázky a odpovědi", "startOffset": 901, "position": 4, "url": "https://www.example.com/video/ai-seo?t=901" } ], "potentialAction": { "@type": "SeekToAction", "target": "https://www.example.com/video/ai-seo?t={seek_to_second_number}", "startOffset-input": "required name=seek_to_second_number" }, "transcript": "00:00 Úvod... 01:16 Mapa entit... 07:01 Topic clustery... 15:01 Otázky a odpovědi...", "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" } ], "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/720p.mp4", "contentSize": "240MB" } ], "publisher": { "@type": "Organization", "name": "Example Media", "logo": { "@type": "ImageObject", "url": "https://www.example.com/static/logo-600x60.png", "width": 600, "height": 60 } } } </script>
VideoObject jako sjednocující vrstva pro obsah, vyhledávání a UX
Modelujte video jako datový balíček – základní metadata, kapitoly, přepisy a náhledy musí být vzájemně sladěné. Kapitoly otevírají cestu k „Key moments“, přepisy rozšiřují indexovatelnost a přístupnost a náhledy zvyšují CTR. Díky jedinému zdroji pravdy a automatizovanému odvozování (JSON-LD, sitemap, oEmbed, OG) udržíte konzistentní data a spolehlivý výkon napříč kanály.
