HTML5(エイチティーエムエル・ファイブ)は、World Wide Web Consortium(W3C)がかつて策定していたHyperText Markup Languageの5回目に当たる大幅な改定版であり、2021年1月28日に廃止された。
現在はHTML Living Standardによって置き換えられている。

Web Hypertext Application Technology Working Group(WHATWG)によって2004年に定められたWeb Applications 1.0にWeb Forms 2.0を取り入れたものをベースとしている。W3Cの専門委員会により2008年1月22日にドラフト(草案)が発表され、2014年10月28日に HTML5 が勧告され、2016年11月1日に HTML 5.1 が、2017年12月14日に HTML 5.2 が勧告されたのち、2021年1月28日に廃止された。WHATWGによって策定されているHTML Living Standardが有効な後継規格として案内されている。

改訂の主要目的のひとつとして、人間にも読解可能で、尚且つ、コンピュータやデバイス(ウェブブラウザ、構文解析器など)にも矛盾せず読解されるとともに最新のマルチメディアをサポートする言語に向上することである。HTML5ではHTMLだけでなくXHTML、DOMのHTML関係の部分、ECMAScriptのAPIも追加になっている。

表記は、「HTML 5.1」のようにバージョン表記で小数点以下を含める場合はHTMLと5.1の間にスペースを入れ、「HTML5」のように小数点以下を含めない場合はHTMLと5の間にスペースを含めない表記法が採用されている。過去のバージョンについても、「HTML4」や「HTML 4.0」という表記法が使われている。

## 概要

HTML5は、プロプライエタリなプラグインとして提供されているリッチインターネットアプリケーションのプラットフォームを置き換えることを標榜しており、ウェブアプリケーションのプラットフォームとしての機能やマルチメディア要素が実装されている。このため、Adobe Flashなどはサービスを終了することとなった(後述)。

2008年以降に発表されたウェブブラウザの多くはHTML5に対応している。Google Chrome 3.0以降、Safari 3.1以降、Firefox 3.5以降、Opera 10.5、Internet Explorer 9などであり主に`audio`要素・`video`要素・`canvas`要素への対応が優先して行われた。またWebSocketなど、当初HTML5の一部とされていたものの切り離され別の規格として策定作業が進められているものがある。

### 広義のHTML5

厳密には別仕様書として分離されているものの、一般的には、ウェブストレージ・WebSocket・Geolocation API・XMLHttpRequest Level 2などもHTML5に含める場合が多い。

W3CのHTML5 Logoでは以下のカテゴリをHTML5に含めている。

- セマンティックス - HTML5の新タグ、RDFa、マイクロデータ、マイクロフォーマット
- オフラインとストレージ - App Cache、Web Storage、Indexed Database API、HTML5ファイルAPI
- デバイスアクセス - Geolocation API、マイク・カメラ、アドレス帳・カレンダー、端末の向き
- 接続性 - WebSocket、サーバー送信イベント (SSE)
- マルチメディア - `audio`要素、`video`要素
- 3D、グラフィックス、エフェクト - SVG、`canvas`要素、WebGL、CSS3 3D
- パフォーマンスと統合 - Web Worker、XMLHttpRequest Level 2
- CSS3 - Webフォントも含む

### W3C

| 規格 | 初版草案 | 最終草案 | 勧告候補 | 勧告案 | 勧告 |
| --- | --- | --- | --- | --- | --- |
| HTML 5.0 | 2008年1月22日 | 2011年5月25日 | 2014年6月17日 | 2014年9月16日 | 2014年10月28日 |
| HTML 5.1 | 2012年12月17日 | 2016年6月2日 | 2016年6月21日 | 2016年9月15日 | 2016年11月1日 |
| HTML 5.1 2nd Edition | 2016年11月1日 | 2017年6月20日 | 2017年8月3日 | 2017年10月3日 |
| HTML 5.2 | 2016年8月18日 | 2017年7月18日 | 2017年8月8日 | 2017年11月02日 | 2017年12月14日 |
| HTML 5.3 | 2017年12月14日 |  |  |  |

### HTML Living Standard

HTML Living Standardは、WHATWGが策定しているHTMLの規格である。W3Cの勧告するHTML5およびそれ以降(HTML 5.1など)は、HTML Living Standardを基にしている。

ただし、2019年5月28日に発表されたW3CとWHATWGの合意以前においては、「W3C側で変更がなされており、両者の仕様には差異が生じている」という状況が続いていた。WHATWGはウェブブラウザの開発元により結成されており、この頃においてはHTML Living Standardの方がよく参照されていた。

2019年5月28日、W3CとWHATWGは、「HTML Living StandardをHTMLとDOMの唯一の標準とし、W3Cは今後HTMLとDOMに関する標準の策定を行わない」旨合意したことを発表した。以降はHTML Living Standardが唯一の標準規格となり、ある時点におけるHTML Living StandardのレビュードラフトがそのままW3Cの勧告候補や勧告となる。2021年1月28日、WHATWGにあるHTML Review DraftがW3Cによって勧告されたことによってHTML5は廃止された。このため、2021年5月現在、有効なHTMLの標準規格はHTML Living Standardとなっている。

## 技術仕様

### エンコーディング

文書の文字コードにはUTF-8を推奨している。文書の文字コードの指定は、`meta`要素における`charset`属性で指定する。これとHTTPレスポンスヘッダーの`content-type`でエンコード宣言が省略された場合はUTF-8が既定となる。また`charset`属性を含めた`meta`要素は文章先頭から1024バイト以内に記載する必要がある。

### 文書の構造

従来のHTMLやXHTML規格は、仕様に書かれた文書構造のルールだけではなく、妥当性検証のためのDTDを提供していた。一方、HTML5仕様ではスキーマは提供されない。文書構造のために提供されるのはHTML5仕様に列挙されている各種ルールのみである。

### 従来のHTMLとの文法の差異

HTML5仕様は以下のふたつの構文を採用している。

- HTML5仕様書の中で定義されるHTML構文 → 狭義のHTML5
- HTML5仕様書からXMLおよびその関連仕様を参照して定めているXML構文

一方、従来のHTML仕様はSGMLをその構文に採用している。SGMLおよびその関連仕様を参照しており、規格ごとに以下のような差異もある。

- SGML規格本体のみを参照しているもの → HTML 4.0以前
- SGML規格本体および付属書J、付属書Kを参照しているもの → HTML 4.01や、ISO/IEC 15445など

主にこのような違いのために、HTML5と従来のHTMLとの間には基本的な文法の差異が多い。以下にその代表的な例を挙げる。

#### SGML宣言

SGMLを採用していた従来のHTML規格においては、HTML文書は本質的にSGML文書であったため、HTML規格がそれぞれ提供するSGML宣言を文書の先頭に記述することが仕様上許されていた。一方HTML5の仕様では、HTML構文、XML構文のいずれを用いた場合でも、文書中にSGML宣言を記述することは許されていない。

#### 文書型宣言およびDTDの扱い

HTML5仕様においては、文書型宣言はもはやモード指定以外の意味をなさず、その書式は “`<!DOCTYPE html>`” である。

HTML構文では文書型宣言は必須である。XML構文では、HTML5で導入される新しい機能を利用する場合は必須、それ以外の場合は文書型宣言は必須ではない。

従来のHTML規格で提供されていたDTDがなくなり、また文書型宣言の書式が決まっているため、HTML5ではDTDが利用できず、DTDに依存する多くの機能のほとんどが扱えなくなる。例としては、HTML4以前に扱えていた文字実体参照のほとんどがHTML5では扱えなくなる(XMLは文書内部にDTDを書くこともできるが、上記の文書型宣言の決まりを無視する結果となるため、HTML5の仕様の範疇ではない)。

#### 処理命令

SGMLを採用していた従来のHTML規格では、文書内に処理命令を記述することができた。実際に用いられている例として、DTDを他の処理系で利用するための「architectural support declaration」が存在する (ISO/IEC 15445)。

一方、HTML5仕様におけるHTML構文ではSGMLの処理命令は記述できず、同様の機能も利用できない。XML構文であればXMLの処理命令は書ける。

#### マーク区間

SGMLを採用していた従来のHTML規格では、マーク区間 (marked section) と呼ばれる仕組みが利用できた。以下に例を挙げる。

上に挙げた例のうち、HTML5仕様で利用できるのはCDATAセクションのみである。

#### コメントと注釈宣言

SGMLのコメントは「`-- コメント文 --`」という形を取り、マーク宣言中の空白文字の出現が許されている場所に任意の回数書くことができる。したがって従来のHTMLでは文書型宣言の中などでもコメントを挿入することが可能で、例えばISO/IEC 15445の文書型宣言は

のようにも書ける。一方、HTML5の文書型宣言にはコメントを挿入することはできない。

また、注釈宣言の扱いも従来のHTMLとHTML5では異なる。SGMLを採用していた従来のHTMLでは注釈宣言の中に任意の回数コメントを書くことができるが、HTML5ではHTML構文でもXML構文でもこのような書き方は認められていない。また、従来のHTMLでは注釈宣言内の最後のコメントと終了区切り子の間に空白文字を挿入することもできたが、HTML5ではこのような書き方も認められていない。

#### 終了区切り子の省略

SGMLをもとにした従来のHTMLでは、タグやマーク宣言の終了区切り子「`>`」が、文字列「`<`」「`</`」の直前に存在する場合、その終了区切り子「`>`」を省略することが仕様の上では許されていた。HTML5では終了区切り子の省略はできない。

#### 空タグ

SGMLにおける空タグとは要素型名などが書かれていない空っぽのタグのことである。従来のHTMLでは空タグの存在を許しており、利用できる場所は限られるが、空開始タグ「`<>`」と空終了タグ「`</>`」が仕様の上では記述できる。一方、HTML5では空タグを利用することはできない。

#### 簡略終了タグ

SGML規格には、NET(簡略終了タグ)と呼ばれる仕組みが存在する。従来のHTMLでのNETは「`/`」であり、仕様上では、 「`<p>文章</p>`」という記述を「`<p/文章/`」と書くような記法が許されていた。

一方のHTML5に簡略終了タグという仕組みはない。ただし、後述する空要素の開始タグを "`<br />`" などと記述する方法は、(従来のSGMLの立場では)NETを利用したものと解釈することはできる。XMLの空要素タグも、SGMLの立場からはNETおよび付属書KのNESTCを利用した記法であると解釈できる。

#### 空要素のタグ

従来のSGMLおよびHTMLにおける空要素は、DTDで内容モデルを空 (EMPTY) と決められた要素のことである(例:br要素)従来のHTMLでは、空要素の終了タグを書くことは許されていない。よって例えば、br要素のタグを「`<br />`」や「`<br></br>`」のように記述することもできない。

HTML5のHTML構文における空要素は、内容を含むことができない要素のことである。空要素はその開始タグを「`>`」「`/>`」のいずれかで閉じることができる。例を挙げると、br要素のタグは「`<br>`」と記述するほかに、XML構文のように「`<br />`」と記述することもできる。ただし空要素の終了タグを書くことはできない。また、このような記法が許されるのは空要素または外部要素 (foreign element) のタグのみで、その他の要素の開始タグは「`>`」で閉じねばならない。例えば、HTML5のHTML構文では内容を含まないp要素を「`<p />`」のように書くことはできない。

XML仕様においては、空要素 は内容を含まない要素のことである。HTML5のXML構文では、空要素は直後に終了タグを伴う開始タグ(例:「`<br></br>`」)、あるいは空要素タグ(例:「`<br />`」)のどちらでも表現できる。

### HTML5 の要素と属性

`nav`要素(ナビゲーションのブロック用)や`footer`要素(作者や著作権の状態を表すまとまり用)や`section`要素(節)や`progress`要素(進捗状況)など、特別な意味を持つ要素が追加される。これらは検索エンジンのインデックス作業を容易にする。また、マルチメディアのための`audio`要素や`video`要素や2次元ビットマップ画像を描画するための`canvas`要素も追加される。

HTML 4.01で非推奨だった`font`要素や`center`要素などのCSSによって実現されるべきマークアップはすべて廃止されることとしている。`acronym`要素も廃止され、`abbr`要素に一本化される。

`lang`属性は、XML構文における`xml:lang`属性のように空の文字列をとり得る。

### 新しいAPI

HTML5ではマークアップだけでなく、API も新しく追加された。たとえば、以下のようなものである。

- ビデオやオーディオの再生
- 保存
- オフライン
- 編集
- ドラッグ&ドロップ
- 戻るボタン
- Webページ上のメニュー

### エラーの取り扱い

HTML5 (`text/html`) 対応ブラウザは間違った構文を柔軟に処理できる。HTML5は、古いブラウザが新しいHTML5の構造を安全に無視することが出来るように設計されている。HTML 4.01とは対照的に、HTML5は対応したブラウザであれば間違った構文に対して同じ結果となるように、字句解析と構文解析のための詳細な規則を規定している。

### XML構文とXHTML5

今のXML構文に対して、当初「XHTML5」という表現も使用されていた。

その後、2016年、WHATWG HTML標準ではXHTMLという用語を廃止し、それ以降は単にXML構文 (XML syntax)と表記している。これにより、W3C HTMLでもHTML 5.2から同様にXML構文の語を採用している。

## 既存技術との競合

### Adobe Flash

2010年頃までに急速に普及したAppleのiPhoneとiPadがFlash非対応を貫き、スティーブ・ジョブズCEO(当時)がHTML5を支持しFlashを厳しく批判したことが大きな影響を与えた。iPhoneやiPadにFlash対応を求める声は多かったが、特にスマートフォン向けでは徐々にFlashからHTML5への転換が進んだ。

Flashの開発元であるアドビシステムズは、かつて社をあげてFlashを擁護したが、2011年11月には、モバイルブラウザー用のFlash Playerの開発中止を発表した。(2013年には担当者でCTOだったケビン・リンチがAppleへ転職)2017年現在、アドビはHTML5の推進に積極的であり、FlashからHTML5への変換ツールなどをリリースしている。

### モバイルアプリケーション

スマートフォン向けのアプリの多くは、HTML5で開発されたウェブアプリケーションに置き換わるという見方がある。2011年にイギリスのフィナンシャル・タイムズ紙がHTML5による購読アプリを発表し注目を集めた。アップルのApp Storeには審査や課金に関する制約が大きく、Androidでは1つのアプリで様々なハードウェア仕様に対応する必要があるが、Webアプリケーションではそれらの制約を受けない。一方で各端末向けの公式アプリストアで配布されるネイティブアプリにもメリットはあるため、2012年時点では置き換えが大きく進んでいるわけではない。加えて、Android端末とiOS端末ではネイティブアプリの開発に際し全く別個の開発環境を要求されるのに対し、HTML5はほぼ完全に共通の技術を使え、しかもHTML5で開発したアプリをネイティブアプリにすることも可能になっているためネイティブアプリ開発でHTML5が利用されることも少なくない。