このガイドでは、Google の料金の精度 クローラが予約ファネルを自動的に移動して客室料金を検証できるように、microdata と ナビゲーション属性を使用してウェブサイトにタグを設定する方法について説明します。
利用可能なすべての構造化データ プロパティ(税金、手数料、客室の詳細の内訳など)の完全な技術仕様については、 ホテル料金の構造化データのリファレンスをご覧ください。
1. ナビゲーションの実装(data-nav-*)
カスタムの data-nav-* HTML 属性を使用してインタラクティブな要素にアノテーションを付け、ファネルのステージを宣言することで、クローラが予約フローをたどれるようにします。
1.1 ページ上部のステージ宣言(data-nav-stage)
料金を表示する予約ファネルのすべてのページで、
ステージを<body> タグまたはプライマリ ラッパータグ(
<div>、<section>、<main>
など)にアタッチして宣言する必要があります。これにより、クローラは
予約フローのどのステージがアクティブであるかを把握し、後で問題のトラブルシューティングを行う際に役立ちます。
data-nav-stage(推奨): アクティブなファネル ステージを宣言します。厳密には必須ではありませんが、名前("landing","room-selection","checkout","ready-for-payment"など)を指定すると、検証中にアクティブなステージを特定しやすくなります。
1.2 最終ステージ インジケーター(data-nav-stage-final)
ユーザーの個人情報またはお支払い情報の入力前の料金を表示する最終ページで、ステージ宣言(たとえば、data-nav-stage="ready-for-payment")とともに、ページ上部のコンテナに最終ステージ フラグを追加します。
data-nav-stage-final(省略可): お支払い前の最終料金ページで"true"(data-nav-stage-final="true")に設定します。 これにより、クローラにこのページが最終ページであることを示し、検証のために料金を抽出できます。このページには、microdata タグを使用した料金構造が含まれている必要があります。
1.3 クリティカル パス インタラクション属性
中間ページで、予約のクリティカル パスに沿ってユーザーを進めるインタラクティブな要素(ボタンまたはリンク)にタグを設定します。同じページで複数の操作が必要な場合は、実行順序を指定します。クローラは、指定された順序に従ってから、最終ページで料金の抽出を試みます。
| 属性 | 必要な値 | 目的 |
|---|---|---|
data-nav-criticalpath |
"true" |
クローラが次に進むためにクリックする必要がある必須のボタン/リンクをマークします。 |
data-nav-interactiontype |
"CLICK" |
フローを進めるにはクリック操作が必要であることを宣言します。 |
data-nav-interactionorder |
"1", "2", ... |
同じページで複数の操作が必要な場合の実行順序を宣言します。 |
最小限のナビゲーションの例
<button data-nav-criticalpath="true"
data-nav-interactiontype="CLICK"
data-nav-interactionorder="1">
Continue
</button>
2. 料金の宣言(microdata)
予約ファネルの最終的なアクセス可能なページ(個人情報またはお支払い情報の入力前)で、microdata タグを使用して料金のオファー(1 つの料金オファー)にタグを設定します。ページにタグを設定するオファーは 1 つだけにする必要があります。これにより、ユーザーがウェブサイトにアクセスする前に Google で選択した料金に対応する料金をクローラが抽出できます。ランディング ページのパラメータの定義について詳しくは、 変数と条件をご覧ください。
Google は、 ホテル料金の構造化データのリファレンス で定義されている完全な階層(基本料金、個別の税金、手数料、客室の詳細の内訳など)を完全にサポートしていますが、 ウェブページでホテル料金にタグを設定しやすくするために、簡略化された構造化データツリーも受け入れています。
利用可能な料金には、合計宿泊料金が必須です。旅行プランまたは客室が利用できないか完売している場合は、priceSpecification
なしで makesOffer の下に https://schema.org/SoldOut を宣言します。
<div itemprop="makesOffer" itemscope itemtype="https://schema.org/Offer">
<meta itemprop="availability" content="https://schema.org/SoldOut"/>
Sold Out
</div>
詳しくは、
availability プロパティ
の仕様をご覧ください。
2.1 簡略化された構造化データツリー
予約ページでのタグ設定を簡素化するには、ルートのホテルと予約コンテナ、宿泊日(YYYY-MM-DD)、宿泊人数、合計宿泊料金を含む 1
つのオファーを宣言するだけで済みます。
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 重要な可視性ルール
料金を確実に抽出するには、HTML にタグを設定する際に次の可視性ルールに従ってください。
- 合計宿泊料金が表示されている必要がある: 表示されている料金の数に直接タグを設定します
ページで
itemprop="price"を使用します。料金の数に非表示のメタデータ(<meta>) や属性値(value="..."またはcontent="...")を使用しないでください。 - 機械で読み取り可能な宿泊日: ページに表示されている宿泊日にできるだけタグを設定します。必要に応じて、
content="..."属性を<span>要素で使用して、表示される日付を表示しながら標準のYYYY-MM-DD形式を指定できます(例:<span itemprop="checkinTime" content="2026-08-10">August 10, 2026</span>)。 - 非表示のフィールド: ページに直接表示されないフィールド
(ホテル ID や通貨コードなど)には、
<meta>タグまたはcontent="..."属性を使用できます。
3. 例
次のエンドツーエンドの例では、ナビゲーション属性と microdata を使用して、ファネルの中間ステップと最終的なチェックアウト ページにタグを設定する方法を示します。
例 1: クリック可能なボタンがある中間ページ
次のスニペットは、フローを進めるためにタグ付けされた 1 つのクリティカル パス 操作ボタンを含む中間的な客室選択ページ(room-selection)を示しています。
<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>
例 2: ステージ インジケーターと最小限の microdata を含む最終料金ページ
次のスニペットは、お支払い前の最後のページ
(ready-for-payment)を示しています。ここでは、ラッパーでdata-nav-stage-final="true"が宣言され、信頼できる宿泊料金が明確に表示されています。
<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. 実装を検証する
変更をデプロイする前に、マークアップとナビゲーションのタグ設定をテストして、クローラが料金データを正常に検証できることを確認してください。
4.1 料金と microdata の構造を検証する
Schema.org Validator
または
Google リッチリザルト テスト
を使用して、ページの URL または HTML コンテンツから抽出された microdata を検査できます。抽出されたフィールドを
ホテル料金の構造化データのリファレンスの仕様と照らし合わせて確認し、
itemprop="price"要素がページ上の表示項目であることを確認します。
4.2 ナビゲーションを検証する
タグを検証するには、Google Chrome でブラウザ デベロッパー ツール を開き、ウェブページを右クリックして [検証]
を選択(または F12 キーを押して)して、HTML DOM を調べます。
実装が次のナビゲーション要件を満たしていることを確認します。
- ページ上部のステージが宣言されている: 予約フローのすべてのページで
`<body>` タグまたはルート ラッパータグに
data-nav-stage="..."が含まれており、<body>最終料金ページにdata-nav-stage-final="true"が含まれています。 - クリティカル パスが完了している: 中間ページでは、インタラクティブな
要素(ボタンまたはリンク)に
data-nav-criticalpath="true"、data-nav-interactiontype、data-nav-interactionorderが設定されています。複数の操作がある場合は、注文番号が正しく設定されていることを確認してください。
4.3 可視性とマークアップの品質を検証する
microdata が構造と可視性のすべての要件を満たしていることを確認します (詳しくは、簡略化された構造化データツリーと 重要な可視性ルールをご覧ください)。
- 厳格な階層: マークアップが、必要なネスト順序 (簡略化されたツリーまたは完全な 構造化データ リファレンス 仕様)に従っていることを確認します。順序が間違っている要素や、適切にネストされていない要素は、クローラによって見逃される可能性があります。
- 表示される料金:
itemprop="price"は、表示されている料金の 数を非表示の属性や<meta>タグなしで直接ラップします。 - 機械で読み取り可能な宿泊日:
checkinTimeとcheckoutTimeには 標準のYYYY-MM-DDが含まれています(必要に応じてcontent="..."属性を使用します)。 - 直接的な要素のタグ設定: 表示されているすべてのプロパティ(ホテル名、宿泊日、宿泊人数)は、表示されているページテキストをラップします。