Przejdź do treści

SEO · 4 MIN

Schema.org dla dewelopera — RealEstateListing krok po kroku

Bez Schema.org JSON-LD strona dewelopera nie pojawi się w rich results Google. Pełen wzorzec dla Organization + RealEstateListing.

·

Strona dewelopera w 2026 roku bez structured data jest niewidoczna dla Google poza wynikami tekstowymi. Konkurent z poprawnym Schema.org dostaje rich snippets — kafelki z ceną, dostępnością, lokalizacją w wyszukiwarce. Klient klika w niego pierwsza, nie w Ciebie.

Schema.org JSON-LD to standard, który możesz w pełni wdrożyć w 2-3 godziny pracy. Bez pluginów typu Yoast Premium ($99/rok). Sam JSON wpada do head’a strony.

1. Organization — na home

Każda strona firmowa musi mieć Schema.org Organization w head’ie strony głównej. Zawiera nazwę firmy, NIP/REGON/KRS, adres, kontakt, social.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://jtmdevelopment.pl/#organization",
  "name": "JTM Sp. z o.o.",
  "alternateName": "JTM Development",
  "url": "https://jtmdevelopment.pl",
  "logo": "https://jtmdevelopment.pl/logo.png",
  "telephone": "+48 605 580 958",
  "email": "biuro@jtmdevelopment.pl",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "ul. Napoleona 2E",
    "addressLocality": "Kobyłka",
    "postalCode": "05-230",
    "addressRegion": "mazowieckie",
    "addressCountry": "PL"
  },
  "identifier": [
    { "@type": "PropertyValue",
      "propertyID": "KRS",
      "value": "0001034522" },
    { "@type": "PropertyValue",
      "propertyID": "NIP",
      "value": "1251748653" },
    { "@type": "PropertyValue",
      "propertyID": "REGON",
      "value": "525248475" }
  ]
}

W WordPressie wpada w head’ie przez akcję wp_head:

add_action('wp_head', function() {
    if (!is_front_page()) return;
    $data = [
        '@context' => 'https://schema.org',
        '@type'    => 'Organization',
        '@id'      => home_url('/#organization'),
        'name'     => 'JTM Sp. z o.o.',
        // ...
    ];
    echo '<script type="application/ld+json">';
    echo wp_json_encode($data, JSON_UNESCAPED_SLASHES);
    echo '</script>';
});

2. RealEstateListing — na karcie lokalu

Każdy lokal w portfolio (CPT „Lokal” w typowym setupie) dostaje JSON-LD typu RealEstateListing:

{
  "@context": "https://schema.org",
  "@type": "RealEstateListing",
  "name": "Lokal 12, Bud. 3 — Stary Dybów",
  "description": "Mieszkanie 3-pokojowe, 65 m², parter, ogródek 35 m²",
  "datePosted": "2026-04-15",
  "validUntil": "2026-12-31",
  "image": "https://jtmdevelopment.pl/lokal-12.jpg",
  "url": "https://jtmdevelopment.pl/lokale/lokal-12/",
  "offers": {
    "@type": "Offer",
    "price": "499000.60",
    "priceCurrency": "PLN",
    "availability": "https://schema.org/InStock",
    "validFrom": "2026-04-15"
  },
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "ul. Kardynała Wyszyńskiego (dz. 78)",
    "addressLocality": "Stary Dybów",
    "postalCode": "05-250",
    "addressCountry": "PL"
  }
}

W WordPressie generujesz dynamicznie z meta lokalu:

add_action('wp_head', function() {
    if (!is_singular('unit')) return;
    $price  = get_post_meta(get_the_ID(), 'jtm_price_gross', true);
    $area   = get_post_meta(get_the_ID(), 'jtm_area', true);
    $status = get_post_meta(get_the_ID(), 'jtm_status', true);

    $availability = match($status) {
        'available' => 'https://schema.org/InStock',
        'reserved'  => 'https://schema.org/PreOrder',
        'sold'      => 'https://schema.org/SoldOut',
        default     => 'https://schema.org/InStock',
    };

    $data = [
        '@context' => 'https://schema.org',
        '@type'    => 'RealEstateListing',
        'name'     => get_the_title(),
        'datePosted' => get_the_date('Y-m-d'),
        'offers'   => [
            '@type'    => 'Offer',
            'price'    => (string) $price,
            'priceCurrency' => 'PLN',
            'availability'  => $availability,
        ],
    ];
    echo '<script type="application/ld+json">';
    echo wp_json_encode($data);
    echo '</script>';
});

3. BreadcrumbList — na sub-stronach

Breadcrumbs typu „Strona główna > Inwestycje > Stary Dybów > Lokal 12″ w head’ie. Google używa tego do generowania ścieżki w SERP’ie.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1,
      "name": "Strona główna",
      "item": "https://jtmdevelopment.pl/" },
    { "@type": "ListItem", "position": 2,
      "name": "Inwestycje",
      "item": "https://jtmdevelopment.pl/inwestycje/" },
    { "@type": "ListItem", "position": 3,
      "name": "Stary Dybów",
      "item": "https://...stary-dybow/" },
    { "@type": "ListItem", "position": 4,
      "name": "Lokal 12" }
  ]
}

Walidacja

Po deployu — sprawdź każdy typ Schema.org:

Jeśli validator pokazuje warningi — popraw. Jeśli rich-results test mówi „No items detected” — masz błąd struktury.

Co dostajesz

Po 4-8 tygodniach od deployu (czas indeksacji Google):

  • Rich results dla nazwy firmy w SERP — kafelek z logo, adresem, telefonem
  • Karty lokali pokazują się z ceną i dostępnością bezpośrednio w wynikach
  • Knowledge Graph może podchwycić Twoją firmę (przy wystarczającej liczbie sygnałów)
  • Wzrost CTR z SERP-u o 15-30% (mierzone w Search Console klientów)

Schema.org to free SEO. Wystarczy wdrożyć raz, a działa dla każdego nowego lokalu, każdego artykułu, każdej podstrony.

Spodobało się? Podziel się.

Zaczynamy?

Odpowiem do końca dnia roboczego.