Przewodnik schema.org – Znaczniki mikrodanych

Znaczniki mikrodanych schema.org

Znaczniki HTML zazwyczaj informują przeglądarkę internetową w jaki sposób wyświetlić umieszczone w tagach dane, ale nie wskazują znaczenia elementu. Kod HTML <h1>Oliver Twist</h1> dostarcza informacji dla przeglądarki, że tekst powinien zostać wyświetlony jako nagłówek najwyższego poziomu, ale nie mówi o tym, czy mowa jest o książce Karola Dickensa, filmie Davida Leana, miniserialu, czy filmie Romana Polańskiego o tymże tytule. Utrudnia to wyszukiwarkom inteligentne wyświetlanie odpowiedniej zawartości. Słownik schema.org wraz z formatem mikrodanych pozwala na dodawanie pomocniczych informacji do zawartości HTML.

Jak oznaczać zawartość mikrodanymi

Strony internetowe zawierają treści o określonym znaczeniu rozumianym przez ludzi, ale trudnym do rozgryzienia przez wyszukiwarki internetowe. Uzupełnienie dodatkowych znaczników pomaga wyszukiwarkom i innym aplikacjom na lepsze zrozumienie zawartości, a co za tym idzie, wyświetlenie jej w użyteczny, odpowiedni dla typu danych sposób. Mikrodane to zestaw znaczników zapoczątkowanych w HTML5, które pozwalają osiągnąć ten cel.

Atrybut itemscope

Zacznijmy od przykładu. W serwisie mamy stronę o filmie „Oliver Twist” Romana Polańskiego z linkiem do zwiastuna, informacją o reżyserze i gatunku:.
Oliver Twist screen

Kod HTML może wyglądać następująco:

<div>
   <h1>Oliver Twist</h1>
   <span>Reżyser: Roman Polański (ur. 18 sierpnia 1933)</span>
   <span>Dramat</span>
   <a href="../filmy/oliver-twist-mov.html">Trailer</a>
</div>

W pierwszym kroku należy dodać element itemscope do znacznika HTML, który obejmuje informacje o obiekcie danego typu (w tym przypadku filmu), np. tak:

<div itemscope>
   <h1>Oliver Twist</h1>
   <span>Reżyser: Roman Polański (ur. 18 sierpnia 1933)</span>
   <span>Dramat</span>
   <a href="../filmy/oliver-twist-mov.html">Trailer</a>
</div>

Atrybut itemtype

Poprzez dodanie itemscope określone zostaje, że kod HTML zawarty w bloku <div> dotyczy konkretnego obiektu, jednak nie jest to do końca pomocne. Dlatego za pomocą atrybutu itemtype umieszczonym zaraz po itemscope wskazujemy typ obiektu:

<div itemscope itemtype="http://schema.org/Movie">
   <h1>Oliver Twist</h1>
   <span>Reżyser: Roman Polański (ur. 18 sierpnia 1933)</span>
   <span>Dramat</span>
   <a href="../filmy/oliver-twist-mov.html">Trailer</a>
</div>

Zawartość atrybutu określa, że obiekt umieszczony w elemencie div, jest filmem (typ Movie w hierarchii schema.org). Typy obiektów są wskazywane za pomocą adresów URL.

Atrybut itemprop

Obiekt posiada zazwyczaj wiele właściwości. Film jest charakteryzowany przez tytuł, reżysera, obsadę, gatunek, itd. W celu oznaczania właściwości obiektu wykorzystuje się atrybut itemprop:

<div itemscope itemtype="http://schema.org/Movie">
   <h1 itemprop="name">Oliver Twist</h1>
   <span>
       Reżyser:
       <span itemprop="director">Roman Polański</span>
       (ur. 18 sierpnia 1933)
   </span>
   <span itemprop="genre">Dramat</span>
   <a href="../filmy/oliver-twist-mov.html" itemprop="trailer">Trailer</a>
</div>

W atrybutach itemprop wskazano wybrane właściwości filmu określone w słowniku schema.org dla obiektu typu Movie. Aby wskazać prawidłowe nazwisko reżysera atrybutem itemprop="director", wstawiono dodatkowy znacznik <span>. Znaczniki span są w takiej sytuacji najwygodniejsze, ponieważ nie zmieniają sposobu wyświetlania strony przez przeglądarkę.

Dzięki zastosowaniu powyższych znaczników wyszukiwarka internetowa może dowiedzieć się, że pod adresem http://www.oliver-twist.film.pl znajduje się link do trailera filmu dramatycznego „Oliver Twist”, wyreżyserowanego przez Romana Polańskiego.

Elementy zagnieżdżone

Czasami wartość właściwości obiektu może być innym obiektem posiadającym własny zestaw właściwości. Na przykład można wskazać, że reżyser filmu jest obiektem typu Person o właściwościach name i birthDate. Aby wskazać, że wartością właściwości jest inny obiekt, należy wstawić element itemscope bezpośrednio po odpowiednim atrybucie itemprop:

<div itemscope itemtype="http://schema.org/Movie">
   <h1 itemprop="name">Oliver Twist</h1>
   <span itemprop="director" itemscope itemtype="http://schema.org/Person">
       Reżyser: <span itemprop="name">Roman Polański</span>
       (ur. <span itemprop="birthDate">18 sierpnia 1933</span>)
   </span>
   <span itemprop="genre">Dramat</span>
   <a href="../filmy/oliver-twist-mov.html" itemprop="trailer">Trailer</a>
</div>

Typy i właściwości schema.org

Schema.org opisuje szereg różnych typów obiektów (np. Book, Event, Organization, Place, Product, Review), z których każdy ma swój własny zestaw właściwości go opisujących. Serwis schema.org definiuje pełną listę typów obiektów rozpoznawanych przez wyszukiwarki Google, Bing i Yahoo!. Najwyżej w hierarchii znajduje się obiekt typu Thing posiadający 4 właściwości: name, description, url i image. Bardziej szczegółowe typy obiektów dziedziczą właściwości po swoich rodzicach (typach nadrzędnych).
Hierarchia schema.org

Oczekiwane typy, tekst i adresy URL

Dodając znaczniki schema.org do stron internetowych należy pamiętać o kilku wskazówkach:

  • Im więcej, tym lepiej, z wyjątkiem ukrytego tekstu. Ogólnie ma zastosowanie zasada, że im większa część treści zostanie oznaczona, tym lepiej. Jednak oznaczona powinna być jedynie zawartość widoczna dla użytkowników. Nie należy oznaczać zawartości w ukrytych elementach strony.
  • Oczekiwane typy zastępowane tekstem. Właściwości w schemacie schema.org mają zdefiniowany oczekiwany typ danych. Często oczekiwanym typem jest inny obiekt. Oznacza to, że wartością właściwości może być zagnieżdżony obiekt, ale nie jest to wymagane. W takich przypadkach wartością może być również tekst lub adres URL. Poprawne jest również zagnieżdżenie typu potomnego do oczekiwanego (np. jeśli oczekiwany jest obiekt typu Event, równie dobrze można osadzić element MusicEvent).
  • Korzystanie z właściwości url. Niektóre strony dotyczą pojedynczego obiektu, a inne mogą być zbiorem elementów. W przykładowej sytuacji kiedy witryna posiada stronę z listą autorów artykułów i linkami do ich stron profilowych, to profile autorów powinny zostać oznaczone z wykorzystaniem typu Person. Dodatkowo na stronie zbiorczej z linkami do profili autorów każdy element powinien być oznaczony jako obiekt typu Person ze wskazaniem właściwości url o wartości będącej adresem strony profilowej, np.:

    <div itemscope itemtype="http://schema.org/Person">
       <a href="jan-kowalski.html" itemprop="url">Jan Kowalski</a>
    </div>
    <div itemscope itemtype="http://schema.org/Person">
       <a href="adam-nowak.html" itemprop="url">Adam Nowak</a>
    </div>

Testowanie znaczników

Powinno się testować znaczniki schema.org, aby mieć pewność, że zostały zaimplementowane poprawnie. Google dostarcza narzędzie Rich Snippets Testing Tool, które można wykorzystać do testowania znaczników i identyfikowania ewentualnych błędów.

Dane zrozumiałe dla maszyn

Czasami właściwość obiektu jest trudna do zrozumienia przez maszyny bez dodatkowego ujednoznacznienia. W takich przypadkach podczas oznaczania stron należy dostarczać wersję informacji czytelną dla maszyn.

Data, godzina i czas trwania

Data i godzina mogą być podawane na wiele różnych, niejednoznacznych sposobów. W celu ujednoznacznienia należy korzystać ze znacznika time z atrybutem datetime. Wartość datetime powinna być datą w formacie RRRR-MM-DD:

<time datetime="2011-07-08">08/07/11</time>

Można także wskazać godzinę korzystając z formatu hh:mm lub hh:mm:ss. Czas może być dostarczony razem z datą po prefiksie T (od ang. time):

<time datetime="2011-07-08T11:30">8 Lipiec, 11:30</time>

W kontekście oznaczania wydarzenia może to wyglądać w następujący sposób:

<div itemscope itemtype="http://schema.org/Event">
   <div itemprop="name">Męskie Granie</div>
   <span itemprop="description">
       Niepokorni, przełamujący schematy i wyznaczający nową jakość.
   </span>
   Data koncertu:
   <time itemprop="startDate" datetime="2011-08-06T18:00">
       6 sierpnia, godz. 18:00
   </time>
</div>

Czas trwania może być określony w analogiczny sposób przez wykorzystanie znacznika time z atrybutem datetime i prefiksem P (od ang. period). W następujący sposób można wskazać, że film trwa półtorej godziny:


<time itemprop="duration" datetime="PT1H30M">90 min.</time>

H służy do wskazania liczby godzin a M liczby minut. Formaty daty, godziny i czasu trwania są określone w standardzie ISO 8601.

Wykorzystanie znacznika link z atrybutem href

Wyliczenia (enumeracje)

Niektóre właściwości przyjmują jedynie wartości z ograniczonego zestawu. Przykładowo sklep internetowy może wykorzystywać typ Offer do określania szczegółów oferty (produktu). Właściwość availability (dostępność) może przyjmować jedną z kilku wartości: W magazynie, Brak, Na zamówienie, itp. Dostępne wartości mogą być wskazywane adresami URL z wykorzystaniem znacznika link i atrybutu href:

<div itemscope itemtype="http://schema.org/Offer">
   <span itemprop="name">iPhone 4</span>
   <span itemprop="price">1749.00</span>
   <meta itemprop="priceCurrency" content="PLN" />
   <link itemprop="availability" href="http://schema.org/InStock"/>
   Dostępny
</div>

Schema.org dostarcza wyliczenia dozwolonych wartości dla kilku właściwości.

Odwołania kanoniczne

Standardowo linki są wskazywane przez element <a>, jak w poniższym przykładzie:

<q>Z kłamstwa robi się istotę porządku świata.</q>
<div itemscope itemtype="http://schema.org/Book">
   <span itemprop="name">Proces</span> -
   <span itemprop="author">Franz Kafka</span>
   <a itemprop="url" href="http://pl.wikipedia.org/wiki/Proces_(powieść)">
       "Proces" w Wikipedii
   </a>
</div>

Właściwość url może być wykorzystywana do wskazywania odnośnika do strony omawiającej ten sam obiekt w innym serwisie. Linki do innych witryn mogą pomagać wyszukiwarkom w lepszym zrozumieniu opisywanego obiektu.

Istnieją jednak sytuacje, w których nie chcemy dodawać widocznego linka do zewnętrznego serwisu. W takim przypadku można wykorzystać zamiennie element link, jak poniżej:

<q>Z kłamstwa robi się istotę porządku świata.</q>
<div itemscope itemtype="http://schema.org/Book">
   <span itemprop="name">Proces</span> -
   <link itemprop="url"
   href="http://pl.wikipedia.org/wiki/Proces_(powieść)" />

   <span itemprop="author">Franz Kafka</span>
</div>

Dodatkowe informacje w tagach meta

Czasami strona zawiera informacje, które są warte oznaczenia, ale jest to niemożliwe ze względu na sposób umieszczenia na stronie. Dane mogą być przekazane w obrazku (np. graficzna reprezentacja oceny obiektu), elemencie Flash (np. czas trwania filmiku) lub mogą być domyślne, ale nie zaznaczone wyraźnie na stronie (np. waluta ceny).

W takich przypadkach należy stosować znacznik meta z atrybutem content. Poniższy kod reprezentuje obrazek pokazujący ocenę użytkowników 4 na 5 gwiazdek:

<div itemscope itemtype="http://schema.org/Offer">
   <span itemprop="name">iPhone 4</span>
   <span itemprop="price">1749.00</span>
   <meta itemprop="priceCurrency" content="PLN" />
   <img src="4-gwiazdki.jpg" />
   123 głosy
</div>

Ten sam przykład z oznaczoną informacją o ocenie użytkowników będzie wyglądał w następujący sposób:

<div itemscope itemtype="http://schema.org/Offer">
   <span itemprop="name">iPhone 4</span>
   <span itemprop="price">1749.00</span>
   <meta itemprop="priceCurrency" content="PLN" />
   <div itemprop="reviews" itemscope
   itemtype="http://schema.org/AggregateRating">
       <img src="4-gwiazdki.jpg" />
       <meta itemprop="ratingValue" content="4" />
       <meta itemprop="bestRating" content="5" />
       <span itemprop="ratingCount">123</span> głosy
   </div>
</div>

Nie należy jednak nadużywać tego rozwiązania. Znacznik meta powinien być wykorzystywany jedynie dla informacji, które nie mogą być oznaczone w inny sposób.

W większości przypadków nie ma potrzeby rozszerzania słownika schema.org. Istnieje jednak możliwość określenia dodatkowych właściwości lub podtypów dla już istniejących typów obiektów. Ale o tym w następnym odcinku poradnika.

Kolejny rozdział poradnika

3. Przewodnik schema.org – zakres obiektów

 

Poprzedni rozdział poradnika

1. Przewodnik schema.org – wprowadzenie

 

Skomentuj artykuł:

Komentarze

  1. Mój podpis pisze:

    No to @Przemek się postarał, THX

  2. Przemek Sztal pisze:

    Dziękuję za słowa poparcia i zapraszam do czytania kolejnych wpisów :)

  3. erty pisze:

    Nie można w ten sposób podawać ceny
    1749 zł
    parametr price nie może być tekstem

  4. W przykładach faktycznie jest błąd, ale nie jest tak, że właściwość price nie może być tekstem. Według specyfikacji schema.org: Number or Text a narzędzie Rich Snippets Testing Tool rozpoznaje np. zapis: 100$. Aby zapis w złotówkach był poprawny, można podać jako walutę PLN lub zdefiniować ją w dodatkowym znaczniku
    <meta itemprop="priceCurrency" content="PLN" />.
    Zaraz poprawię to w przykładach z artykułu.

  5. Krakers pisze:

    Coś mi tu nie gra z tymi znacznikami.
    Walidator „validator.w3.org” wywala błędy, jak w poniższym linku.
    http://imageshack.us/a/img543/6388/3tui.jpg
    I tego typu błędów mam 27.
    Czy to możliwe, że serwis W3C nie uznaje tego? Czy raczej coś źle zrobiłem?
    Oczywiście skłaniam się ku tej drugiej opcji.

  6. @Krakers: Te atrybuty nie są zgodne ze specyfikacją XHTML, ale już w HTML5 są jak najbardziej poprawne. Nie przeszkadza to jednak w ich stosowaniu także w XHTML, chyba że dążysz do walidacji kodu dla zasady :-)

    Więcej szczegółów technicznych znajdziesz na przykład w tej dyskusji (EN): http://goo.gl/xNiO3A

  7. Krakers pisze:

    Dziękuję za odpowiedź.
    Oczywiście nie dążę do walidacji i zostawię tak, jak jest.

Loading Disqus Comments ...
Loading Facebook Comments ...