A @graph a JSON-LD egyik kulcsa: egy tömb, amelybe több séma-entitás kerül egyetlen <script> blokkon belül. Az elemek @id azonosítókkal hivatkoznak egymásra, így nem különálló adatdarabok, hanem összefüggő entitás-háló keletkezik.
Hogyan működik
Egy @graph blokk egyetlen @context alatt fut. Alatta felsorolod az oldal entitásait: a céget, a webhelyet, az aktuális oldalt, a morzsamenüt, a terméket. Mindegyik kap egy stabil @id értéket, ami jellemzően egy URL horgonnyal, például https://pelda.hu/#organization.
A kapcsolatot ezután rövid hivatkozás adja. A WebSite publisher mezőjébe nem másolod be újra a céget, csak az @id-jére mutatsz. Ettől a JSON-LD kódod nem írja le ugyanazt a szervezetet négyszer.
Miért más ez a gépeknek
A keresők és a nyelvi modellek entitásokban gondolkodnak, nem mezőkben. Külön blokkokban három objektum lebeg egymás mellett, és a gépnek kell kitalálnia, hogy ugyanarról a cégről van szó. A @graph ezt a találgatást kiveszi a folyamatból.
A gyakorlatban ez látszik a strukturált adatok feldolgozásán: a riportokban a @graph-os oldalaknál sokkal ritkább a duplikált vagy egymásnak ellentmondó cégnév.
Mikor számít igazán
Akkor, ha egy oldalon több séma-típus van egyszerre. Egy termékoldalon jellemzően négy-öt entitás fut: szervezet, webhely, oldal, morzsamenü, termék. Egyetlen sémánál a @graph felesleges bonyolítás.
Mit néz ebből a riport
Az audit megnézi, hogy az oldal JSON-LD kódja egy összekapcsolt gráfot ad-e ki, vagy szétszórt blokkokat. Vizsgálja az @id hivatkozások épségét is: mutat-e minden hivatkozás létező entitásra. A szétesett, egymásra nem hivatkozó sémák gyengébb értékelést kapnak.
Röviden: a @graph nem új séma-típus, hanem a kapcsolatok kimondásának módja egy blokkon belül.
Technikai példa
Egy szolgáltatásoldal teljes gráfja egyetlen blokkban. A szervezet egyszer szerepel, a többi entitás csak hivatkozik rá.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://pelda.hu/#organization",
"name": "Példa Kft.",
"url": "https://pelda.hu/",
"logo": {
"@type": "ImageObject",
"@id": "https://pelda.hu/#logo",
"url": "https://pelda.hu/logo.png"
},
"sameAs": ["https://www.facebook.com/pelda"]
},
{
"@type": "WebSite",
"@id": "https://pelda.hu/#website",
"url": "https://pelda.hu/",
"name": "Példa Kft.",
"inLanguage": "hu-HU",
"publisher": { "@id": "https://pelda.hu/#organization" }
},
{
"@type": "WebPage",
"@id": "https://pelda.hu/szolgaltatasok/#webpage",
"url": "https://pelda.hu/szolgaltatasok/",
"name": "Szolgáltatások",
"isPartOf": { "@id": "https://pelda.hu/#website" },
"about": { "@id": "https://pelda.hu/#organization" },
"breadcrumb": { "@id": "https://pelda.hu/szolgaltatasok/#breadcrumb" }
},
{
"@type": "BreadcrumbList",
"@id": "https://pelda.hu/szolgaltatasok/#breadcrumb",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Főoldal", "item": "https://pelda.hu/" },
{ "@type": "ListItem", "position": 2, "name": "Szolgáltatások" }
]
}
]
}
Gyors ellenőrzés parancssorból. Ha több találatot ad, több különálló blokk van az oldalon:
curl -sL https://pelda.hu/ | grep -c 'application/ld+json'
Gyakori kérdések
Kötelező a @graph használata?
Nem, a Google a külön blokkokat is feldolgozza. A @graph az értelmezés pontosságán javít, nem a validitáson. Több séma-típusnál viszont erősen ajánlott, mert megszünteti a találgatást.
Mi történik, ha a plugin és a téma is kiír sémát?
Két Organization entitás kerül az oldalra, gyakran eltérő adattal. A kereső ilyenkor vagy választ, vagy mindkettőt gyengébben súlyozza. Kapcsold ki az egyiket, és csak egy forrás maradjon.
Milyen legyen az @id formátuma?
Abszolút URL horgonnyal, például https://pelda.hu/#organization. Nem kell, hogy létező oldal legyen, de stabilnak kell lennie. Ha átnevezed, minden rá mutató hivatkozást is javítani kell.
Hogyan ellenőrzöm, hogy jól kapcsolódnak az entitások?
A validator.schema.org kirajzolja a gráf szerkezetét, így látszik, mi mire mutat. A Rich Results teszt azt mutatja meg, melyik séma jogosult gazdag találatra. A kettőt érdemes együtt futtatni.
JavaScripttel beszúrt @graph is jó?
Kockázatos. A Google általában rendereli, de az AI-crawlerek egy része nem futtat JavaScriptet. Szerver oldalon rendereld a blokkot, ha teheted.