application/ld+json i policzyłem, co w nich jest. Liczby poniżej to stan tej witryny, a nie średnie z internetu. Wpływ schemy na ruch i klikalność w tej witrynie nie był jeszcze mierzony — to opisuję szczerze w sekcji o testach.// SPIS TREŚCI
Czym jest schema markup
Schema markup (dane strukturalne) to ustandaryzowany słownik schema.org, którym opisujesz elementy strony w sposób czytelny dla maszyn: „to jest artykuł, napisał go ten człowiek, opublikowano wtedy, obrazek okładki jest tu”. Człowiek widzi nagłówek i datę; robot bez schemy widzi tylko tekst i musi zgadywać. Ze schemą nie zgaduje.
Słownik powstał w 2011 roku jako wspólna inicjatywa Google, Microsoftu, Yahoo i Yandexa. Dziś ma kilkaset typów (Article, Product, Person, Event, Recipe, FAQPage…) i tysiące właściwości. Nie musisz znać wszystkich — na blogu i w małym sklepie używa się kilkunastu.
Ważne rozróżnienie, które często się miesza: dane strukturalne to informacja w kodzie. Rich results (rozszerzone wyniki) to to, co Google może z tej informacji zbudować w wynikach wyszukiwania: gwiazdki, cenę, okruszki nawigacyjne, rozwijane pytania. Dane strukturalne są warunkiem koniecznym, ale nie wystarczającym — Google sam decyduje, czy rozszerzony wynik pokaże.
JSON-LD, microdata, RDFa: trzy sposoby zapisu
Ten sam słownik można zapisać na trzy sposoby. Różnica jest czysto techniczna, ale w praktyce wybór jest jeden.
| Format | Gdzie leży w kodzie | Plusy | Minusy | Werdykt |
|---|---|---|---|---|
| JSON-LD | osobny blok <script type="application/ld+json">, zwykle w <head> lub na końcu treści | nie dotyka HTML-a, łatwo wygenerować z wtyczki lub szablonu, zalecany przez Google | trzeba pilnować, żeby zgadzał się z widoczną treścią | używaj tego |
| Microdata | atrybuty itemscope, itemprop wprost na znacznikach HTML | dane siedzą przy treści, którą opisują | brudzi szablon, łatwo zepsuć przy zmianie motywu | tylko jeśli odziedziczysz po kimś |
| RDFa | atrybuty vocab, typeof, property w HTML | standard W3C, elastyczny | rzadko wspierany przez wtyczki, mało przykładów | pomiń |
W WordPressie z Yoastem albo Rank Mathem JSON-LD dostajesz automatycznie. Cały ten wpis jest o tym, co wtyczka robi sama, czego nie robi i co dopisać ręcznie.
Które typy mają sens na blogu i w sklepie
Poniżej typy, które realnie spotkasz w małym e-commerce i na blogu eksperckim. Kolumna „rozszerzony wynik” mówi, czy Google dziś buduje z tego coś widocznego w wynikach — według dokumentacji Google Search Central (stan na wrzesień 2026, linki w źródłach).
| Typ | Gdzie go użyć | Rozszerzony wynik w Google | Uwagi |
|---|---|---|---|
| Article / BlogPosting | każdy wpis na blogu | tak — nagłówek, data, autor, obrazek w Top Stories i Discover | Yoast domyślnie daje Article; BlogPosting to podtyp, obie formy są poprawne |
| Product + Offer | karta produktu w sklepie | tak — cena, dostępność, oceny, wysyłka, zwroty | najważniejszy typ dla sklepu; WooCommerce + Yoast/Rank Math generują go automatycznie |
| BreadcrumbList | wszystkie podstrony | tak — ścieżka zamiast surowego adresu URL | musi odpowiadać realnym okruszkom na stronie |
| Organization | strona główna firmy / sklepu | tak — panel wiedzy, logo, dane kontaktowe | od 2024 Google czyta stąd też politykę zwrotów i pola kontaktowe |
| Person | strona główna marki osobistej, strona „o mnie”, autor wpisu | nie ma osobnego rozszerzonego wyniku | ale buduje encję autora — kluczowe dla E-E-A-T i dla modeli AI; wypełnij sameAs |
| FAQPage | strony z sekcją pytań i odpowiedzi | ograniczone — od sierpnia 2023 Google pokazuje rozwijane FAQ głównie na stronach rządowych i medycznych | nadal warto mieć dla Binga i dla parserów AI; nie licz na efekt wizualny w Google |
| HowTo | instrukcje krok po kroku | nie — Google wycofał rozszerzony wynik HowTo we wrześniu 2023 | nie szkodzi, ale nic nie daje w Google; pomiń, chyba że pod Binga |
| VideoObject | strony z osadzonym wideo | tak — miniatura, długość, kluczowe momenty | wymaga własnej miniatury i adresu pliku lub osadzenia |
| Event | webinary, szkolenia, wydarzenia | tak — data, miejsce, bilety | tylko dla wydarzeń z konkretną datą |
| LocalBusiness | firma z fizycznym adresem | tak — godziny, adres, telefon | dla sklepu wysyłkowego bez punktu odbioru zwykle zbędne |
| Review / AggregateRating | produkty, usługi | tak — gwiazdki | tylko prawdziwe opinie; Google nie pokazuje gwiazdek dla ocen własnej organizacji |
| DefinedTermSet | słowniki, glosariusze | nie | używam go na filarze słownika — porządkuje encje dla parserów |
Wniosek dla sklepu: Product, Organization, BreadcrumbList. Wniosek dla bloga: Article, Person z sameAs, BreadcrumbList. Reszta to dodatki.
Audyt mojego notatnika: co siedzi w kodzie
Zamiast teoretyzować, pobrałem kod kilku stron tej witryny i wypisałem, jakie typy schemy się na nich znajdują. Stan z 24 września 2026.
| Adres | Bloki JSON-LD | Typy w grafie | Skąd |
|---|---|---|---|
strona główna / | 2 | WebPage, BreadcrumbList, WebSite, Person+Organization; drugi blok: rozszerzony Person | Yoast + własny blok w widgecie HTML |
| wpis, np. o newsjackingu | 3 | Article, WebPage, ImageObject, BreadcrumbList, WebSite, Person+Organization; Person; FAQPage (5 pytań) | Yoast + własny Person + FAQPage w treści wpisu |
| filar słownika | 3 | jak wyżej + FAQPage (10 pytań) + DefinedTermSet | Yoast + własne bloki |
archiwum /category/seo/ | 2 | CollectionPage, ImageObject, BreadcrumbList, WebSite, Person+Organization; Person | Yoast + własny Person |
| /tematy/, /kontakt/ | 2 | WebPage, BreadcrumbList, WebSite, Person+Organization; Person | Yoast + własny Person |
Co jest dobrze
- Każdy wpis ma pełny węzeł Article z autorem, datami, obrazkiem, liczbą słów i sekcjami (kategoriami). Tego nie trzeba dopisywać ręcznie — Yoast robi to z pól wpisu.
- Witryna jest w Yoaście skonfigurowana jako osoba, nie firma. Dla marki osobistej to właściwy wybór: graf ma jeden węzeł Person+Organization z tym samym identyfikatorem, a autor każdego wpisu wskazuje na niego przez
@id. - Osobny blok Person z
jobTitle,worksFor(organizacja kwiecien.academy) iknowsAbout— to warstwa, której Yoast nie generuje; dopisałem ją, żeby maszyna wiedziała, o czym ten człowiek pisze i gdzie pracuje. - Filar słownika ma DefinedTermSet, wpisy z sekcją FAQ mają FAQPage zgodny z widoczną treścią.
Co jest słabo
- sameAs autora wskazuje tylko na własną domenę. Google i modele AI łączą encję osoby po profilach zewnętrznych (LinkedIn, YouTube, Wikipedia, profile branżowe). Dopóki tych profili nie ma, encja „Mateusz Kwiecień” wisi w próżni. To najważniejszy brak i jednocześnie taki, którego nie załatwi kod — trzeba mieć profile.
- Person i Organization Yoasta to jeden węzeł, a kwiecien.academy jest osobnym bytem z własną domeną. Relacja jest zaznaczona w moim bloku przez
worksFor, ale organizacja sklepu nie ma tu swojego pełnego opisu — jej graf powinien żyć na kwiecien.academy i tam zostanie rozbudowany. - FAQPage dodaję z nawyku, ale w Google od 2023 nie daje rozszerzonego wyniku na blogu takim jak ten. Zostawiam go dla Binga i parserów AI, bez oczekiwań co do wyglądu w Google.
- Brak Product — logiczne, bo ten notatnik nic nie sprzedaje. Sklep ma to u siebie.
- Dwa bloki Person (Yoasta i mój) opisują tę samą osobę pod różnymi identyfikatorami. Google sobie z tym radzi, ale czystsze byłoby podpięcie mojego bloku do
@idYoasta. Zapisuję do poprawy.
Gotowe bloki JSON-LD do skopiowania
Cztery bloki, które pokrywają 90% potrzeb bloga i sklepu. Podmień wartości w nawiasach kwadratowych. Każdy blok wklejasz jako <script type="application/ld+json">…</script> — w Yoaście i Rank Mathu przez pole „kod w nagłówku”, w Elementorze przez widget HTML, w treści wpisu po prostu w edytorze kodu.
1. Wpis na blogu (BlogPosting)
Jeśli masz Yoasta, ten blok już jest — nie duplikuj go. Wklej tylko wtedy, gdy twój motyw lub generator stron nie daje Article.
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "[tytuł wpisu, do 110 znaków]",
"description": "[jedno zdanie o czym jest wpis]",
"image": "[https://twojadomena.pl/okladka.jpg]",
"datePublished": "[2026-09-24T10:00:00+02:00]",
"dateModified": "[2026-09-24T10:00:00+02:00]",
"author": { "@type": "Person", "name": "[Imię Nazwisko]", "url": "[https://twojadomena.pl/o-mnie/]" },
"publisher": { "@type": "Organization", "name": "[nazwa marki]", "logo": { "@type": "ImageObject", "url": "[https://twojadomena.pl/logo.png]" } },
"mainEntityOfPage": "[https://twojadomena.pl/adres-wpisu/]",
"inLanguage": "pl-PL"
}2. Autor / marka osobista (Person z sameAs)
To ten blok, którego u siebie mam za mało. Wpisz wszystkie profile, na których jesteś tą samą osobą — im więcej wiarygodnych, tym łatwiej maszynie skleić encję.
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://twojadomena.pl/#person",
"name": "[Imię Nazwisko]",
"url": "https://twojadomena.pl/",
"image": "[https://twojadomena.pl/zdjecie.jpg]",
"jobTitle": "[czym się zajmujesz, jedno wyrażenie]",
"description": "[dwa zdania o tobie — to samo, co w sekcji O mnie]",
"worksFor": { "@type": "Organization", "name": "[nazwa firmy]", "url": "[https://firma.pl/]" },
"knowsAbout": ["[temat 1]", "[temat 2]", "[temat 3]"],
"sameAs": [
"[https://www.linkedin.com/in/...]",
"[https://www.youtube.com/@...]",
"[https://www.instagram.com/...]"
]
}3. Produkt w sklepie (Product + Offer)
WooCommerce z Yoastem lub Rank Mathem generuje to sam z pól produktu. Blok przydaje się, gdy sprzedajesz przez własny szablon albo chcesz sprawdzić, czego wtyczce brakuje (najczęściej: shippingDetails i hasMerchantReturnPolicy).
{
"@context": "https://schema.org",
"@type": "Product",
"name": "[nazwa produktu]",
"image": ["[https://sklep.pl/produkt-1.jpg]"],
"description": "[opis produktu]",
"sku": "[SKU]",
"brand": { "@type": "Brand", "name": "[marka]" },
"offers": {
"@type": "Offer",
"url": "[https://sklep.pl/produkt/]",
"priceCurrency": "PLN",
"price": "[19.00]",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "PL",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 14,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
}Dla produktu cyfrowego (PDF do pobrania) pole zwrotów opisz zgodnie z regulaminem — przy treściach cyfrowych dostarczanych od razu prawo odstąpienia zwykle nie obowiązuje, więc returnPolicyCategory będzie MerchantReturnNotPermitted. Nie wpisuj „darmowy zwrot”, jeśli go nie ma.
4. Pytania i odpowiedzi (FAQPage)
Pytania muszą być widoczne na stronie dokładnie w tym brzmieniu. Pamiętaj: w Google od 2023 to głównie sygnał dla parserów, nie efekt wizualny.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "[Pytanie 1?]",
"acceptedAnswer": { "@type": "Answer", "text": "[Odpowiedź 1 — 2–4 zdania, bez linków sprzedażowych]" }
},
{
"@type": "Question",
"name": "[Pytanie 2?]",
"acceptedAnswer": { "@type": "Answer", "text": "[Odpowiedź 2]" }
}
]
}Schema a widoczność w AI
Najczęstsze pytanie z ostatniego roku: „czy schema pomaga być cytowanym w ChatGPT, Perplexity, AI Overviews?”. Uczciwa odpowiedź: pośrednio i bez twardych dowodów.
- Crawlery modeli (GPTBot, ClaudeBot, PerplexityBot, Google-Extended) pobierają HTML strony. JSON-LD jest w tym HTML-u, więc technicznie jest dostępny. Czy dany parser go używa — żaden dostawca nie potwierdza publicznie na poziomie szczegółów.
- AI Overviews i tryb AI w Google opierają się na indeksie Google. Tam dane strukturalne działają jak zawsze: pomagają zrozumieć stronę i encje. Google wprost mówi, że schema nie jest czynnikiem rankingowym, ale ułatwia interpretację treści.
- Największy praktyczny efekt daje spójność encji: to samo imię i nazwisko, ten sam opis, te same profile w
sameAsna stronie, w Yoaście, w profilach społecznościowych. Model, który trzykrotnie widzi tę samą encję w tym samym kontekście, chętniej ją przypisuje do tematu. - Schema nie naprawi treści. Model cytuje strony, które odpowiadają na pytanie w pierwszych akapitach, mają definicje, tabele i listy. Dane strukturalne to tylko etykieta na tym pudełku.
Więcej o tym, jak strona ma być czytelna dla modeli, jest w słowniku GEO. Tutaj zostawiam jedną regułę: najpierw treść z definicją i strukturą, potem Person z sameAs, na końcu reszta schemy.
Jak sprawdzić, czy działa
- Test wyników z elementami rozszerzonymi (Rich Results Test) od Google — wklejasz adres, dostajesz listę wykrytych typów i błędów. Pokazuje tylko typy, z których Google buduje rozszerzone wyniki; Person albo DefinedTermSet tu nie zobaczysz i to jest normalne.
- Schema Markup Validator (validator.schema.org) — sprawdza składnię wszystkich typów, nie tylko tych „googlowych”. Tu widać pełny graf.
- Search Console → Ulepszenia — po kilku dniach od indeksacji pojawiają się raporty per typ (np. „Okruszki nawigacyjne”, „Produkty”) z liczbą poprawnych i błędnych stron. To jedyne miejsce, gdzie widzisz stan całej witryny, a nie jednej strony.
- Podgląd kodu — najprościej: źródło strony, szukaj
ld+json. Jeśli blok jest, ale walidator go nie widzi, sprawdź, czy nie jest wstrzykiwany JavaScriptem po załadowaniu strony; część parserów nie wykonuje JS.
Błędy, które widuję najczęściej
| Błąd | Skutek | Naprawa |
|---|---|---|
| Dwie wtyczki generują schemę naraz (np. Yoast + wtyczka „FAQ schema”) | zduplikowane węzły, sprzeczne dane, ostrzeżenia w Search Console | zostaw jedno źródło; w Yoaście wyłącz to, co dubluje inna wtyczka |
| Schema mówi co innego niż strona (ocena 5,0 bez opinii, FAQ bez widocznych pytań) | ryzyko ręcznej kary za „dane strukturalne wprowadzające w błąd” | opisuj tylko to, co użytkownik widzi |
Brak image albo obrazek poniżej 1200 px szerokości w Article | wpis nie wchodzi do Discover, ostrzeżenie w raporcie | okładka 1200×630 lub większa, jako obrazek wyróżniający |
| Product bez ceny, waluty lub dostępności | brak rozszerzonego wyniku z ceną | uzupełnij offers; sprawdź, czy wtyczka nie chowa ceny dla wariantów |
| Data publikacji w schemie inna niż na stronie (np. po backdatowaniu) | Google traktuje daty jako niewiarygodne | jedna data, wszędzie ta sama — sam to przerabiałem przy porządkach we wrześniu |
Person bez sameAs albo z jednym adresem | encja autora nieskonsolidowana | dodaj profile zewnętrzne — mój punkt do zrobienia |
Plan testu w tej witrynie
Tego kanału jeszcze nie mierzyłem. Zamiast zmyślać efekt, spisuję plan i wrócę z wynikiem.
- Podpiąć mój blok Person do identyfikatora Yoasta (jeden węzeł zamiast dwóch) i uzupełnić
sameAs, gdy powstaną profile zewnętrzne. - Zdjąć zrzut z Search Console → Ulepszenia i z raportu Skuteczność: liczba wyświetleń i kliknięć dla wpisów z FAQPage i bez — punkt odniesienia.
- Nic nie zmieniać w treści. Raz w tygodniu zapisywać te same liczby.
- Porównać. Jeśli różnica mieści się w zwykłej zmienności, napiszę, że FAQPage na tym blogu nic nie daje — i będzie to równie dobry wpis.
FAQ
Czy schema markup poprawia pozycje w Google?
Nie bezpośrednio. Google wielokrotnie potwierdzał, że dane strukturalne nie są czynnikiem rankingowym. Pomagają zrozumieć stronę i mogą dać rozszerzony wynik, który zwykle zbiera więcej kliknięć niż zwykły — to jest realny efekt, ale w klikalności, nie w pozycji.
Czy wystarczy wtyczka SEO, czy trzeba coś dopisywać ręcznie?
Yoast albo Rank Math pokrywają podstawę: Article, WebPage, BreadcrumbList, Organization lub Person, Product w WooCommerce. Ręcznie warto dopisać rozszerzony Person z sameAs, jobTitle i knowsAbout oraz typy specjalne (FAQPage, DefinedTermSet, VideoObject), jeśli treść ich wymaga.
Czy FAQPage jeszcze ma sens?
W Google rozszerzone FAQ pokazuje się od sierpnia 2023 głównie na stronach rządowych i medycznych. Blok nie szkodzi, jest czytany przez Binga i parsery, ale nie licz na rozwijane pytania w wynikach Google.
Gdzie wkleić JSON-LD w WordPressie?
Najprościej w treści wpisu w edytorze kodu (blok „Własny HTML” w Gutenbergu) albo w widgecie HTML Elementora. Blok może być w treści, nie musi być w <head> — Google czyta całą stronę.
Jak sprawdzić, czy Google widzi moją schemę?
Test wyników z elementami rozszerzonymi dla pojedynczej strony, Search Console → Ulepszenia dla całej witryny. Pełny graf, także typy bez rozszerzonych wyników, pokazuje validator.schema.org.
Źródła
- Google Search Central, Jak działają dane strukturalne
- Google Search Central, Galeria typów z rozszerzonymi wynikami
- Google Search Central Blog, Zmiany w rozszerzonych wynikach HowTo i FAQ (sierpień 2023)
- Google Search Central, Zasady dotyczące danych strukturalnych
- schema.org — pełna hierarchia typów, Schema Markup Validator
- Yoast, dokumentacja grafu schema w Yoast SEO
Powiązane w notatniku: słownik SEO, słownik techniczny, GEO — widoczność w AI.
— MK · wróć do notatnika







