Umów konsultację

Bezpłatna wycena w 24h

Schema.org dla lokalnego biznesu — jak wdrożyć LocalBusiness JSON-LD

Schema.org dla lokalnego biznesu — jak wdrożyć LocalBusiness JSON-LD

SEO16 czerwca 20269 min czytania

Schema.org to słownik typów danych strukturalnych, które mówią wyszukiwarkom: tu jest firma, oto jej adres, godziny, telefon, kategoria. Dla biznesu lokalnego najważniejszym typem jest LocalBusiness — bez niego Google buduje obraz Twojej firmy z fragmentów (NAP z katalogów, dane z wizytówki, treść strony), a niespójności obniżają ranking lokalny. Z LocalBusiness Schema masz jedno, spójne źródło prawdy, z którym wszystkie inne dane mają się zgadzać.

Po co właściwie schema lokalna?

Cztery konkretne korzyści:

  • Spójność danych — Google porównuje dane z wizytówki GBP, schema na stronie i NAP w katalogach. Niespójności = niższy ranking. Schema to Twoja deklaracja „tak wygląda moja firma".
  • Rich snippets — niektóre typy (LocalBusiness + opinie + cennik) mogą dawać wzbogacone wyniki: gwiazdki, godziny, ceny w organicznych SERP-ach,
  • Knowledge Graph — Google używa schema do budowy karty firmy w prawym panelu wyników. Bez schema karta opiera się na fragmentach.
  • GEO/LLM — modele językowe (ChatGPT, Perplexity, AI Overviews) czytają schema, by zrozumieć kontekst firmy. Bez tego Twoja firma jest „w mieście X", z tym jest „gabinetem fizjoterapii w Toruniu przy ul. Mickiewicza".

Podstawowy LocalBusiness JSON-LD

Wzorzec, który stosujemy na każdym wdrożeniu lokalnym. JSON-LD w <head> strony (najlepiej w layout, żeby było na każdej podstronie):

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://twojafirma.pl/#localbusiness",
  "name": "Twoja Firma sp. z o.o.",
  "image": "https://twojafirma.pl/og-image.jpg",
  "url": "https://twojafirma.pl",
  "telephone": "+48-123-456-789",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "ul. Mickiewicza 10",
    "addressLocality": "Toruń",
    "postalCode": "87-100",
    "addressCountry": "PL"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 53.0138,
    "longitude": 18.5984
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "18:00"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/twojafirma",
    "https://www.linkedin.com/company/twojafirma"
  ]
}

Typy bardziej specjalistyczne — używaj tych, które pasują

LocalBusiness to typ ogólny. Schema.org ma kilkadziesiąt bardziej szczegółowych podtypów — i Google premiuje precyzję:

  • MedicalOrganization, Physician, Dentist — dla branży medycznej i fizjoterapii,
  • LegalService — kancelarie prawne,
  • RealEstateAgent — biura nieruchomości,
  • AutoRepair, AutoDealer — motoryzacja,
  • BeautySalon, HairSalon, NailSalon — beauty,
  • ChildCare, Preschool, School — edukacja,
  • Restaurant, Bakery, CafeOrCoffeeShop — gastronomia.

Przykład 2: MedicalOrganization dla gabinetu rehabilitacji (RehaFit, Toruń)

Dla naszego klienta RehaFit — centrum fizjoterapii i treningu personalnego przy ul. Mickiewicza w Toruniu — wdrożyliśmy schemat MedicalOrganization z osobnymi Physician dla każdego specjalisty (mega menu na stronie zawiera kartę każdego z nich z odrębnym schema):

{
  "@context": "https://schema.org",
  "@type": "MedicalOrganization",
  "@id": "https://rehafit.org/#organization",
  "name": "RehaFit — Centrum Fizjoterapii i Treningu",
  "url": "https://rehafit.org",
  "telephone": "+48-56-XXX-XX-XX",
  "medicalSpecialty": [
    "Physiotherapy",
    "SportsMedicine",
    "Rehabilitation"
  ],
  "availableService": [
    {
      "@type": "MedicalTherapy",
      "name": "Terapia manualna"
    },
    {
      "@type": "MedicalTherapy",
      "name": "Igłoterapia sucha"
    },
    {
      "@type": "MedicalTherapy",
      "name": "Trening medyczny pourazowy"
    }
  ],
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "ul. Mickiewicza 79",
    "addressLocality": "Toruń",
    "postalCode": "87-100",
    "addressCountry": "PL"
  },
  "areaServed": {
    "@type": "City",
    "name": "Toruń"
  }
}

Dodatkowo każdy specjalista w mega menu ma osobny węzeł Physician linkowany do organizacji nadrzędnej przez worksFor. To pomaga Google rozumieć, że „fizjoterapeuta sportowy Toruń" oznacza konkretną osobę z konkretnymi kompetencjami, a nie tylko ogólny gabinet.

Przykład 3: Preschool dla przedszkola (Jagódka, Toruń)

Dla Żłobka i Przedszkola Jagódka na Bydgoskim Przedmieściu w Toruniu zastosowaliśmy typ Preschool z węzłami EducationalOccupationalProgram dla każdej terapii oferowanej w placówce:

{
  "@context": "https://schema.org",
  "@type": "Preschool",
  "@id": "https://przedszkolejagodka.pl/#preschool",
  "name": "Przedszkole BamBam Jagódka",
  "url": "https://przedszkolejagodka.pl",
  "telephone": "+48-56-XXX-XX-XX",
  "priceRange": "1500-2500 PLN",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "ul. [...]",
    "addressLocality": "Toruń",
    "addressRegion": "kujawsko-pomorskie",
    "postalCode": "87-100",
    "addressCountry": "PL"
  },
  "areaServed": ["Toruń", "Bydgoskie Przedmieście"],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Terapie i programy",
    "itemListElement": [
      { "@type": "Offer", "itemOffered": { "@type": "EducationalOccupationalProgram", "name": "Integracja sensoryczna" } },
      { "@type": "Offer", "itemOffered": { "@type": "EducationalOccupationalProgram", "name": "Terapia Tomatisa" } },
      { "@type": "Offer", "itemOffered": { "@type": "EducationalOccupationalProgram", "name": "Trening Umiejętności Społecznych (TUS)" } }
    ]
  }
}

To podejście odpowiada bezpośrednio na strategię osobnych podstron pod terapie, którą stosujemy w SEO lokalnym dla placówek edukacyjnych — każda terapia ma osobny węzeł schema + osobną podstronę linkowaną z menu, co buduje longtail terapeutyczny + lokalny.

Schema na każdej podstronie czy tylko na głównej?

To pytanie wraca w każdym audycie. Krótka odpowiedź: na każdej — przez wstrzyknięcie schematu w komponent layoutu (app/layout.tsx w Next.js albo header.php w WordPress). Powody:

  • Google indeksuje podstrony niezależnie. Każda podstrona musi mieć kontekst, że to firma X, nie „nieznana podstrona".
  • Knowledge Graph budowany jest z agregatu sygnałów — im więcej spójnych źródeł, tym mocniejszy.
  • Schema z @id sluggiem #localbusiness jest deduplikowany przez Google — nie ma ryzyka „dublujesz się sam ze sobą".
  • AI Overviews i Perplexity czytają losowe podstrony — bez schema podstrona „o zespole" może być cytowana bez kontekstu firmy.

Spójność NAP — krytyczne

NAP (Name, Address, Phone) musi być identyczne we wszystkich miejscach:

  • Schema na stronie,
  • Wizytówka Google Business Profile,
  • Stopka strony (widoczna),
  • Cytowania w katalogach (Panorama Firm, PKT, GoWork, branżowe).

„ul. Mickiewicza 10" vs „Mickiewicza 10" vs „A. Mickiewicza 10" to dla Google trzy różne adresy. Audytujemy spójność NAP w pierwszym kroku każdego projektu local SEO.

Max Mazurkiewicz

Max Mazurkiewicz

Founder

POTRZEBUJESZ SPERSONALIZOWANEJ WYCENY?

Chcesz się na coś zdecydować ale od nadmiaru możliwości boli głowa? Skontaktuj się z nami, dobierzemy rozwiązanie do potrzeb Twojej firmy.

Umów się na konsultację

Częste błędy w schema lokalnym — 10 rzeczy do sprawdzenia

  • Współrzędne GPS zaokrąglonegeo:latitude 53.0 zamiast 53.0138. Google nie wie, gdzie dokładnie jesteś, więc ranking lokalny jest słabszy.
  • Brak @id — schema bez stałego identyfikatora wygląda dla Google jak nowa firma przy każdym indeksowaniu.
  • Niespójność z wizytówką GBP — godziny w schema 8-18, w wizytówce 9-17. Google porównuje i obniża zaufanie do obu źródeł.
  • Schema tylko na stronie kontaktowej — powinno być w layout/head na każdej podstronie.
  • Brak priceRange — jeden z najsłabiej wypełnianych pól. Wartości $, $$, $$$, $$$$ lub konkretne widełki („1500-2500 PLN").
  • Brak image — Google używa do karty Knowledge Graph. Powinno być statyczne, hostowane na własnej domenie, minimum 1200×630 px.
  • Niespójny format telephone — „+48 56 123 45 67" vs „56-123-45-67" vs „+48561234567". Wybierz jeden format (rekomendowany: E.164 — +48561234567) i trzymaj go w schema + GBP + stopce.
  • Brakujący hasMap — link do Google Maps z mapy firmy. Drobne pole, ale jeden z sygnałów, że firma istnieje fizycznie.
  • Brakujący currenciesAccepted i paymentAccepted dla typu LocalBusiness lub jego podtypów. Małe pole, dla AI Overviews bywa cytowane.
  • Schema w image jako video/audio link zamiast statycznego JPG/PNG — Google ignoruje, czasem wyrzuca błąd w Rich Results Test.

Walidacja — 4 narzędzia + CI

Po wdrożeniu sprawdzamy systematycznie:

  1. Schema.org validator (validator.schema.org) — czy struktura jest poprawna składniowo. Pierwsza linia obrony przed literówkami w nazwach pól.
  2. Rich Results Test Google (search.google.com/test/rich-results) — czy Google rozumie schema i potencjalnie pokaże wzbogacone wyniki.
  3. Search Console — raport „Wzbogacone wyniki" — czy widzi schema w produkcji po reindeksacji (zwykle 2-7 dni od deployu).
  4. Po 2-3 tygodniach — sprawdzić, czy karta firmy w Knowledge Graph (prawy panel wyników Google na frazę brandową) aktualizuje się o nowe dane.

Dla zespołów devowych warto rozważyć walidację w CI/CD pipeline. Dla projektów na Next.js stosujemy structured-data-testing-tool lub własny test e2e w Playwright, który wyciąga JSON-LD ze strony i waliduje przeciwko własnej schemie typów. To eliminuje ryzyko regresji — np. ktoś zmienia format telefonu w stopce, schema staje się niespójna z GBP.

Schema lokalna a AI Overviews — co już widać

Od kiedy Google rolluje AI Overviews i Search Generative Experience, schema LocalBusiness przestała być tylko optymalizacją pod organic SERP — stała się sygnałem dla modeli językowych odpowiadających na zapytanie „znajdź mi fizjoterapeutę po urazie kolana w Toruniu". Bez precyzyjnego schema firma jest reprezentowana w modelu LLM jako „placówka w Toruniu" — z dobrym schematem jako konkretny MedicalOrganization z medicalSpecialty i areaServed. Różnica w cytowaniach jest dla nas widoczna od ok. drugiego kwartału 2025.

To samo dotyczy Perplexity, ChatGPT (z włączoną wyszukiwarką), Claude, You.com i innych LLM-ów z dostępem do sieci. Wszystkie indeksują schema i wykorzystują je do budowania odpowiedzi na zapytania lokalne. Dla firm w mniejszych miastach (Toruń, Bydgoszcz, Olsztyn) sygnał schema bywa wręcz decydujący — bo dane są rzadsze i model bardziej ufa temu, co znajdzie w strukturze JSON-LD niż w surowym tekście.

Powiązane typy schema, które warto wdrożyć razem z LocalBusiness

LocalBusiness to fundament, ale samodzielnie zostawia ekosystem niedopełniony. Trzy typy, które wdrażamy razem dla pełnej strategii local SEO:

  • BreadcrumbList na każdej podstronie kategorii i podstronie usługi. Pomaga Google rozumieć hierarchię serwisu — Home → Usługi → Konkretna usługa → Cennik. Wdrażamy automatycznie z poziomu layoutu Next.js lub przez hooka wp_breadcrumbs w WordPress. Bez tego Google buduje hierarchię z URL-i, co jest mniej precyzyjne.
  • FAQPage na podstronach z sekcją FAQ — w naszym przypadku każdy artykuł blogowy i każdy landing ma FAQ przekonwertowane do JSON-LD. To daje szansę na rich snippets typu „People also ask" w Google, plus zasila modele LLM odpowiedziami na konkretne pytania w formie ustrukturyzowanej.
  • Service na podstronach poszczególnych usług (np. „terapia manualna" jako podstrona RehaFit). Łączymy ze sobą węzły LocalBusiness i Service przez relację provider w schema Service, żeby Google miało jasno: tę usługę świadczy ta firma.

Wdrożenie schema w Next.js — pattern, który stosujemy

Schema w Next.js App Router warto wdrażać w komponencie layout, żeby było obecne na każdej podstronie. Wzorzec:

// app/layout.tsx
const localBusinessSchema = {
  '@context': 'https://schema.org',
  '@type': 'Preschool',
  '@id': 'https://przedszkolejagodka.pl/#preschool',
  // ... pełne dane
}

export default function RootLayout({ children }: { children: React.ReactNode }) {
  return (
    <html lang="pl">
      <body>
        <script
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(localBusinessSchema) }}
        />
        {children}
      </body>
    </html>
  )
}

Dla podstron blogowych dodajemy schema Article w komponencie strony bloga, łącznie z author wskazującym na osobę autorską i publisher wskazującym na firmę. Dla landingu usługi — Service z provider wskazującym na hub LocalBusiness. To buduje graf semantyczny serwisu, który Google rozumie holistycznie.

Schema w WordPress — bez wtyczek typu Rank Math czy Yoast

Wtyczki SEO automatycznie generują podstawowe schema, ale dla schema lokalnej (szczególnie dla podtypów typu MedicalOrganization) ich domyślne ustawienia są zwykle za ogólne. Konfigurujemy schema osadzane przez własną funkcję w functions.php motywu potomnego:

function inject_local_business_schema() {
  $schema = [
    '@context' => 'https://schema.org',
    '@type' => 'Preschool',
    '@id' => home_url() . '/#preschool',
    'name' => get_option('blogname'),
    // ... pełne dane z opcji WordPress
  ];
  echo '<script type="application/ld+json">' . wp_json_encode($schema) . '</script>';
}
add_action('wp_head', 'inject_local_business_schema');

To 15 linii kodu w motywie potomnym — bez wtyczki, bez wpływu na wydajność, z pełną kontrolą nad strukturą. Dane (nazwa, adres, telefon) wyciągamy z opcji WordPress, żeby były spójne ze stopką strony.

Checklist wdrożeniowy — co konkretnie zrobić

  1. Wybierz najbardziej specjalistyczny podtyp LocalBusiness (MedicalOrganization / Preschool / BeautySalon / itd.).
  2. Wpisz JSON-LD w layout (Next.js: app/layout.tsx, WordPress: functions.php z hookiem wp_head).
  3. Sprawdź spójność z GBP — adres, telefon, godziny, kategorie. Niespójności → poprawić od razu.
  4. Wypełnij wszystkie pola, których realnie nie unikniesz: name, address, geo, telephone, url, image, priceRange, openingHoursSpecification, sameAs.
  5. Waliduj w Schema.org validator + Rich Results Test.
  6. Poczekaj 2-7 dni na reindeksację. Sprawdź Search Console.
  7. Po 2-3 tygodniach sprawdź Knowledge Graph na zapytanie brandowe.
  8. Dodaj walidację schema do pipeline CI, żeby uniknąć regresji.

Wnioski

LocalBusiness Schema to najtańsza i najszybsza wygrana w local SEO — kilka godzin pracy daje miesiące przewagi nad konkurencją, która tego nie wdraża. Plus przygotowanie pod GEO/LLM, w których schema jest sygnałem, że firma istnieje fizycznie i jest weryfikowalna. Realne przykłady, które pokazaliśmy powyżej (RehaFit jako MedicalOrganization, Jagódka jako Preschool z węzłami terapii), to wzorce, które działają — i które warto skopiować dla swojej kategorii biznesu, podmieniając tylko dane.

Dla firm w mieście rekomendujemy schema w pakiecie z optymalizacją GBP i strategią local SEO — opisaliśmy szerszą strategię w artykule o local SEO i Google Maps oraz w landingu pozycjonowanie Toruń. Jeśli wdrażasz lub przebudowujesz stronę firmy lokalnej z Torunia, schema standardowo jest częścią naszej oferty stron internetowych Toruń — nie dodatkową usługą.

Najczęściej zadawane pytania

Niekoniecznie. Gwiazdki w organicznych wynikach (rich snippets opinii) Google ogranicza i nie gwarantuje ich wyświetlenia — szczególnie dla komercyjnych zapytań. Schema warto wdrażać dla innych korzyści: spójność danych z wizytówką, Knowledge Graph, kontekst dla AI Overviews. Gwiazdki to bonus, nie cel.

Google rekomenduje JSON-LD (skrypt w head). Microdata (atrybuty HTML) działa, ale jest trudniejsze w utrzymaniu i mniej preferowane. RDFa to format teoretyczny, w praktyce nie używamy. Zawsze JSON-LD.

Trzy narzędzia: schema.org validator (validator.schema.org) — czy struktura jest poprawna, Rich Results Test Google (search.google.com/test/rich-results) — czy Google rozumie, Search Console raport „Wzbogacone wyniki" — czy widzi schema w produkcji. Wszystkie trzy darmowe.

Tak — LLM (Perplexity, ChatGPT, AI Overviews) czytają schema, by zrozumieć kontekst firmy. Bez schema Twoja firma jest „w mieście X". Z dobrym LocalBusiness schema jest „gabinetem fizjoterapii w Toruniu przy ul. Mickiewicza, godziny 8-18, telefon X". Mocniej cytowana w odpowiedziach AI.

Max Mazurkiewicz
Max Mazurkiewicz
Founder
Digital marketing expert