Ceny hoteli: włącz nawigację robota indeksującego i tagowanie cen

Z tego przewodnika dowiesz się, jak otagować witrynę za pomocą mikrodanych i atrybutów nawigacji, aby robot sprawdzający dokładność cen w Google mógł automatycznie poruszać się po ścieżce rezerwacji i weryfikować stawki za pokój.

Pełną specyfikację techniczną wszystkich dostępnych właściwości danych strukturalnych (w tym wyszczególnionych podatków, opłat i szczegółów pokoju) znajdziesz w artykule Dane strukturalne dotyczące cen hoteli.


Użyj niestandardowych atrybutów HTML data-nav-*, aby oznaczyć elementy interaktywne i zadeklarować etapy ścieżki, dzięki czemu robot będzie mógł poruszać się po ścieżce rezerwacji.

1.1 Deklaracja etapu na początku strony (data-nav-stage)

Każda strona w ścieżce rezerwacji, na której wyświetlają się ceny, powinna deklarować swój etap. Deklaracja powinna być dołączona do tagu <body> lub głównego tagu kontenera (np. <div>, <section>, lub <main>). Dzięki temu robot wie, który etap ścieżki rezerwacji jest aktywny, co ułatwia rozwiązywanie problemów w przyszłości.

  • data-nav-stage (zalecane): deklaruje aktywny etap ścieżki. Chociaż nie jest to bezwzględnie wymagane, określenie nazw (np. "landing", "room-selection", "checkout", "ready-for-payment") pomaga zidentyfikować aktywny etap podczas sprawdzania poprawności.

1.2 Wskaźnik etapu końcowego (data-nav-stage-final)

Na ostatniej stronie, na której wyświetlają się ceny przed wprowadzeniem danych osobowych lub płatności przez użytkownika, dodaj flagę etapu końcowego do kontenera na początku strony wraz z deklaracją etapu (np. data-nav-stage="ready-for-payment").

  • data-nav-stage-final (opcjonalne): ustaw wartość "true" (data-nav-stage-final="true") na ostatniej stronie z ceną przed płatnością. Informuje to robota, że ta strona jest ostatnią i można z niej wyodrębnić cenę na potrzeby weryfikacji. Ta strona musi zawierać strukturę cen z tagami mikrodanych.

1.3 Atrybuty interakcji na ścieżce krytycznej

Na stronach pośrednich otaguj elementy interaktywne (przyciski lub linki), które przenoszą użytkownika na ścieżkę krytyczną rezerwacji. Jeśli na tej samej stronie wymaganych jest kilka działań, określ kolejność ich wykonywania. Robot będzie postępował zgodnie z określoną kolejnością, zanim spróbuje wyodrębnić cenę na ostatniej stronie.

Atrybut Wymagana wartość Cel
data-nav-criticalpath "true" Oznacza obowiązkowy przycisk lub link, który robot musi kliknąć, aby przejść dalej.
data-nav-interactiontype "CLICK" Deklaruje, że do przejścia dalej wymagane jest kliknięcie.
data-nav-interactionorder "1", "2", ... Deklaruje kolejność wykonywania działań, jeśli na tej samej stronie wymaganych jest kilka działań.

Minimalny przykład nawigacji

<button data-nav-criticalpath="true"
        data-nav-interactiontype="CLICK"
        data-nav-interactionorder="1">
  Continue
</button>

2. Deklaracja ceny (mikrodane)

Na ostatniej dostępnej stronie ścieżki rezerwacji (przed wprowadzeniem danych osobowych lub płatności) otaguj ofertę cenową (jedną ofertę cenową) za pomocą tagów mikrodanych. Na stronie powinien być otagowany tylko 1 produkt, który wskazuje, jaką cenę ma wyodrębnić robot. Cena ta powinna odpowiadać cenie wybranej w Google, zanim użytkownik trafi na Twoją stronę. Więcej informacji o definiowaniu parametrów strony docelowej znajdziesz w sekcji Zobacz Zmienne i warunki.

Google w pełni obsługuje całą hierarchię w artykule Dane strukturalne dotyczące cen hoteli (w tym wyszczególnione stawki podstawowe, poszczególne podatki, opłaty i szczegóły pokoju), ale akceptuje też uproszczone drzewo danych strukturalnych , aby ułatwić Ci oznaczanie cen hoteli na stronach internetowych.

Łączna cena pobytu jest obowiązkowa w przypadku dostępnych cen. Jeśli plan podróży lub pokój jest niedostępny lub wyprzedany, zadeklaruj https://schema.org/SoldOut w sekcji makesOffer bez priceSpecification:

<div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer">
  <meta itemprop="availability" content="https://schema.org/SoldOut"/>
  Sold Out
</div>

Więcej informacji znajdziesz w availability specyfikacji właściwości.

2.1 Uproszczone drzewo danych strukturalnych

Aby uprościć oznaczanie na stronach rezerwacji, musisz tylko zadeklarować główny kontener hotelu i rezerwacji, daty pobytu (YYYY-MM-DD), liczbę osób i jedną ofertę zawierającą łączną cenę pobytu:

Hotel / LodgingReservation (Root Container)
├── identifier                   [Meta/Attribute] Hotel ID
├── name                         [Visible text] Hotel Name
├── checkinTime / checkoutTime   [Visible text with YYYY-MM-DD in content="..."] Stay Dates
├── numAdults / numChildren      [Visible text] Occupancy
└── makesOffer (Offer)
    └── priceSpecification (CompoundPriceSpecification)
        ├── priceCurrency        [ISO Code, such as "USD"] Currency
        └── price                [Visible text] Total Stay Price (Taxes & Fees Included)

2.2 Krytyczne reguły widoczności

Aby zapewnić niezawodne wyodrębnianie cen, podczas oznaczania kodu HTML przestrzegaj tych reguł widoczności:

  • Łączna cena pobytu musi być widoczna: otaguj widoczną cenę bezpośrednio na stronie za pomocą itemprop="price". Nie używaj ukrytych metadanych (<meta>) ani wartości atrybutów (value="..." lub content="...") dla ceny.
  • Daty pobytu czytelne dla maszyn: otaguj widoczne daty pobytu na stronie w jak największym stopniu. W razie potrzeby możesz użyć atrybutu content="..." w elementach <span>, aby podać standardowy format YYYY-MM-DD podczas wyświetlania widocznej daty (np. <span itemprop="checkinTime" content="2026-08-10">August 10, 2026</span>).
  • Pola niewidoczne: pola, które nie są wyświetlane bezpośrednio na stronie (np. identyfikator hotelu lub kod waluty), mogą używać tagów <meta> lub content="..." atrybutów.

3. Przykłady

Poniższe przykłady kompleksowe pokazują, jak otagować pośrednie etapy ścieżki i ostatnie strony płatności za pomocą atrybutów nawigacji i mikrodanych.

Przykład 1. Strona pośrednia z przyciskiem, który można kliknąć

Poniższy fragment kodu przedstawia pośrednią stronę wyboru pokoju (room-selection) z jednym przyciskiem polecenia na ścieżce krytycznej, który jest otagowany w celu przejścia dalej:

<body data-nav-stage="room-selection">
  <!-- Main page content -->
  <button class="btn-continue"
          data-nav-criticalpath="true"
          data-nav-interactiontype="CLICK"
          data-nav-interactionorder="1">
    Book This Room
  </button>
</body>

Przykład 2. Ostatnia strona z ceną ze wskaźnikiem etapu i minimalnymi mikrodanymi

Poniższy fragment kodu przedstawia ostatnią stronę przed płatnością (ready-for-payment), na której w kontenerze zadeklarowano data-nav-stage-final="true", a cena pobytu jest widoczna:

<body data-nav-stage="ready-for-payment" data-nav-stage-final="true">

  <!-- Root Container: Co-Typed Hotel & LodgingReservation -->
  <div itemscope itemtype="https://schema.org/Hotel https://schema.org/LodgingReservation">
    
    <!-- Hotel Identifier (Can be hidden meta tag) -->
    <meta itemprop="identifier" content="grand-view-001" />
    <h1 itemprop="name">Grand View Hotel</h1>
    
    <!-- Visible Stay Dates & Occupancy -->
    <p>
      Check-in: <span itemprop="checkinTime" content="2026-08-10">Aug 10, 2026</span> |
      Check-out: <span itemprop="checkoutTime" content="2026-08-15">Aug 15, 2026</span> |
      Guests: <span itemprop="numAdults">2</span> Adults, <span itemprop="numChildren">1</span> Child
    </p>

    <!-- Single Minimal Rate Offer -->
    <div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer">
      <div itemprop="priceSpecification" itemscope itemtype="https://schema.org/CompoundPriceSpecification">
        
        <p class="summary-total">
          Total Stay Price (Taxes & Fees Included):
          
          <!-- 3-letter ISO Currency Code (can use content="" for hiding the 3-letter currency code while displaying a symbol) -->
          <span itemprop="priceCurrency" content="EUR">€</span>
          
          <!-- VISIBLE TOTAL STAY PRICE (Directly wrapped, no hidden attributes) -->
          <span itemprop="price">650.00</span>
        </p>

      </div>
    </div>

  </div>

</body>

4. Sprawdzanie poprawności implementacji

Zanim wdrożysz zmiany, przetestuj tagi znaczników i nawigacji, aby upewnić się, że robot może prawidłowo sprawdzić dane o cenach.

4.1 Sprawdzanie struktury ceny i mikrodanych

Aby sprawdzić mikrodane wyodrębnione z adresu URL strony lub treści HTML, możesz użyć narzędzia do sprawdzania schematów Schema.org lub testu wyników z elementami rozszerzonymi Google. Sprawdź wyodrębnione pola z specyfikacją w artykule Dane strukturalne dotyczące cen hoteli, i upewnij się, że element itemprop="price" jest widoczny na stronie.

4.2 Sprawdzanie nawigacji

Aby sprawdzić tagi, otwórz Narzędzia dla programistów w przeglądarce w Google Chrome. Kliknij prawym przyciskiem myszy stronę i wybierz Zbadaj (lub naciśnij F12), aby sprawdzić kod HTML DOM.

Upewnij się, że implementacja spełnia te wymagania dotyczące nawigacji:

  • Zadeklarowano etap na początku strony: każda strona w ścieżce rezerwacji zawiera data-nav-stage="..." w tagu <body> lub głównym tagu kontenera, a ostatnia strona z ceną zawiera data-nav-stage-final="true".
  • Ścieżka krytyczna jest kompletna: strony pośrednie mają elementy interaktywne (przyciski lub linki) oznaczone za pomocą data-nav-criticalpath="true", data-nav-interactiontype i data-nav-interactionorder. Jeśli występuje kilka działań, upewnij się, że numery kolejności są prawidłowo ustawione.

4.3 Sprawdzanie widoczności i jakości znaczników

Upewnij się, że mikrodane spełniają wszystkie wymagania dotyczące struktury i widoczności (szczegółowe informacje znajdziesz w sekcjach Uproszczone drzewo danych strukturalnych i Krytyczne reguły widoczności):

  • Ścisła hierarchia: upewnij się, że znaczniki są zgodne z wymaganą kolejnością zagnieżdżenia (uproszczone drzewo lub pełna specyfikacja danych strukturalnych ). Elementy w nieprawidłowej kolejności lub nieprawidłowo zagnieżdżone mogą zostać pominięte przez robota.
  • Widoczna cena: itemprop="price" bezpośrednio otacza widoczną cenę bez ukrytych atrybutów ani tagów <meta>.
  • Daty pobytu czytelne dla maszyn: checkinTime i checkoutTime zawierają standardowy format YYYY-MM-DD (opcjonalnie z atrybutami content="...").
  • Bezpośrednie oznaczanie elementów: wszystkie widoczne właściwości (nazwa hotelu, daty pobytu, liczba osób) otaczają widoczny tekst na stronie.