21.

HTML data要素 完全ガイド(機械可読な値を value 属性で持たせる / time との違い)

編集
この記事の要点
  • data 要素はテキストに機械可読な値を関連付けるインライン要素
  • 構文: <data value="機械向けの値">人間向けの表示</data>
  • 商品 ID・型番・スコア・在庫数など「画面表示と内部値が違う」ケースに使う
  • 日時専用なら time 要素を使う — data は日時以外
  • JavaScript からは element.value または element.getAttribute("value") で取り出せる
  • 微小だが意味のある要素 — SEO のマイクロフォーマットやスクレイピング対策にも有効

data 要素とは

data 要素は、HTML5 で追加されたインライン要素で、テキスト(人間向けの表示)に機械可読な値を関連付けるためのものです。value 属性に内部値、要素内容に表示テキストを書きます。

基本構文

<data value="機械向けの値">人間向けの表示</data>

典型的なユースケース

1. 商品 ID と表示名

<p>
  本日のおすすめ:
  <data value="SKU-12345">プレミアム コーヒー豆 200g</data>
</p>

表示は「プレミアム コーヒー豆 200g」だが、JavaScript からは SKU-12345 が取り出せます。

2. 数値とフォーマット表示

<p>
  在庫: <data value="3142">3,142 個</data>
</p>
<p>
  獲得スコア: <data value="0.875">87.5%</data>
</p>

カンマ区切りやパーセント表示は人間向け、計算用には数値そのものが使えます。

3. 列挙値の人間化

<p>
  ステータス: <data value="published">公開中</data>
</p>
<p>
  優先度: <data value="3">高</data>
</p>

JavaScript からの値取得

// HTMLDataElement.value で取得
const el = document.querySelector('data');
console.log(el.value);          // "SKU-12345"
console.log(el.textContent);    // "プレミアム コーヒー豆 200g"

// 全 data 要素の値を一括取得
const skus = [...document.querySelectorAll('data')].map(d => ({
  display: d.textContent.trim(),
  value:   d.value,
}));

time 要素との使い分け

要素用途属性
data日時 以外 の機械可読値value商品 ID / 数量 / 列挙
time日時専用datetime2026-06-11T14:30+09:00

日時の場合は time 要素のほうがセマンティックがより正確です。検索エンジンやカレンダー連携も time の方が認識しやすい。

カスタムデータ属性 (data-*) との違い

方法用途
<data> 要素<data value="100">100点</data>「表示と機械値のペア」が要素自体の意味
data-* 属性<li data-id="42">...</li>任意の要素に補助情報を付加

data 要素は「表示テキストとそれに対応する機械値」を意味的に結びつけるための要素。data-* 属性は要素の補助情報を任意に持たせるため。役割は異なります。

マイクロフォーマット・構造化データとの連携

<!-- Microdata schema.org と組み合わせる -->
<div itemscope itemtype="https://schema.org/Product">
  <h1 itemprop="name">プレミアム コーヒー豆</h1>

  <p>
    SKU:
    <data itemprop="sku" value="COFFEE-001">COFFEE-001</data>
  </p>

  <p>
    在庫:
    <data itemprop="inventoryLevel" value="42">42 個</data>
  </p>
</div>

itemprop + data + value の組み合わせで、検索エンジンが理解できる構造化データを提供できます。

data 要素を使うべき場面を見極める

data 要素は HTML5 で追加されたものの、実務での認知度はそれほど高くなく、多くの開発者が data-* カスタム属性で代用しています。しかし両者には明確な役割の違いがあり、「表示テキストと、それに対応する機械可読な値が、ともに重要な意味を持つ」場面では data 要素のほうが意味的に正確です。たとえば商品カードに表示される SKU や、ランキングのスコア、ECサイトの在庫数のように、見た目と内部値の両方を保持したいケースが典型例です。

逆に、要素そのものは見出しや本文として独立した意味を持ち、補足的に ID やデータ属性を持たせたいだけなら data-* カスタム属性のほうが軽量です。data 要素は「これは値である」という宣言そのものに意味があるため、構造化データやマイクロフォーマット、JavaScript からの値取得を頻繁に行う UI 部品で価値を発揮します。

data 要素と構造化データの相乗効果

近年、Google や他の検索エンジンはページの構造化データを積極的に解析し、検索結果に商品情報・レビュー評価・在庫状況などのリッチリザルトを表示するようになりました。schema.org の語彙と data 要素を組み合わせると、人間が読むテキストと検索エンジンが読む機械値を同じ HTML の中で両立できるため、メンテナンスコストが大幅に下がります。

たとえば商品ページで「在庫: 残り 3 個」という表示は、人間にはわかりやすい日本語ですが、検索エンジンにとっては「3」という数値だけを認識したいケースです。data 要素なら <data value="3">残り 3 個</data> と書くことで、HTML をひとつだけ持たせれば両方の要求を満たせます。これは JSON-LD で別途構造化データを書く方式と比べて、表示と機械値の整合性が保証される大きな利点です。

data 要素を業務システムで使うアイデア

業務系の Web アプリケーションでは、画面に表示される値の裏側に内部コードや管理 ID を保持する必要が頻繁にあります。たとえば顧客マスタの一覧では「東京都品川区」と表示しつつ、内部的には「13109」のような市区町村コードを扱う、といったケースです。これらを data-* 属性で持たせる方法も主流ですが、data 要素を使えばセマンティックな構造を保ったまま記述でき、テストや UI 自動化ツールからも認識しやすくなります。

また、JavaScript フレームワーク(Vue.js や React など)と組み合わせる場合も data 要素は便利です。テンプレートに <data :value="item.code">{{ item.label }}</data> のように書くことで、表示用テキストと機械値が常にペアで管理され、リスト操作やイベントハンドラからのアクセスが直感的になります。実装パターンを整理しておくと、開発チームのコードレビュー時の議論もスムーズになり、機能拡張時の認知コストも下がります。

特にレポート系のダッシュボード UI では、画面上に「売上 1,234,567 円」「達成率 87.5%」のような表示と、グラフ描画に必要な生数値の両方を持ちたい要件が出てきます。data 要素を使えば、表示部分は人間向け、value 属性は機械可読、と一箇所のマークアップに集約でき、別の場所で同じ値を二重管理する事故を減らせます。データ可視化のフロントエンド開発でも、地味ながら効果的な選択肢です。

data 要素を使う際の落とし穴とその回避

data 要素は便利ですが、運用上いくつかの注意点があります。まずvalue 属性の値は文字列として扱われるため、JavaScript で取り出した値は数値が必要な場合には Number()parseInt() で変換する必要があります。これを忘れると文字列同士の比較や連結になって、想定外の結果を招くことがあります。テストコードで型まで確認する習慣をつけておくと安心です。

また、data 要素はインライン要素なので、ブロックレベルの装飾を直接当てると思った通りに動かないことがあります。テーブル内のセルやフレックスアイテムとして扱いたい場合は、外側に divtd を挟んでから data 要素を内側に置くなど、レイアウト的な工夫が必要になります。data 要素の意味は「値を運ぶ」ことであり、レイアウト責任は持たないと割り切ったほうがクリーンな設計になります。基本に忠実に使う限り、data 要素は HTML の表現力を確実に底上げしてくれる小さな良いツールです。

CSS でスタイリング

/* data 要素は既定では装飾なし。必要なら属性セレクタで */
data {
  font-variant-numeric: tabular-nums;  /* 等幅数字 */
}

/* 在庫切れを赤色に */
data[value="0"] {
  color: #e74c3c;
  font-weight: bold;
}

ブラウザサポート

主要モダンブラウザは全て対応 (Chrome / Edge / Firefox / Safari)。HTMLDataElement インターフェースを実装しているので JS から el.value で型安全にアクセスできます。

FAQ

Q: span に data-* 属性でいいのでは?
A: data-* で十分なケースも多いですが、「表示と機械値が両方主役」の文脈では data 要素のほうが意味的に正確。スクレイピングや検索エンジンへの伝達力も上。

Q: data 要素は SEO に効く?
A: 直接の SEO ブーストはありません。しかし schema.org と組み合わせればリッチリザルトに貢献できます。

Q: value 属性は必須?
A: はい、必須です (HTML5 仕様)。省略するとブラウザは要素として描画はしますが、意味的には無効。

Q: input の value とは違う?
A: 別物。input の value は編集可能なフォーム値、data の value は読み取り専用の機械可読値

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. h1~h6要素
  2. p要素
  3. blockquote要素
  4. q要素
  5. cite要素
  6. ins要素
  7. del要素
  8. HTML em 要素(強調)の使い方と strong との違い
  9. br要素
  10. abbr要素
  11. dfn要素
  12. pre要素で整形済みテキストを表示する
  13. code要素
  14. samp要素
  15. kbd要素
  16. var要素
  17. bdo要素
  18. sup要素で上付き文字を表示する
  19. sub要素
  20. mark要素
  21. data要素
  22. time要素
  23. wbr要素
  24. bdi要素

最近更新/作成されたページ