Schema markup: poveži stvarne entitete, ne izmišljaj signal.
JSON-LD daje eksplicitne informacije o sadržaju stranice i može omogućiti određene rich results. Ne garantuje rangiranje, a markup koji nije usklađen sa vidljivim sadržajem može biti ignorisan.
Da li mora da postoji samo jedan script blok?
Schema.org dozvoljava više blokova, a Google može da obradi podržane formate. Jedan kohezivan @graph je ovde izabran kao pravilo održavanja: lakše je pratiti stabilne @id veze i sprečiti duplikate. To nije objavljeni Google ranking zahtev.
Koje čvorove povezujemo?
| Čvor | Kada je opravdan | Tipična veza |
|---|---|---|
| Organization | Stvarna organizacija je vidljiva na sajtu | publisher, provider |
| Person/ProfilePage | Autor je identifikovan i ima vidljivu biografiju | author, mainEntity |
| WebPage/Article | Stranica i članak imaju različite uloge | mainEntityOfPage |
| Service | Usluga je stvarno opisana i dostupna | provider, areaServed |
| BreadcrumbList | Postoji jasna hijerarhija URL-a | WebPage.breadcrumb |
@id, a ne ponovljen objekat.Koja su tri najvažnija pravila?
- Markup opisuje sadržaj stranice na kojoj se nalazi.
- Ne dodaj cenu, ocenu, autora, sliku ili identitet koji nisu stvarni i proverljivi.
- Validiraj sintaksu Schema Markup Validatorom i podobnost Rich Results Testom za podržane tipove.
Kako izgleda kohezivan graf u praksi?
Umesto da svaki blok ponavlja iste podatke o organizaciji, jedan @graph definiše svaki entitet tačno jednom i sve ostale reference vodi preko stabilnog @id.
Razlika je najlakše vidljiva na primeru. Ovo je čest obrazac koji stvara duplikate:
{
"@context": "https://schema.org",
"@type": "Article",
"publisher": {
"@type": "Organization",
"name": "Precise Search SEO",
"logo": "https://primer.rs/logo.png"
}
}
Ako se isti objekat ponovi na svakoj stranici, svaka kopija je zaseban, nepovezan opis. Kada se jedan podatak promeni, menjaš ga na svim stranicama i lako propustiš neku. Kohezivna verzija izgleda ovako:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://primer.rs/#organization",
"name": "Precise Search SEO",
"url": "https://primer.rs/",
"logo": { "@id": "https://primer.rs/#logo" }
},
{
"@type": "ImageObject",
"@id": "https://primer.rs/#logo",
"contentUrl": "https://primer.rs/logo.png",
"width": 512,
"height": 512
},
{
"@type": "Article",
"@id": "https://primer.rs/tekst/#article",
"headline": "Naslov teksta",
"publisher": { "@id": "https://primer.rs/#organization" },
"mainEntityOfPage": { "@id": "https://primer.rs/tekst/#webpage" }
}
]
}
Organizacija je opisana jednom. Logo je pun ImageObject sa dimenzijama, a ne goli URL. Članak je vezan za stranicu i za izdavača referencom, ne kopijom.
Kako se pišu identifikatori?
@id mora biti apsolutan URL sa fragmentom koji se nikada ne menja. Fragment je naziv uloge, ne naziv sadržaja.
| Entitet | Obrazac | Zašto tako |
|---|---|---|
| Organizacija | https://domen.rs/#organization | Postoji jednom za ceo sajt, pa stoji na korenu |
| Sajt | https://domen.rs/#website | Isto, jedan po domenu |
| Stranica | https://domen.rs/putanja/#webpage | Vezan za konkretan URL |
| Članak | https://domen.rs/putanja/#article | Odvojen od stranice jer ima drugu ulogu |
| Slika | https://domen.rs/putanja/#img-opis | Sufiks razlikuje više slika na istoj stranici |
Fragment ne sme da sadrži datum, verziju ni naslov. #article-2026-avgust se raspada čim se tekst ažurira, a svaka promena @id vrednosti prekida sve reference koje na nju pokazuju.
Koje greške najčešće srećemo?
| Greška | Posledica | Ispravka |
|---|---|---|
| Markup opisuje sadržaj koji nije vidljiv na stranici | Google može da ignoriše markup ili primeni meru | Ukloni sve što korisnik ne vidi |
aggregateRating bez stvarnih recenzija | Kršenje smernica za strukturirane podatke | Izostavi dok recenzije ne postoje |
Isti @id na dve različite stranice | Dva dokumenta tvrde da su isti entitet | Vezuj @id za kanonski URL stranice |
image kao goli string | Gubi se dimenzija, licenca i autorstvo | Koristi pun ImageObject čvor |
| FAQ schema bez vidljivog FAQ-a | Neusklađenost markupa i sadržaja | Označavaj samo pitanja koja stvarno stoje na stranici |
| Više blokova koji opisuju istu organizaciju | Konfliktni podaci o istom entitetu | Spoji u jedan @graph |
Čime se proverava?
- Schema Markup Validator za sintaksu i strukturu grafa. Prijavljuje greške koje Google ne mora prijaviti.
- Rich Results Test za podobnost konkretnih prikaza. Podobnost nije garancija prikaza.
- Izveštaji u Search Console-u za stanje na celom sajtu tokom vremena.
- Ručna provera da li svaki podatak u markupu postoji i u vidljivom sadržaju. Ovaj korak alati ne rade umesto tebe.
Redosled je bitan: validator prvi, jer greška u sintaksi znači da ostali alati čitaju nepotpun graf i daju obmanjujuće rezultate.
Koji tipovi se najčešće koriste i kada?
Tip biraš prema onome što stranica stvarno jeste, ne prema tome koji prikaz bi želeo. Pogrešan tip je češći problem od nedostajućeg tipa.
| Tip | Kada je opravdan | Obavezno uz njega |
|---|---|---|
LocalBusiness | Postoji fizička lokacija koju posetilac može da poseti ili pozove | address, telephone, openingHoursSpecification |
Product | Konkretan proizvod sa cenom i dostupnošću | offers sa price, priceCurrency, availability |
Service | Usluga koja se pruža, bez inventara i zaliha | provider, areaServed, serviceType |
HowTo | Postupak sa jasnim koracima koje korisnik izvodi | step kao niz HowToStep čvorova |
Event | Događaj sa datumom i mestom | startDate, location, eventAttendanceMode |
JobPosting | Aktivan oglas za posao | datePosted, validThrough, hiringOrganization |
Dataset | Skup podataka koji se može preuzeti ili pretraživati | distribution, license, creator |
Najčešća greška u ovoj tabeli je Product na stranici koja opisuje uslugu. Ako nema zaliha, isporuke ni povraćaja, to je Service. Druga česta greška je LocalBusiness na sajtu bez fizičke lokacije — agregator ili onlajn usluga tu ne pripadaju.
Kako se entitet povezuje sa spoljnim izvorima?
sameAs povezuje tvoj entitet sa njegovim opisom na izvorima koje pretraživač već poznaje. To je najdirektniji način da kažeš „ovaj entitet je onaj entitet“, umesto da se osloniš na podudaranje imena.
Podudaranje po imenu je nepouzdano. „Precise Search SEO“ je jedinstveno, ali „Novi Taxi“ ili „Delta“ nisu. Kada postoji stabilan spoljni identifikator, veza prestaje da bude pogađanje.
{
"@type": "Organization",
"@id": "https://primer.rs/#organization",
"name": "Primer d.o.o.",
"sameAs": [
"https://www.wikidata.org/wiki/Q00000000",
"https://sr.wikipedia.org/wiki/Primer",
"https://www.linkedin.com/company/primer",
"https://www.crunchbase.com/organization/primer"
]
}
| Izvor | Uloga |
|---|---|
| Wikidata | Najjači, jer je mašinski čitljiv i ima stabilan identifikator |
| Wikipedia | Jak, ali zavisi od uređivačkih kriterijuma za značajnost |
| Zvanični registri i baze | Korisni za pravna lica; potvrđuju postojanje entiteta |
| Profili na društvenim mrežama | Slabiji, ali korisni kada jačih izvora nema |
Ograničenje: sameAs ne stvara entitet u Google Knowledge Graph-u i ne garantuje panel. On povezuje ono što već postoji. Navođenje profila koji ne pripada tvojoj organizaciji je netačan podatak, ne prečica.
Za autore važi isto načelo, ali sa dodatnom obavezom: Person čvor ima smisla samo kada autor ima vidljivu biografiju na sajtu i proverljivo prisustvo van njega. Na ovom sajtu smo iz tog razloga uklonili Person čvor i sve atribucije vezali za organizaciju — jedan proverljiv entitet je jači od dva slaba.
Šta kada isti entitet postoji na više domena?
Jedan entitet mora imati jedan primarni @id, na domenu koji je njegov kanonski dom. Ostali domeni ga referenciraju tim istim identifikatorom umesto da definišu sopstvenu kopiju.
Situacija je česta: agencija ima sajt, klijentski projekat, i profil na platformi treće strane. Ako svaki od njih definiše sopstveni Organization čvor sa sopstvenim @id, nastaju tri entiteta umesto jednog.
// Na sekundarnom domenu — referenca, ne nova definicija
{
"@type": "WebPage",
"@id": "https://drugi-domen.rs/stranica/#webpage",
"publisher": { "@id": "https://primarni-domen.rs/#organization" }
}
Uz to, oba domena treba da navedu jedan drugog u sameAs listi primarnog entiteta. Time je veza dvosmerna i ne oslanja se na to da pretraživač sam poveže dva imena.
Manje poznati tipovi koje vredi znati
| Tip ili svojstvo | Čemu služi | Napomena |
|---|---|---|
speakable | Označava delove teksta pogodne za glasovno čitanje | Google ga podržava ograničeno i uglavnom za vesti; ne očekuj širok efekat |
ImageObject sa license | Podobnost za oznaku licenciranja u Google Images | Traži i acquireLicensePage |
QAPage | Stranica sa jednim pitanjem i korisničkim odgovorima | Nije isto što i FAQPage; meša se najčešće |
ItemList | Uređena lista stranica ili proizvoda | Pozicije moraju biti uzastopne, bez rupa |
WebSite sa potentialAction | Prijava pretrage unutar sajta | Prikaz je u potpunosti na Google-u |
Razlika između FAQPage i QAPage je česta greška. FAQPage je za pitanja na koja odgovara vlasnik sajta. QAPage je za stranicu sa jednim korisničkim pitanjem i više korisničkih odgovora, kakav je forum. Upotreba pogrešnog tipa znači da markup opisuje nešto što stranica nije.
Redosled implementacije na novom sajtu
- Organizacija i sajt. Dva čvora sa stabilnim
@idna korenu domena. Sve ostalo se kasnije vezuje za njih. - Logo kao pun
ImageObjectsa dimenzijama, ne kao string. - Stranica i članak po dokumentu, sa
mainEntityOfPagevezom u oba smera. - Putanja kao
BreadcrumbListsa uzastopnim pozicijama. - Tip specifičan za posao —
Service,ProductiliLocalBusiness, tek kada su prethodna četiri stabilna. sameAsveze na kraju, kada spoljni profili stvarno postoje.- FAQ i slike samo tamo gde vidljiv sadržaj postoji.
Redosled nije proizvoljan. Svaki korak referencira prethodni, pa preskakanje znači da ćeš kasnije menjati @id vrednosti — a svaka takva promena prekida veze koje na njih pokazuju.
Česta pitanja
Da li schema markup podiže poziciju?
Google ga koristi da bolje razume sadržaj i za podobnost određenih rich-result prikaza. Podobnost nije garancija prikaza, a direktan ranking efekat nije dokumentovan.
Šta se dešava ako markup opisuje nešto što nije vidljivo na stranici?
Google može da ignoriše takav markup, a u ozbiljnijim slučajevima da primeni ručnu meru. Pravilo je da svaki podatak u markupu postoji i u vidljivom sadržaju.
Da li smem da dodam aggregateRating ako nemam recenzije?
Ne. Ocena bez stvarnih, proverljivih recenzija krši Google smernice za strukturirane podatke. Izostavi taj čvor dok recenzije ne postoje.
Koliko script blokova sme da bude na stranici?
Schema.org dozvoljava više blokova i Google ih obrađuje. Jedan kohezivan @graph je naš izbor zbog održavanja — lakše je pratiti @id veze i sprečiti duplikate.