Przejdź do treści

Schema.org pod AI Search: Budowanie grafu encji

Przygotuj ustrukturyzowane dane na erę AI Search. Jak połączyć właściwości @id oraz sameAs, by roboty i modele AI zrozumiały kontekst Twojej strony.

Maciej Sala

Founder StriveLab

7 min czytaniaOpublikowano 30 maja 2026 (Aktualizacja 6 lipca 2026)

w stosunku do SEO przenosi dyskusje z prezentacji w wynikach wyszukiwania, na poprawne zrozumianie i zacytowanie przez model. Model nie czyta strony jak człowiek, tylko ją parsuje, szuka bytów, relacji i powtarzalnych sygnałów. Jeśli dostarczysz mu spójne dane o encjach, nie musi wszystkiego odtwarzać z prozy, więc chętniej będzie cytował stronę. Oczywiście to nie oznacza, że będzie robił, ale jest to krok w tym kierunku.

Schema.org dla AI: od pól do encji i grafu wiedzy

Klasyczne podejście do jest atrybutowe i polega na tym, że bierzemy typ (Product, FAQPage), wypełniamy pola i otrzymujemy wyniki rozszerzone. To nadal działa i od tego warto zacząć. Podstawy dla strony usługowej opisałem w poradniku o LocalBusiness, Service i FAQ w Next.js. Trzeba pamiętać, że model AI szuka czegoś więcej, on chce widzieć relacje między bytami. Model chce wiedzieć, kim jesteś, kto to napisał, czego dotyczy tekst i z czym jest powiązany. Sam tytuł i cena mu nie wystarczają.

Strona produktowa z poprawnym Product dostanie gwiazdki w Google, ale ta sama strona, w której Product jest powiązany przez brand z Organization mającą stały identyfikator i komplet sameAs, daje modelowi kontekst encji. W ten sposób model wie, czyj to produkt, że ta firma istnieje też na LinkedInie czy w Wikipedii, i że można jej zaufać jako źródłu. Pierwsze optymalizuje wygląd, a drugie wpływa na zrozumienie.

Graf encji z @id jako fundament Schema.org pod AI

Sercem schema pod AI jest , czyli stały identyfikator, dzięki któremu różne fragmenty danych wskazują tę samą encję, zamiast tworzyć jej kopie. Zacznij od centralnej encji organizacji:

Code
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Acme",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "description": "Studio tworzące szybkie strony i aplikacje w Next.js i Astro.",
  "sameAs": ["https://www.linkedin.com/company/acme", "https://github.com/acme"]
}

Teraz każda inna encja może się do niej odwołać przez @id, zamiast powtarzać dane organizacji:

Code
{
  "@type": "Article",
  "@id": "https://example.com/blog/jakis-wpis/#article",
  "headline": "Tytuł wpisu",
  "author": { "@id": "https://example.com/#person-jan" },
  "publisher": { "@id": "https://example.com/#organization" },
  "about": { "@id": "https://example.com/#organization" }
}

Artykuł nie duplikuje danych autora ani wydawcy, tylko na nie wskazuje. To zamienia zbiór luźnych bloków w spójny, uporządkowany graf, w którym model potrafi prześledzić, że ten artykuł napisała ta osoba, pracująca dla tej organizacji, opisanej tymi linkami sameAs.

sameAs w Schema.org: jak ujednoznacznić encje dla AI

to prawdopodobnie najważniejsza pojedyncza właściwość w schema pod AI. Łączy Twój byt z jego reprezentacjami na zewnętrznych, zaufanych platformach. Bez niej model widzi izolowaną nazwę, np. „Acme", jedną z potencjalnie wielu. Z nią widzi byt osadzony w sieci, czyli ten sam podmiot, co profil na LinkedInie, repozytorium na GitHubie, wpis w bazie firm.

Code
{
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Acme",
  "sameAs": [
    "https://www.linkedin.com/company/acme",
    "https://github.com/acme",
    "https://www.crunchbase.com/organization/acme"
  ]
}

Ta sama zasada dotyczy osób i warto to zapamiętać. Encja Person z sameAs do LinkedIna, profilu naukowego czy GitHuba pozwala modelowi powiązać autora treści z realną, weryfikowalną tożsamością. To bezpośrednio wpływa na to, czy potraktuje go jako wiarygodne źródło. Warto dołożyć do niej także jobTitle, knowsAbout oraz url prowadzący do strony autora. To sygnały z rodziny E-E-A-T i biorąc ostatnie zmiany w podchodzeniu przez Google do AI i tworzenia treści, to jedna z fundamentalnych moim zdaniem kwestii w nadchodzących latach.

Implementacja Schema.org w Next.js: graf encji w jednym miejscu

W Next.js najczystsze jest trzymanie centralnych encji w jednym module i składanie z nich grafu per strona. Dzięki temu @id organizacji i autorów istnieje w jednym źródle prawdy:

Code
// lib/schema/entities.ts
export const ORGANIZATION = {
  '@type': 'Organization',
  '@id': 'https://example.com/#organization',
  name: 'Acme',
  url: 'https://example.com',
  sameAs: ['https://www.linkedin.com/company/acme', 'https://github.com/acme'],
} as const
 
export const PERSON_AUTHOR = {
  '@type': 'Person',
  '@id': 'https://example.com/#person-jan',
  name: 'Jan Kowalski',
  url: 'https://example.com/o-mnie',
  jobTitle: 'Frontend Developer',
  worksFor: { '@id': ORGANIZATION['@id'] },
  knowsAbout: ['Next.js', 'SEO', 'Dane strukturalne'],
  sameAs: ['https://www.linkedin.com/in/jankowalski'],
} as const

Na stronie składasz z nich pełny graf przez @graph — tablicę powiązanych encji emitowaną jako jeden blok JSON-LD:

Code
// app/blog/[slug]/page.tsx
import { ORGANIZATION, PERSON_AUTHOR } from '@/lib/schema/entities'
 
export default async function ArticlePage({ params }) {
  const post = await getPost(params.slug)
 
  const graph = {
    '@context': 'https://schema.org',
    '@graph': [
      ORGANIZATION,
      PERSON_AUTHOR,
      {
        '@type': 'Article',
        '@id': `https://example.com/blog/${post.slug}/#article`,
        headline: post.title,
        author: { '@id': PERSON_AUTHOR['@id'] },
        publisher: { '@id': ORGANIZATION['@id'] },
        datePublished: post.datePublished,
      },
    ],
  }
 
  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: JSON.stringify(graph).replace(/</g, '\\u003c'),
        }}
      />
      <ArticleBody post={post} />
    </>
  )
}

robi tu najważniejszą robotę, czyli zamiast trzech osobnych skryptów JSON-LD, które model musi sam ze sobą powiązać, dostarczasz jeden spójny graf z jawnymi połączeniami. Taka forma jest łatwiejsza do interpretacji.

Co w Schema.org realnie pomaga AI zrozumieć stronę

Nie każda właściwość robi to samo. @id i @graph spinają całość w jeden graf. Bez nich reszta łatwo zamienia się w kilka niepowiązanych ze sobą elementów JSON-LD. sameAs ujednoznacznia encję względem zewnętrznych źródeł, a author, publisher i worksFor pokazują, kto odpowiada za treść. about i mentions mówią, o czym jest artykuł i jakie byty są w nim ważne. knowsAbout przy Organization lub Person deklaruje obszary kompetencji bez czekania, aż model sam je wywnioskuje.

Dla about i mentions wystarczy kilka linijek, żeby artykuł przestał być anonimowym tekstem, a stał się treścią o konkretnych, nazwanych bytach:

Code
{
  "@type": "Article",
  "@id": "https://example.com/blog/jakis-wpis/#article",
  "about": { "@id": "https://example.com/#organization" },
  "mentions": [
    { "@type": "SoftwareApplication", "name": "Next.js" },
    { "@type": "Thing", "name": "JSON-LD" }
  ]
}

Walidacja grafu encji: jak sprawdzić Schema.org pod AI

Do weryfikacji grafu używaj walidatora Schema.org, który parsuje pełny JSON-LD razem z @graph i pokazuje encje wraz z ich powiązaniami. Równolegle uruchom test wyników z elementami rozszerzonymi Google: sprawdza dane obsługiwane przez Google i potrafi zgłosić błędy albo opcjonalne pola, które warto dodać, np. streetAddress oraz postalCode w adresie firmy. Te narzędzia odpowiadają na różne pytania, więc musisz używać obu.

Trzy rzeczy sprawdź ręcznie. Czy JSON-LD trafia do initial HTML (podgląd źródła strony albo curl), a nie jest dokładany dopiero po hydracji, bo część botów nie wykonuje JavaScriptu. Czy każdy @id, do którego coś się odwołuje, ma w grafie swoją pełną definicję, ponieważ wiszące odwołanie to najczęstszy błąd przy przechodzeniu z luźnych bloków na graf. I na końcu zobacz, czy graf zgadza się z widoczną treścią, ponieważ encja musi opisywać coś, co na stronie istnieje.

Czego Schema.org pod AI i AEO nie załatwi

Dane strukturalne nie są panaceum na wszystko. Modele nadal patrzą na trafność, autorytet tematyczny oraz klarowność treści. Schema z kolei pomaga im nie pomylić bytów, ale też nie sprawi, że słabej jakości strona nagle stanie się źródłem wartym cytowania. Na to trzeba zapracować w różny sposób i nie ma drogi na skróty.

Dzięki schema mamy natomiast redukcję niejednoznaczności, bo mówi modelowi wprost, czym jest Twój byt, kto za nim stoi i z czym jest powiązany, zamiast kazać mu to samemu wszystko wnioskować. Działa najlepiej tam, gdzie treść jest już na odpowiednio dobrym poziomie. Wtedy dane strukturalne domykają interpretację i zwiększają szansę na poprawny, przypisany do Ciebie cytat.

Audyt techniczny i optymalizacja pod kątem SEO i GEO.
Audyt techniczny SEO

Często zadawane pytania

Czy modele AI naprawdę używają danych Schema.org?

Tak, ale dane strukturalne pomagają systemom wyszukiwania i modelom AI zrozumieć, czym jest dany byt, kto za nim stoi i z czym jest powiązany. Nie zastąpi dobrej treści ani autorytetu tematycznego. Działa raczej jak warstwa ujednoznacznienia: model nie musi zgadywać z samej prozy, czy „Acme” to firma, projekt, produkt czy profil autora.

Czym różni się Schema dla AI od Schema dla Googlebota?

Klasyczne Schema często kończy się na rich results: gwiazdkach, FAQ, breadcrumbs. Schema pod AI search idzie głębiej: opisuje encje i relacje między nimi. Kim jest firma? Kto napisał artykuł? Jakie usługi oferuje? Z jakimi profilami zewnętrznymi da się ją powiązać? To samo JSON-LD obsłuży oba cele, ale projektujesz je bardziej jak graf niż jak formularz pod SERP.

Do czego służy właściwość sameAs?

sameAs łączy encję z jej oficjalnymi reprezentacjami poza stroną: LinkedInem, GitHubem, Wikipedią, Crunchbase albo innymi profilami, które naprawdę należą do tej firmy lub osoby. Bez sameAs model widzi samą nazwę. Z sameAs dostaje tropy, które pomagają odróżnić jeden byt od drugiego.

Czym jest @id w JSON-LD i dlaczego ma znaczenie?

@id to globalny, stały identyfikator encji w Twoim grafie. URL jest zwykle z fragmentem, np. https://twojadomena.pl/#organization i dzięki niemu różne fragmenty danych mogą odwoływać się do tej samej encji zamiast ją duplikować. Artykuł wskazuje autora przez @id, autor wskazuje organizację przez @id. To zamienia zbiór luźnych bloków JSON-LD w spójny graf, w którym byty są powiązane, a nie powtarzane.

Czy Schema.org pod AI zastępuje plik llms.txt?

Nie, to dwie różne rzeczy. llms.txt to dokument referencyjny adresowany wprost do modeli, który zawiera czytelny dla człowieka indeks treści, który Lighthouse sprawdza dziś także w eksperymentalnym audycie Przeglądania Agentowego. Schema.org to czytelne dla maszyny dane osadzone w stronach, opisujące encje i ich relacje. Najlepiej działają w połączeniu: llms.txt kieruje model do właściwych treści, a Schema.org pozwala mu te treści poprawnie zinterpretować jako byty i powiązania. Podsumowując, nie ma mowy o zastępowaniu, tylko jedno uzupełnia drugie.

Od czego zacząć, jeśli mam już podstawowe Schema na stronie?

Zacznij od organizacji. Nadaj Organization stały @id, dodaj sensowne sameAs do oficjalnych profili, a potem połącz z tym bytem autorów, artykuły i usługi. W wielu projektach Schema już istnieje, tylko żyje jako kilka samotnych bloków. Samo spięcie ich w jeden graf daje więcej niż dokładanie kolejnych typów bez relacji.

O autorze

Maciej Sala

Maciej Sala — Product Manager i Frontend Developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwijam własne projekty.

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną

Biblioteka wiedzy na temat Next.js

Czytaj dalej

Zobacz więcej wpisów
Schema.org w Next.js: LocalBusiness, Service i FAQ

Dane strukturalne to bezpośredni opis Twojej firmy w języku, który rozumie Google i modele AI. Dzięki nim mamy pełną kontrolę nad danymi i nie pozostawiamy robotom wyboru i zgadywania na podstawie samego tekstu strony. Schema.org mówi wprost, kim jesteś, co oferujesz, gdzie działasz i na jakie pytania odpowiadasz. W Next.js nie potrzebujesz do tego wtyczki, ponieważ wystarczą komponenty React, które renderują poprawny JSON-LD i dają się testować.

Maciej Sala

Maciej Sala

Founder StriveLab

SEO w Astro — Core Web Vitals, dane uporządkowane i techniczny fundament rankingu w 2026

Astro dostarcza przyjazność SEO już na poziomie architektury, gwarantując świetne wyniki w Lighthouse dzięki brakowi domyślnego JavaScriptu i statycznemu renderowaniu HTML. Jednak prawdziwa widoczność w Google oraz systemach AI to efekt świadomych decyzji inżynieryjnych, a nie tylko wyboru frameworka. W tym artykule rozbieram na części pierwsze każdą z nich: od Core Web Vitals, przez metadane i schema.org , aż po optymalizację GEO / AEO .

Maciej Sala

Maciej Sala

Founder StriveLab

GEO i AEO w Next.js — techniczna optymalizacja pod ChatGPT, Gemini i Perplexity

Generative Engine Optimization GEO to praktyka optymalizacji treści tak, aby silniki AI ChatGPT, Perplexity, Google AI Overviews, Gemini i Claude cytowały je w swoich odpowiedziach. Answer Engine Optimization AEO koncentruje się na pojawianiu się w boksem z odpowiedzią, odpowiedziach głosowych i bezpośrednich odpowiedziach na stronach wyników wyszukiwania. Obie razem tworzą nowy wymiar widoczności, który w 2026 roku jest równie istotny co tradycyjne SEO.

Maciej Sala

Maciej Sala

Founder StriveLab