Moderní tvorba webových aplikací

O webu

Jak použít JSON‑LD pro AI a SEO

JSON for Linking Data je strojově čitelný formát pro publikování obsahu.

11 minut

JSON‑LD je způsob, jak přidat do stránky strukturovaná data, která stroje (vyhledávače, AI asistenti, agregátory) snadno přečtou a pochopí. Umožňuje „vysvětlit“ obsah stránky bez zásahů do HTML struktury.

Implementace může zlepšit SEO a citovatelnost v AI chatbotech a jiných nástrojích.

Protože nežijeme v ideálním světě, kde robot vyhledávače správně pochopí každou stránku, existují a používají se způsoby, jak mu to ulehčit.

Základní způsob je vhodná sémantika použití HTML značek – zejména struktura nadpisů, používání odstavců, seznamů.

Pro situace, kdy už samotné HTML nestačí, si jde pomoci tzv. mikrodaty. Jde tak jasně vyznačit různé části stránky, aby robot neměl pochyb, o co se jedná.

Příklad mikrodat přímo v HTML:

<article itemscope itemtype="https://schema.org/Article">
  <h1 itemprop="headline">Název článku</h1>
  <div>Autor: <span itemprop="author" itemscope itemtype="https://schema.org/Person">
    <span itemprop="name">Jméno Autora</span>
  </span></div>
  <time itemprop="datePublished" datetime="2025-01-01">1. 1. 2025</time>
  <meta itemprop="mainEntityOfPage" content="https://example.com/nazev-clanku">
  <div itemprop="articleBody">
    Text článku…
  </div>
</article>

Zpravidla se používá slovník schema.org (typy a vlastnosti jako Article, name, author). JSON‑LD je pouze způsob zápisu těchto dat.

Protože taková implementace může být kvůli nutné změně současného HTML komplikovaná, je možné tato data zapisovat jako nový JSON objekt přímo na stránku. JSON‑LD je tak jiný způsob, jak dostat strukturovaná data do stránky.

Proč JSON‑LD používat

  • Rich výsledky – rozšířené výsledky ve vyhledávání.
  • Citovatelnost v AI – asistenti lépe chápou kontext, autora, datum a entity.
  • Čistota implementace – vložíte jeden <script type="application/ld+json"> bez změny HTML kódu.
  • Odolnost – odděluje data od presentace, méně křehké než microdata v HTML.
  • Teoreticky snazší údržba – generování z CMS, versování, validace nástroji.

Základní použití

JSON‑LD se vkládá do <head> nebo na konec <body> jako samostatný skript:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Název článku",
  "datePublished": "2025-01-01",
  "dateModified": "2025-01-02",
  "author": { "@type": "Person", "name": "Jméno Autora" },
  "mainEntityOfPage": "https://example.com/nazev-clanku"
}
</script>

Umístění závisí na datovém objemu a jestli upřednostňovat uživatele nebo robota. Vložení těchto dat před obsah uživateli zbytečně prodlouží načtení stránky. U pár řádků to je celkem jedno.

U potřeby výpisu dat je potom k úvaze, jestli nepoužít strukturovaná data přes HTML atributy, které nezpůsobují redundanci a zbytečně tak (tolik) nenafukují HTML kód. U hodně velkých stránek to může dávat smysl.

Další běžně používaná schémata

  • ImageObject / VideoObjecturl/contentUrl, thumbnailUrl, caption, u videa duration, uploadDate, transcript.
  • Product + Offer + AggregateRating + Review – cena, dostupnost, hodnocení, recenze.
  • LocalBusinessaddress (PostalAddress), geo (GeoCoordinates), openingHoursSpecification, priceRange.
  • EventstartDate, endDate, location, offers, performer.
  • JobPostingdatePosted, validThrough, employmentType, jobLocation/jobLocationType.
  • SoftwareApplication – platformy, kategorie, offers, aggregateRating.
  • Dataset / DataCatalog – distribuce, licence, tvůrce.
  • Course / Recipe – specifická pole pro kursy a recepty.
  • ItemList – seznamy článků/produktů (kategorie, přehledy), pro CollectionPage.
  • QAPage – otázka s vybranou nejlepší odpovědí (odlišné od FAQPage).

Co na webu popisovat

Organization + WebSite + WebPage

Minimální trio pro většinu webů: kdo jste, jak se web jmenuje a co je to za stránku.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com#organization",
  "name": "Vaše firma",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "sameAs": [
    "https://www.facebook.com/vasefirma",
    "https://www.linkedin.com/company/vasefirma"
  ],
  "identifier": {
    "@type": "PropertyValue",
    "name": "IČO",
    "value": "12345678"
  }
}
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "@id": "https://example.com#website",
  "url": "https://example.com",
  "name": "Název webu",
  "publisher": { "@id": "https://example.com#organization" },
  "potentialAction": {
    "@type": "SearchAction",
    "target": "https://example.com/hledat?q={query}",
    "query-input": "required name=query"
  }
}
{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "@id": "https://example.com/konkretni-stranka#webpage",
  "name": "Titulek stránky",
  "url": "https://example.com/konkretni-stranka",
  "isPartOf": { "@id": "https://example.com#website" },
  "about": { "@id": "https://example.com#organization" }
}

Article / BlogPosting

Pro články a zápisy na blogu.

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "@id": "https://example.com/json-ld#article",
  "headline": "JSON‑LD: rychlý přehled",
  "datePublished": "2025-10-22",
  "dateModified": "2025-10-22",
  "author": {
    "@type": "Person",
    "name": "Bohumil Jahoda",
    "url": "https://example.com/o-mne",
    "sameAs": [
      "https://twitter.com/example",
      "https://github.com/example"
    ],
    "identifier": {
      "@type": "PropertyValue",
      "name": "GitHub",
      "value": "example"
    }
  },
  "image": ["https://example.com/og-image.jpg"],
  "mainEntityOfPage": { "@id": "https://example.com/json-ld#webpage" },
  "publisher": {
    "@type": "Organization",
    "@id": "https://example.com#organization",
    "name": "Jecas",
    "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" },
    "sameAs": [
      "https://www.facebook.com/jecas",
      "https://github.com/jecas"
    ]
  },
  "isPartOf": { "@id": "https://example.com#website" }
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type": "ListItem", "position": 1, "name": "Domů", "item": "https://example.com"},
    {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog"},
    {"@type": "ListItem", "position": 3, "name": "JSON‑LD"}
  ]
}

FAQPage

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Co je JSON‑LD?",
      "acceptedAnswer": {"@type": "Answer", "text": "Formát pro strukturovaná data."}
    },
    {
      "@type": "Question",
      "name": "Kde ho vložit?",
      "acceptedAnswer": {"@type": "Answer", "text": "Do <script type=\"application/ld+json\">."}
    }
  ]
}

HowTo

{
  "@context": "https://schema.org",
  "@type": "HowTo",
  "name": "Jak přidat JSON‑LD",
  "step": [
    {"@type": "HowToStep", "text": "Vyberte vhodné schéma."},
    {"@type": "HowToStep", "text": "Vytvořte JSON objekt."},
    {"@type": "HowToStep", "text": "Vložte jako application/ld+json."}
  ]
}

Implementace v praxi

  • Umístění – do <head> nebo na konec <body>. Na stránce může být více skriptů současně.
  • Konsistence – data musí odpovídat tomu, co je vidět na stránce (titulek, autor, datum).
  • Identifikátory@id pro stabilní odkazy na entity a jejich opětovné použití.
  • Více hodnot – pole používejte klidně i pro jedinou hodnotu, pokud se může rozšířit (např. více obrázků).
  • Aktualisace – udržujte dateModified v souladu se skutečnou změnou obsahu.
  • Jazyk – přidejte inLanguage (např. "cs").
  • Vazby – používejte isPartOf/mainEntityOfPage; publisher odkazuje na @id organisace; WebPage.isPartOf vede na WebSite.
  • Externí identity – používejte sameAs pro profily na sociálních sítích a identifier pro interní či veřejné identifikátory.

Protože roboti nebo nástroje typu ChatGPT nemusí vždy podporovat JavaScript, je vhodné vygenerovat JSON-LD už na straně serveru.

Při implementaci může být trochu oříšek data vypsat, protože řada šablonovacích systémů nebo nástrojů může brát vložení <script type="application/ld+json"> jako potenciálně rizikové vložení JavaScriptu. Ve skutečnosti je to bezpečné, protože neznámý type u skriptu prohlížeč ignoruje.

Ve Svelte se mi osvědčila následující funkce, které se předá objekt a vrátí komplet HTML kód:

export function schemaScript(thing) {
	if (!thing || typeof thing !== 'object') return '';
	return `<script type="application/ld+json">${JSON.stringify(thing)}</script>`;
}

A následné vypsání přes {@html schemaScript(articleLd)}.

Příklad pro React:

function JsonLd({ thing }) {
  if (!thing || typeof thing !== 'object') return null;
  return (
    <script
      type="application/ld+json"
      dangerouslySetInnerHTML={{ __html: JSON.stringify(thing) }}
    />
  );
}

const articleLd = {
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Název článku"
};

function Page() {
  return (
    <>
      <h1>Název</h1>
      <JsonLd thing={articleLd} />
    </>
  );
}

Ověření a debug

Nejčastější chyby

  • Nekonsistentní data – jiné datum v JSON‑LD než na stránce.
  • Chybějící mainEntityOfPage – ztěžuje přiřazení ke stránce.
  • Nesprávný typArticle vs. BlogPosting; vyberte relevantní schéma.
  • Nevalidní JSON – uvozovky, čárky, escapování HTML znaků.
  • Duplicitní skripty – stejné entity vložené vícekrát bez @id.

Vyplatí se JSON‑LD implementovat?

JSON‑LD automaticky nezaručí lepší posice, ale zvyšuje šanci na bohatší zobrazení ve výsledcích vyhledávání a na přesnější citace v AI nástrojích. A tím teoreticky více návštěv z těchto zdrojů.

Lze použít téměř vždy – obsahové weby, e‑shopy, lokální firmy, události, články. Implementace je jednorázová, obvykle na pár minut až dní podle velikosti a typu webu a schopnostech vývojáře.

Risika špatného nasazení jsou celkem malá – chybné nebo nekonsistentní údaje mohou být ignorovány.

Je třeba si zvážit, jestli se náklady na vývoj vrátí. Pokud máte základní SEO v pořádku (sémantické HTML, kvalitní obsah), implementace se zpravidla vyplatí.

Jak odhadnout přínos JSON‑LD

Stručně řečeno dost těžko. Zobrazení stránky ve vyhledávání se snippetem díky strukturovaným datům sice typicky znamená o desítky procent více prokliků, ale je potřeba, aby se web vůbec dostal na rozumné umístění, aby bylo vůbec co zobrazovat.

Je ale dost pravděpodobné, že si tím člověk minimálně neuškodí a může to být velmi snadné implementovat.

Odkazy

Související články

Jak zjistit návštěvnost cizího webu

Přehled metod a nástrojů, jak si udělat realistický obrázek o návštěvnosti konkurenčního webu.

8 minut

13 důvodů, proč má web fungovat bez JavaScriptu i v roce 2025

JavaScript je sice klíčový pro moderní web, ale jeho selhání není výjimkou. Zde je 13 důvodů, proč by měl web fungovat i bez něj.

8 minut

Jak vybrat vhodnou doménu?

Doporučený postup výběru ideálního názvu domény pro nový web.

7 minut

Úprava náhledového obrázku webu na Seznamu

Vyhledávání na Seznamu zobrazuje vedle výsledků vyhledávání obrázkový náhled webu. Jak zobrazení náhledu stránky ve vyhledávači ovlivnit?

5 minut

Web jecas.cz píše Bohumil Jahoda, kontakt
Seznam všech článků
2013–2025