meta 要素since: 31st/Aug./2001; last modified: 5th/Jul./2005
meta 要素タイプはメタ情報モジュールに含まれる要素で、 head 要素の子要素として定義されています。 head 要素は任意の個数 meta 要素を持って良いことになっています。
meta 要素タイプの役割は、文書のヘッダーとして、 HTTP ヘッダーへの出力など、文書のプロファイルを指定することです。
meta| 要素 | 属性 | 最小内容モデル |
|---|---|---|
meta |
I18N, content* (CDATA), http-equiv (NMTOKEN), name (NMTOKEN), scheme (CDATA) |
EMPTY |
実装: DTD
meta 要素は空要素であり、内容モデルを持ちません (EMPTY)。従って、タグの記述方法が、空要素以外の要素とでは変わります。開始タグの末尾を " />" としてください:
<head>
<meta http-equiv="content-type"
content="text/html; charset=Shift_JIS" />
<title>XHTML 1.1 とはなんだろうか</title>
</head>
最後のスラッシュの直前に半角スペースが一つ挿入されているのは、後方互換のためです。
I18Nxml:lang 属性name = name [CS]content = cdata [CS]scheme = cdata [CS]head 要素の profile 属性と連動します。http-equiv = name [CI]name 属性の代わりとして働き、 content 属性値を値とするプロパティの名前を指定します。次の例は、当該ページの著者を指定するものです。
<meta name="Author"
xml:lang="ja" content="菅井 学" />
要素 meta では、基本的には、 name 属性のプロパティの値を content 属性の値で指定します。特に、 xml:lang 属性と併用すると、 content 属性の値の言語を指定することになります。
HTTP 応答メッセージヘッダへの出力を考えるときは、プロパティの名前は name 属性ではなく、 http-equiv 属性を用います:
<meta http-equiv="content-type"
content="text/html; charset=Shift_JIS" />
<meta http-equiv="content-style-type"
content="text/css" />
<meta http-equiv="content-script-type"
content="text/javascript" />
上のサンプルでは、 HTTP ヘッダに次のように出力することが期待されます。
content-type: text/html; charset=Shift_JIS content-style-type: text/css content-script-type: text/javascript
実際には、HTTP では meta 要素を見るような仕様になっていないので、これを HTTP ヘッダと等価に解釈するかどうかはサーバの仕様と実装によります。Apache HTTP サーバの場合、HTTP レスポンスヘッダを指定するためには、当該ディレクトリ上に置いた .htaccess ファイルで指定します。XHTML であれば、文字コードとメディアタイプを指定するために、.htaccess に次のように記述します。これは文字コードが UTF-8 である場合の例です。
AddType "application/xhtml+xml; charset=UTF-8" html
meta http-equiv による charset 指定は、本来は HTTP ヘッダの charset パラメータで指定するべきはずのものの、回避的/過渡的な措置に過ぎません。昨今のブラウザはかしこいので、 meta 要素で指定しなくても、だいたい正し文字コードを選択してくれます。
ブラウザがリソースをサーバに要求すると、サーバは対応するファイルを返しますが、このときヘッダをつけて返します。このヘッダが HTTP 応答メッセージヘッダであり、ブラウザはこの情報を元に当該リソースを解析します。ここで重要な情報は、リソースの種類、基準符号化法、基準スタイルシート言語、基準スクリプト言語です。上の例では、順番に "HTML", "Shift_JIS", "CSS", "JavabScript" が指定されています。
XHTML 1.1 (XML 1.0) 以降では、 UTF-8 以外の文字セットを利用する場合は、 XML 宣言に於ける encoding 属性の記述が必須です。後方互換のために、 meta 要素における charset 指定も併せて記述するようにお勧めしていましたが、 XHTML 1.1 以上では、meta 要素による http-equiv 指定が非推奨 (SHOULD NOT) になっていることをご了承ください。
次の例は、XHTML でメディアタイプ text/html、文字コード UTF-8 に指定している例です。
<meta http-equiv="content-type"
content="text/html; charset=UTF-16" />
| 文字符号化スキーム | charset名 | 補足 |
|---|---|---|
| ISO-2022-JP(RFC1468) | ISO-2022-JP | JISコード。メール、ニュースは普通これ。 |
| 日本語EUC(圧縮形式) | EUC-JP | UNIX用の日本語文字セット。(Extended UNIX Code packed format for Japanese) |
| シフトJIS | Shift_JIS | 主にパソコン(Windows、Macintosh)で用いられている拡張 JIS。 |
| UNICODE | UTF-8 | XML, Java などの標準。 |
UTF-16 | UTF-8 を拡張した文字セット。 |
charset 名(文字セット名、文字符号化方法、文字コードの種類)は大文字・小文字は区別されません。
Windows 2000 以降では内部コードの表現に UNICODE が使われるようになりましたが、入出力で使う文字セットは UTF です。紛らわしいのですが別のものです。Windows 2000 以降で UNICODE で符号化した文書は UTF-16 であり、 Machintosh などで "Unicode big endian" で符号化する場合も UTF-16 です。
meta タグで文字セットを指定する場合、符号化された文字(日本語)が現れる前に書いておかねばなりません。特に、 title 要素や meta name="keywords" には日本語を用いるでしょうから注意が必要です。 head 要素の一番最初に書いておくことをお勧めします。
UNICODE は、7 ビットで全て表現できる ASCII で満足してきた英米圏の人には、国際化 (I18N: Internationalization) を満足する文字セットとして好評ですが、日本や中国などの膨大な文字を必要とする文化圏での実用では深刻な問題を孕んでいます。
Content-type で指定する text/html のことを、メディアタイプと呼びます。
text/html です。text/html か application/xhtml+xml が推奨されます。application/xhtml+xml が推奨され、text/html は推奨されません。XHTML では、文書のメディアタイプの指定を、"application/xhtml+xml" とするように推奨されています。HTML は "text/html" であり、ほかの値は不可です (MUST NOT)。XML 応用言語である XHTML 1.0 は "application/xhtml+xml" を指定すべき (SHOULD) ですが、HTML との互換言語でもあるので "text/html" も指定可能です。XHTML 1.1 では "text/html" を指定すべきでありません (SHOULD NOT)。
また、"application/xhtml+xml" である文書には、meta http-equiv を指定すべきでない (SHOULD NOT) とされています。このとき、文字符号化方法は、XML 宣言の encoding 属性でのみ記述されます。
| メディア型 | HTML 4 | XHTML 1.0 | XHTML 1.1 | XHTML Basic / 1.1 | XHTML+MathML |
|---|---|---|---|---|---|
text/html | 推奨 | 可能 | 非推奨 | 非推奨 | 非推奨 |
application/xhtml+xml | 禁止 | 推奨 | 推奨 | 推奨 | 推奨 |
application/xml | 禁止 | 可能 | 可能 | 可能 | 可能 |
text/xml | 禁止 | 可能 | 可能 | 可能 | 可能 |
メディアタイプを指定する htt-equiv は、JavaScript を使用していることを明示するために使うことができます。次の例は、JavaScript のメディアタイプ text/javascript を指定するものです。
<meta http-equiv="Content-Script-Type" content="text/javascript" />
"application/xhtml+xml" である文書には、meta http-equiv を指定すべきでない (SHOULD NOT) とされています。外部スクリプトであれば、要素 link の属性 type="text/javascript" で指定します。要素 script であれば、属性 type="text/javascript" で指定します。
メディアタイプを指定する htt-equiv は、CSS を使用していることを明示するために使うことができます。次の例は、CSS のメディアタイプ text/css を指定するものです。
<meta http-equiv="Content-Style-Type" content="text/css" />
"application/xhtml+xml" である文書には、meta http-equiv を指定すべきでない (SHOULD NOT) とされています。外部スタイルシートであれば、要素 link の属性 type="text/css" で指定します。要素 style であれば属性 type="text/css" で指定します。属性 style は非推奨であり、メディアタイプを指定する方法は要素 meta http-equiv="Content-Style-Type" 以外に提供されていません。
ページを自動的に切り替えるには、http-equiv="refresh" を使うことができます。次の例は、10 秒後に URL "http://sample.foo.piyo/demo.html" をロードする例です。
<meta http-equiv="refresh" content="10,http://sample.foo.piyo/demo.html" />
次のような記述でもブラウザは認識します。
<meta http-equiv="refresh" content="10;URL=http://sample.foo.piyo/demo.html" />
content の値に URL を指定せず、秒数を表す数字だけを指定した場合は、指定した間隔で同じページがリロードされます。別のページに飛ばす場合は、同等のリンクを本文中に用意すべきです。
"application/xhtml+xml" である文書には、meta http-equiv を指定すべきでない (SHOULD NOT) とされています。自動的なページの更新の場合は代替方法がありません。WAI によるアクセシビリティのガイドライン WCAG 1.0 では、読者を混乱させないために使用するべきではないとされています。ブラウザクラッシャーや Phishing サイトへの誘導も可能なことから、セキュリティ上も使用しないほうが良いでしょう。引越し時にユーザを誘導するために便利なのですが。
検索エンジンによっては、その挙動を meta 要素で指定できます。
次の例では、検索エンジンに、当該文書を検索データベースに索引付けせず、リンクを辿らないように指定しています:
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
content 属性の値は、次のものが考えられます: ALL, INDEX, NOFOLLOW, NOINDEX。順番に、「インデックスして、リンクを解析する」、「インデックスする」、「リンクを解析しない」、「インデックスしない」となっています。
次の例では、検索エンジンに拾って欲しいキーワードと当該文書の説明文を指定しています:
<meta name="keywords"
content="休暇,ギリシャ,太陽" />
<meta name="description"
content="牧歌的なヨーロッパの休暇" />
一部の検索エンジンでは、検索結果にこれらの情報を反映させます。
検索エンジンへの情報提供に関する詳細は、「検索エンジン対策」を参照ください。
最近の検索エンジンは Google に限ら、クロール先のページをキャッシュします。検索対象にはしたいが、ページのキャッシュを拒否するときは次のように記述します。
<meta name="robots" content="noarchive" />
但し、noindex, nofollow に比べて、noarchive は認識されるとは限りません。キャッシュ機能を備える殆どの検索エンジンは認識するようになっています。
scheme 属性content 属性値の解釈スキームを指定します:
<meta scheme="ISBN"
name="identifier" content="0-8230-2355-9" />
ここでは content 属性の値が書籍を識別する ISBN コードとして解釈するように指定されています。
meta 要素による情報提供は、 head 要素の profile 属性と併用することで拡張される。