1. 4.6 リンク
      1. 4.6.1 導入
      2. 4.6.2 aおよびarea要素によって作成されるリンク
      3. 4.6.3 aおよびarea要素に対するAPI
      4. 4.6.4 Following hyperlinks
      5. 4.6.5 リソースのダウンロード
        1. 4.6.5.1 ハイパーリンク監査
      6. 4.6.6 リンクタイプ
        1. 4.6.6.1 リンクタイプ"alternate"
        2. 4.6.6.2 リンクタイプ"author"
        3. 4.6.6.3 リンクタイプ"bookmark"
        4. 4.6.6.4 リンクタイプ"canonical"
        5. 4.6.6.5 リンクタイプ"dns-prefetch"
        6. 4.6.6.6 リンクタイプ"external"
        7. 4.6.6.7 リンクタイプ"help"
        8. 4.6.6.8 リンクタイプ"icon"
        9. 4.6.6.9 リンクタイプ"license"
        10. 4.6.6.10 リンクタイプ"modulepreload"
        11. 4.6.6.11 リンクタイプ"nofollow"
        12. 4.6.6.12 リンクタイプ"noopener"
        13. 4.6.6.13 リンクタイプ"noreferrer"
        14. 4.6.6.14 リンクタイプ"opener"
        15. 4.6.6.15 リンクタイプ"pingback"
        16. 4.6.6.16 リンクタイプ"preconnect"
        17. 4.6.6.17 リンクタイプ"prefetch"
        18. 4.6.6.18 リンクタイプ"preload"
        19. 4.6.6.19 リンクタイプ"prerender"
        20. 4.6.6.20 リンクタイプ"search"
        21. 4.6.6.21 リンクタイプ"stylesheet"
        22. 4.6.6.22 リンクタイプ"tag"
        23. 4.6.6.23 シーケンシャルリンクタイプ
          1. 4.6.6.23.1 リンクタイプ"next"
          2. 4.6.6.23.2 リンクタイプ"prev"
        24. 4.6.6.24 その他のリンクタイプ

4.6.1 導入

リンクは、aareaformおよびlink要素で作成される概念的な構造で、2つのリソース(このうち1つは現在のDocument)の関係を表す。HTMLには2種類のリンクがある:

外部リソースへのリンク

これは、現在の文書を補足する他のリソースへのリンクであり、多くの場合、ユーザーエージェントによって自動的に処理される。すべての外部リソースリンクは、リソースがどのように取得されるかを記述するフェッチして処理するリンクされたリソースアルゴリズムを持つ。

ハイパーリンク

これは、通常ユーザーエージェントによってユーザーに向けて示されるリンクである。これによりユーザーは、たとえばブラウザーでのアクセスやダウンロードのような、ユーザーエージェントにリンクのリソースをナビゲートさせることができる。

href属性とrel属性を同時に持つlink要素に対しては、リンクタイプの節における定義に従って、rel属性のキーワードが示す関係に見合ったリンクが作られなければならない。

href属性とrel属性を同時に持つa要素、area要素に対しても同様に、リンクタイプの節における定義に従って、rel属性のキーワードが示す関係に見合ったリンクが作られなければならない。ただし、link要素と異なり、rel属性を持たず、rel属性がハイパーリンクを生成すると定義される値も持たない、href属性を持つa要素やarea要素もまた、ハイパーリンクを作成しなければならない。このように暗黙の内に生成されるハイパーリンクは、リンク元の文書をhref属性によって示されるノード文書と結びつけること以上の意味を持たない(リンクタイプを持たない)。

同様に、rel属性を持つform要素の場合、リンクタイプの節でキーワードに対して定義されているとおりに、 rel属性のキーワードに対してリンクは作成されなければならない。rel属性を持たない、rel属性にハイパーリンクの指定として定義されているキーワードを持たないform要素も、ハイパーリンクを作成しなければならない。

ハイパーリンクは、そのハイパーリンクのセマンティックスの処理を修正するハイパーリンク注釈を1つ以上つけることができる。

aおよびarea要素のhref属性は、潜在的にスペースで囲まれた妥当なURLである値でなければならない。

aおよびarea要素のhrefは必要としない。要素がhref属性を持たない場合、ハイパーリンクを作成しない。

target属性が存在する場合、その値は妥当なブラウジングコンテキスト名かキーワードでなければならない。これは、使用されるブラウジングコンテキストの名前を表す。ハイパーリンクを辿る場合にユーザーエージェントはこの名前を使用する。

aまたはarea要素の活性化挙動が呼び出される場合、ユーザーエージェントは、ユーザーにハイパーリンクがナビゲーションに対して使用されるかどうか、または要素が指定するリソースをダウンロードするかどうかについての好みを示すことを可能にする。

ユーザー設定が存在しない限り、デフォルトは、要素がdownload属性を持たない場合、ナビゲーションであるべきであり、属性を持つ場合、指定されたリソースをダウンロードするべきである。

ユーザーの好みによって決定されるか属性の有無を介してか属性の不在かどうか、判定がナビゲーションのハイパーリンクを使用する場合、ユーザーエージェントはハイパーリンクをたどらなければならず、決定がリソースをダウンロードするためにハイパーリンクを使用する場合、ユーザーエージェントはハイパーリンクをダウンロードしなければならない。これらの用語は、後続のセクションで定義される。

download属性が存在する場合、著者はリソースをダウンロードするために使用されるハイパーリンクを意図することを示す。属性は値を持ってもよい。値が存在する場合、ローカルファイルシステムでリソースの標識付けに使用するための著者に推奨されるデフォルトのファイル名を指定する。許可される値に制限はないが、ほとんどのファイルシステムが句読点をファイル名にサポートするものに関して制限があるため、ユーザーエージェントはそれに応じてファイル名を調整する可能性を著者に警告する。

ping属性が存在する場合は、ユーザーがハイパーリンクを辿る場合に、通知されることに興味を持つリソースのURLを与える。値は、それぞれのschemeHTTP(S) スキーマとなる妥当な空でないURLでなければならない、スペース区切りトークンのセットでなければならない。値は、ハイパーリンク監査に対してユーザーエージェントによって使用される。

Support: pingChrome for Android 75+Chrome 15+iOS Safari 5.0+Samsung Internet 4+UC Browser for Android 12.12+Firefox NoneSafari 6+IE NoneEdge 17+Opera Mini NoneOpera 15+Android Browser 4.4+

Source: caniuse.com

a要素およびarea要素が作成するリンクタイプはrel属性値によって決定される。その属性値は、スペース区切りのトークンの順不同セットでなければならない。使用できるキーワードと値が持つ意味は後述する。

relサポートトークンは、aおよびarea要素で許可されるHTMLリンクタイプで定義されるキーワードであり、処理モデルに影響を与え、ユーザーエージェントによってサポートされる。可能なサポートトークンは、noreferrernoopeneropenerである。relサポートされるトークンは、ユーザーエージェントが処理モデルを実装する、このリスト由来のトークンのみを含めなければならない。

その他の仕様は、以下の追加の要件をもつ、他のリンクタイプで定義されるとおりにHTMLリンクタイプを追加してもよい:

rel属性は初期値を持たない。そのため、rel属性が省略される、またはrel属性がユーザーエージェントに認識される属性値を持たない場合、文書は、リンク先リソースとの間にハイパーリンクが存在すること以外に特別な関係を持たない。

存在する場合、ハイパーリンクを作成するa要素のhreflang属性は、リンク先リソースの言語を与える。これは単なる助言である。値は、妥当なBCP 47言語タグでなければならない。[BCP47] ユーザーエージェントは、この属性を権威あるものと見なしてはならない―リソースを取得する際に、ユーザーエージェントは、リソースへのリンクに含まれるメタデータでない、その言語を判断するためにリソースに関連付けられる言語情報のみを使用しなければならない。

type属性が存在する場合、この属性はリンク先のリソースのMIMEタイプを表す。これは単なる助言である。値は妥当なMIMEタイプ文字列でなければならない。ユーザーエージェントは、typeを権威あるものと見なしてはならない―リソースを取得する際に、ユーザーエージェントは、そのタイプを決定するためにリソースへのリンクに含まれるメタデータを使用してはならない。

referrerpolicy属性は、リファラポリシー属性である。その目的は、ハイパーリンクを辿る際に使用されるリファラポリシーを設定することにある。[REFERRERPOLICY]

4.6.3 aおよびarea要素に対するAPI

interface mixin HTMLHyperlinkElementUtils {
  [CEReactions] stringifier attribute USVString href;
  readonly attribute USVString origin;
  [CEReactions] attribute USVString protocol;
  [CEReactions] attribute USVString username;
  [CEReactions] attribute USVString password;
  [CEReactions] attribute USVString host;
  [CEReactions] attribute USVString hostname;
  [CEReactions] attribute USVString port;
  [CEReactions] attribute USVString pathname;
  [CEReactions] attribute USVString search;
  [CEReactions] attribute USVString hash;
};
hyperlink . toString()
hyperlink . href

ハイパーリンクのURLを返す。

URLを変更する設定が可能である。

hyperlink . origin

ハイパーリンクのURLの生成元を返す。

hyperlink . protocol

ハイパーリンクのURLのスキームを返す。

URLのスキームを変更する設定が可能である。

hyperlink . username

ハイパーリンクのURLのユーザー名を返す。

URLのユーザー名を変更する設定が可能である。

hyperlink . password

ハイパーリンクのパスワードのユーザー名を返す。

URLのパスワードを変更する設定が可能である。

hyperlink . host

ハイパーリンクのURLのホストおよびポート(スキームに対するデフォルトのポートと異なる場合)を返す。

URLのホストおよびポートを変更する設定が可能である。

hyperlink . hostname

ハイパーリンクのURLのホストを返す。

URLのホストを変更する設定が可能である。

hyperlink . port

ハイパーリンクのURLのポートを返す。

URLのポートを変更する設定が可能である。

hyperlink . pathname

ハイパーリンクのURLのパスを返す。

URLのパスを変更する設定が可能である。

hyperlink . search

ハイパーリンクのURLのクエリー(空でない場合先頭の"?"を含む)を返す。

URLのクエリー(先頭の"?"を無視する)を変更する設定が可能である。

hyperlink . hash

ハイパーリンクのURLのフラグメント(空でない場合先頭の"#"を含む)を返す。

URLのフラグメント(先頭の"?"を無視する)を変更する設定が可能である。

An element implementing the HTMLHyperlinkElementUtils mixin has an associated url (null or a URL). It is initially null.

An element implementing the HTMLHyperlinkElementUtils mixin has an associated set the url algorithm, which runs these steps:

  1. If this element's href content attribute is absent, set this element's url to null.

  2. Otherwise, parse this element's href content attribute value relative to this element's node document. If parsing is successful, set this element's url to the result; otherwise, set this element's url to null.

When elements implementing the HTMLHyperlinkElementUtils mixin are created, and whenever those elements have their href content attribute set, changed, or removed, the user agent must set the url.

This is only observable for blob: URLs as parsing them involves a Blob URL Store lookup.

An element implementing the HTMLHyperlinkElementUtils mixin has an associated reinitialize url algorithm, which runs these steps:

  1. If element's url is non-null, its scheme is "blob", and its cannot-be-a-base-URL flag is set, terminate these steps.

  2. Set the url.

To update href, set the element's href content attribute's value to the element's url, serialized.


The href attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null and this element has no href content attribute, return the empty string.

  4. Otherwise, if url is null, return this element's href content attribute's value.

  5. Return url, serialized.

The href attribute's setter must set this element's href content attribute's value to the given value.

The origin attribute's getter must run these steps:

  1. Reinitialize url.

  2. If this element's url is null, return the empty string.

  3. Return the serialization of this element's url's origin.

The protocol attribute's getter must run these steps:

  1. Reinitialize url.

  2. If this element's url is null, return ":".

  3. Return this element's url's scheme, followed by ":".

The protocol attribute's setter must run these steps:

  1. Reinitialize url.

  2. If this element's url is null, terminate these steps.

  3. Basic URL parse the given value, followed by ":", with this element's url as url and scheme start state as state override.

    Because the URL parser ignores multiple consecutive colons, providing a value of "https:" (or even "https::::") is the same as providing a value of "https".

  4. Update href.

The username attribute's getter must run these steps:

  1. Reinitialize url.

  2. If this element's url is null, return the empty string.

  3. Return this element's url's username.

The username attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null or url cannot have a username/password/port, then return.

  4. Set the username, given url and the given value.

  5. Update href.

The password attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null, then return the empty string.

  4. Return url's password.

The password attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null or url cannot have a username/password/port, then return.

  4. Set the password, given url and the given value.

  5. Update href.

The host attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url or url's host is null, return the empty string.

  4. If url's port is null, return url's host, serialized.

  5. Return url's host, serialized, followed by ":" and url's port, serialized.

The host attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null or url's cannot-be-a-base-URL flag is set, terminate these steps.

  4. Basic URL parse the given value, with url as url and host state as state override.

  5. Update href.

The hostname attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url or url's host is null, return the empty string.

  4. Return url's host, serialized.

The hostname attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null or url's cannot-be-a-base-URL flag is set, terminate these steps.

  4. Basic URL parse the given value, with url as url and hostname state as state override.

  5. Update href.

The port attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url or url's port is null, return the empty string.

  4. Return url's port, serialized.

The port attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null or url cannot have a username/password/port, then return.

  4. If the given value is the empty string, then set url's port to null.

  5. Otherwise, basic URL parse the given value, with url as url and port state as state override.

  6. Update href.

The pathname attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null, return the empty string.

  4. If url's cannot-be-a-base-URL flag is set, return the first string in url's path.

  5. If url's path is empty, then return the empty string.

  6. Return "/", followed by the strings in url's path (including empty strings), separated from each other by "/".

The pathname attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null or url's cannot-be-a-base-URL flag is set, terminate these steps.

  4. Set url's path to the empty list.

  5. Basic URL parse the given value, with url as url and path start state as state override.

  6. Update href.

The search attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null, or url's query is either null or the empty string, return the empty string.

  4. Return "?", followed by url's query.

The search attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null, terminate these steps.

  4. If the given value is the empty string, set url's query to null.

  5. Otherwise:

    1. Let input be the given value with a single leading "?" removed, if any.

    2. Set url's query to the empty string.

    3. Basic URL parse input, with url as url and query state as state override, and this element's node document's document's character encoding as encoding override.

  6. Update href.

The hash attribute's getter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null, or url's fragment is either null or the empty string, return the empty string.

  4. Return "#", followed by url's fragment.

The hash attribute's setter must run these steps:

  1. Reinitialize url.

  2. Let url be this element's url.

  3. If url is null, then return.

  4. If the given value is the empty string, set url's fragment to null.

  5. Otherwise:

    1. Let input be the given value with a single leading "#" removed, if any.

    2. Set url's fragment to the empty string.

    3. Basic URL parse input, with url as url and fragment state as state override.

  6. Update href.

An element element cannot navigate if one of the following is true:

This is also used by form submission for the form element. The exception for a elements is for compatibility with web content.

To get an element's noopener, given an a, area, or form element element and a string target, run these steps:

  1. If element's link types include the noopener or noreferrer keyword, then return true.

  2. If element's link types do not include the opener keyword and target is an ASCII case-insensitive match for "_blank", then return true.

  3. Return false.

When a user follows a hyperlink created by an element subject, optionally with a hyperlink suffix, the user agent must run the following steps:

  1. If subject cannot navigate, then return.

  2. Let replace be false.

  3. Let source be subject's node document's browsing context.

  4. Let targetAttributeValue be the empty string.

  5. If subject is an a or area element, then set targetAttributeValue to the result of getting an element's target given subject.

  6. Let noopener be the result of getting an element's noopener with subject and targetAttributeValue.

  7. Let target and replace be the result of applying the rules for choosing a browsing context given targetAttributeValue, source, and noopener.

  8. If target is null, then return.

  9. Parse the URL given by subject's href attribute, relative to subject's node document.

  10. If that is successful, let URL be the resulting URL string.

    Otherwise, if parsing the URL failed, the user agent may report the error to the user in a user-agent-specific manner, may queue a task to navigate the target browsing context to an error page to report the error, or may ignore the error and do nothing. In any case, the user agent must then return.

  11. If there is a hyperlink suffix, append it to URL.

  12. Let request be a new request whose url is URL and whose referrer policy is the current state of subject's referrerpolicy content attribute.

  13. If subject's link types includes the noreferrer keyword, then set request's referrer to "no-referrer".

  14. Queue a task to navigate the target browsing context to request. If replace is true, the navigation must be performed with replacement enabled. The source browsing context must be source.

The task source for the tasks mentioned above is the DOM manipulation task source.

4.6.5 リソースのダウンロード

Support: downloadChrome for Android 75+Chrome 14+iOS Safari 13+Samsung Internet 4+UC Browser for Android 12.12+Firefox 20+Safari 10.1+IE NoneEdge 13+Opera Mini NoneOpera 15+Android Browser 4.4+

Source: caniuse.com

リソースには、すぐに閲覧されるのではなく、後に使用されることが意図されているものもある。そのような意図を示すために、問題のリソースへのハイパーリンクを作成するa要素やarea要素にdownload属性を指定できる。

また、この属性は、ユーザーエージェントがファイルシステムにリソースを保存する際に用いるファイル名を値として持つことができる。この値は`Content-Disposition` HTTPヘッダーのfilenameパラメーターによって上書きされることがある。[RFC6266]

クロスオリジンの場合、ユーザーに悪意があるだろう挙動の警告を回避するために、download属性は`Content-Disposition` HTTPヘッダー(具体的にはattachmentディスポジションタイプ)と組み合わせる必要がある。(これは、重要な個人情報や機密情報の意図しないダウンロードからユーザーを保護するものである。)


When a user downloads a hyperlink created by an element subject, optionally with a hyperlink suffix, the user agent must run the following steps:

  1. If subject cannot navigate, then return.

  2. Parse the URL given by subject's href attribute, relative to subject's node document.

  3. If parsing the URL fails, the user agent may report the error to the user in a user-agent-specific manner, may navigate to an error page to report the error, or may ignore the error and do nothing. In either case, the user agent must return.

  4. Otherwise, let URL be the resulting URL string.

  5. If there is a hyperlink suffix, append it to URL.

  6. Run these steps in parallel:

    1. Let request be a new request whose url is URL, client is entry settings object, initiator is "download", destination is the empty string, and whose synchronous flag and use-URL-credentials flag are set.

    2. Handle the result of fetching request as a download.

When a user agent is to handle a resource obtained from a fetch as a download, act in a user-agent-defined manner to safeguard the user from a potentially hostile download. If the download is not to be aborted, it should provide the user with a way to save the resource for later use, if a resource is successfully obtained; or otherwise should report any problems downloading the file to the user.

ユーザーエージェントがダウンロードとして処理されているリソースに対するファイル名を必要とする場合、ユーザーエージェントは以下のアルゴリズムを使用して1つを選択すべきである。

このアルゴリズムは、信頼できないサイトからファイルをダウンロードすることに関与するセキュリティー危険性を軽減するために意図され、そしてユーザーエージェントはアルゴリズムに追従するように強く促される。

  1. filenameをvoidの値にする。

  2. リソースが`Content-Disposition`ヘッダーを持ち、そのヘッダーがattachment dispositionタイプを指定し、かつヘッダーがファイル名情報を含む場合、filenameにヘッダーで指定される値を持たせ、かつ以下のサニタイズで標識されるステップにジャンプする。[RFC6266]

  3. もしあれば、interface originを、開始されたダウンロードをもたらすダウンロードするまたはナビゲートする行動で、ダウンロードDocument生成元にする。

  4. もしあれば、resource origininterface originと同じにする場合に、そのURLのスキームコンポーネントがdataである場合を除き、resource originをダウンロードされていたリソースのURLの生成元にする。

  5. interface originがない場合、trusted operationをtrueにする。そうでなければ、resource origininterface origin同一生成元である場合にtrusted operationをtureにし、そうでなければfalseにする。

  6. trusted operationがtrueでありかつリソースが`Content-Disposition`ヘッダーを持ちかつそのヘッダーがファイル名情報を含む場合、filenameはヘッダーで指定される値を持たせ、かつ以下のサニタイズで標識されるステップにジャンプする。[RFC6266]

  7. ダウンロードがaまたはarea要素によって作成されるハイパーリンクから開始されなかった場合、またはダウンロードが開始された際にダウンロードが開始されたハイパーリンクの要素がdownload属性を持っていなかった場合、またはダウンロードが開始された際にそのような属性があったがその値が空文字列であった場合、提案されるファイル名なしのラベルが付けられたステップにジャンプする。

  8. proposed filenameにダウンロードが開始された時点でダウンロードを開始したハイパーリンクの要素のdownload属性の値を持たせる。

  9. trusted operationがtrueである場合、filenameproposed filenameの値を持たせ、かつ以下のサニタイズで標識されるステップにジャンプする。

  10. リソースが`Content-Disposition`ヘッダーを持ちかつそのヘッダーがattachment dispositionタイプを指定する場合、filenameproposed filenameの値を持たせ、かつ以下のサニタイズで標識されるステップにジャンプする。[RFC6266]

  11. 提案ファイル名なしtrusted operationがtrueである場合、またはユーザーがダウンロードする問題のリソースを持つための好みを示す場合、filenameをユーザーエージェント定義の方法でリソースのURLから得られる値を持たせ、かつ以下のサニタイズで標識されるステップにジャンプする。

  12. Let filename be set to the user's preferred file name or to a file name selected by the user agent, and jump to the step labeled sanitize below.

    アルゴリズムがこのステップに到達する場合、ダウンロードはダウンロードされているリソースとは異なる生成元から始まり、生成元はダウンロードするために適切なファイルとしてマークされず、そしてダウンロードはユーザーによって開始されなかった。これは、download属性がダウンロードをトリガするために使用されたため、または問題のリソースがユーザーエージェントがサポートする形式ではないためである。

    たとえば、敵対的なサーバーが、ユーザーをだまして敵対的なサーバーに由来するデータを考えさせることで、知らないうちに個人情報をダウンロードして敵対的なサーバーに再アップロードするために、ユーザーを取得しようとしている可能性があるため、これは危険であるかもしれない。

    したがって、何らかの形で、問題のリソースが全く異なるソースから来て、混乱を防ぐために、潜在的に敵対的なinterface originからの推奨されるファイル名は無視されるべきであることがユーザーに通知されることは、ユーザーの利益になる。

  13. サニタイズ:必要に応じて、ユーザーにfilenameに影響を与えることを可能にする。たとえば、ユーザーエージェントは、デフォルト値として上記で決定されるようなfilenameの値を潜在的に提供する、ファイル名をユーザーに促すことができる。

  14. ローカルファイルシステムに適するようにfilenameを調整する。

    たとえば、これはファイル名で正当でない文字を削除する、または先頭と末尾の空白をトリミングすることを伴う可能性がある。

  15. If the platform conventions do not in any way use extensions to determine the types of file on the file system, then return filename as the file name.

  16. いずれかがわかっている場合は記載のタイプは、リソースのContent-Typeメタデータによってclaimed typeとする。いずれかが既知である場合、named typefilename拡張子によって指定された種類とする。この手順の目的のために、タイプ拡張子へのMIMEタイプのマッピングである。

  17. If named type is consistent with the user's preferences (e.g. because the value of filename was determined by prompting the user), then return filename as the file name.

  18. If claimed type and named type are the same type (i.e. the type given by the resource's Content-Type metadata is consistent with the type given by filename's extension), then return filename as the file name.

  19. claimed typeが既知である場合、claimed typeに対応する拡張子を追加するためにfilenameを変更する。

    そうでなければ、named typeが潜在的に危険であることが既知である(たとえば、ネイティヴ実行可能ファイル、シェルスクリプト、HTMLアプリケーション、または実行可能なマクロ対応文書としてプラットフォームの規則によって処理される)場合、既知の安全な拡張子を追加するために必要に応じてfilenameを変更する(たとえば、".txt")。

    この最後の手順は、望ましくないかもしれない、実行可能ファイルをダウンロードすることを不可能にする。As always, implementers are forced to balance security and usability in this matter.

  20. ファイル名としてfilenameを返す。

このアルゴリズムのために、ファイル拡張子は、ファイルの種類を識別するために使用されるプラットフォームの規則が指示するファイル名のいずれかの部分で構成される。たとえば、多くのオペレーティングシステムは、ファイルの種類およびファイルを開くまたは実行する方法を決定するためにファイル名でファイル名の後に最後のドット(".")の部分を使用する。

ユーザーエージェントは、ユーザーのファイルシステム内のもたらされるファイルを格納する場所を決定する際に、リソース自身、リソースのURL、および任意のdownload属性によって提供される任意のディレクトリーまたはパスの情報を無視すべきである。

If a hyperlink created by an a or area element has a ping attribute, and the user follows the hyperlink, and the value of the element's href attribute can be parsed, relative to the element's node document, without failure, then the user agent must take the ping attribute's value, split that string on ASCII whitespace, parse each resulting token relative to the element's node document, and then run these steps for each resulting URL record ping URL, ignoring tokens that fail to parse:

  1. If ping URL's scheme is not an HTTP(S) scheme, then return.

  2. Optionally, return. (For example, the user agent might wish to ignore any or all ping URLs in accordance with the user's expressed preferences.)

  3. Let request be a new request whose url is ping URL, method is `POST`, body is `PING`, client is the environment settings object of the Document containing the hyperlink, destination is the empty string, credentials mode is "include", referrer is "no-referrer", and whose use-URL-credentials flag is set.

  4. Let target URL be the resulting URL string obtained from parsing the value of the element's href attribute and then:

    If the URL of the Document object containing the hyperlink being audited and ping URL have the same origin
    If the origins are different, but the HTTPS state of the Document containing the hyperlink being audited is "none"
    request must include a `Ping-From` header with, as its value, the URL of the document containing the hyperlink, and a `Ping-To` HTTP header with, as its value, the target URL.
    そうでなければ
    request must include a `Ping-To` HTTP header with, as its value, target URL. request does not include a `Ping-From` header.
  5. Fetch request.

This may be done in parallel with the primary fetch, and is independent of the result of that fetch.

User agents should allow the user to adjust this behavior, for example in conjunction with a setting that disables the sending of HTTP `Referer` (sic) headers. Based on the user's preferences, UAs may either ignore the ping attribute altogether, or selectively ignore URLs in the list (e.g. ignoring any third-party URLs); this is explicitly accounted for in the steps above.

User agents must ignore any entity bodies returned in the responses. User agents may close the connection prematurely once they start receiving a response body.

When the ping attribute is present, user agents should clearly indicate to the user that following the hyperlink will also cause secondary requests to be sent in the background, possibly including listing the actual target URLs.

For example, a visual user agent could include the hostnames of the target ping URLs along with the hyperlink's actual URL in a status bar or tooltip.

ping属性は、オフサイトのリンクが最も人気のあるウェブページに追跡させる、または広告主にクリックスルー率を追跡させる、HTTPリダイレクトやJavaScriptなどの既存の技術と冗長である。

しかし、ping属性は、ユーザーにこれらの代替以上の利点を提供する:

このように、pingはこの機能をもたないユーザーを追跡することが可能である一方で、著者はユーザーエージェントがユーザーエクスペリエンスをより透明にすることができるようにping属性を使用することを勧める。

4.6.6 リンクタイプ

次の表は、対応するキーワードで、この仕様書で定義されるリンクタイプを要約したものである。この表は規範的なものではない。リンクタイプに対する実際の定義は、次節以降に示されている。

この節において、参照される文書とは、リンクを表す要素によって識別されるリソースを指し、現在の文書とは、リンクを表す文書自身のリソースを指す。

linkaareaまたはform要素に適用するリンクタイプを決定するために、要素のrel属性は、ASCII空白文字で分割されなければならない。得られたトークンは、その要素に適用されるリンクタイプに対するキーワードである。

別の方法で指定されない限り、1つのrel属性に対してキーワードを複数指定してはならない。

下記テーブルに続くセクションの一部は、特定のキーワードのためのシノニムを列挙する。指示されたシノニムは、ユーザーエージェントによって指定されるように処理されるが、文書で使用されてはならない(たとえば、キーワード"copyright")。

キーワードは常にASCII大文字・小文字不区別であり、そのように比較されなければならない。

つまり、rel="next"rel="NEXT"は同義である。

body-okであるキーワードは、link要素がbody内で許可されるかどうかに影響を与える。この仕様によって定義されるbody-okキーワードは、dns-prefetchmodulepreloadpingbackpreconnectprefetchpreloadprerender、およびstylesheetである。他の仕様もbody-okキーワードを定義することができる。

リンクタイプ効果body-ok概要
linkaareaform
alternateハイパーリンク使用不可·現在の文書の代替表現を与える。
canonicalハイパーリンク使用不可·現在の文書の優先URLを指定する。
authorハイパーリンク使用不可·現在の文書または記事の著者へのリンクを与える。
bookmark使用不可ハイパーリンク使用不可·最も近い祖先セクションへのパーマリンクを与える。
dns-prefetch外部リソース使用不可Yesユーザーエージェントがターゲットリソースの生成元のDNS解決を先制して実行するように指定する。
external使用不可注釈·参照される文書が現在の文書と同じサイトの一部でないことを示す。
helpハイパーリンク·コンテキストに応じたヘルプへのリンクを提供する。
icon外部リソース使用不可·現在の文書を表現するアイコンを取り込む。
modulepreload外部リソース使用不可Yes後で評価するために、ユーザーエージェントが先制してモジュールスクリプトをフェッチして文書のモジュールマップに格納しなければならないことを指定する。オプションで、モジュールの依存関係も同様にフェッチすることができる。
licenseハイパーリンク·参照される文書で説明される著作権許諾で保護される現在の文書のメインコンテンツを示す。
nextハイパーリンク·現在の文書があるシリーズの一部であり、かつそのシリーズの次の文書が参照される文書であることを示す。
nofollow使用不可注釈·現在の文書の原作者や発行者が参照される文書を推奨しないことを示す。
noopener使用不可注釈·ハイパーリンクが最初にいずれかを作成する場合(つまり、適切なtarget属性値を持つ場合)、補助ブラウジングコンテキストではないトップレベルブラウジングコンテキストを作成する。
noreferrer使用不可注釈·`Referer`(ママ)ヘッダーは含まれない。また、noopenerと同じ効果がある。
opener使用不可注釈·ハイパーリンクが別の方法で補助ブラウジングコンテキストではないトップレベルブラウジングコンテキストを作成する(すなわち、target属性値として"_blank"を持つ)場合、補助ブラウジングコンテキストを作成する。
pingback外部リソース使用不可Yes現在の文書にpingbackを扱うpingbackサーバーのアドレスを与える。
preconnect外部リソース使用不可Yesユーザーエージェントがターゲットリソースの生成元に先制して接続すべきであると指定する。
prefetch外部リソース使用不可Yesユーザーエージェントが先制してフェッチし、フォローアップナビゲーションに必要とされる可能性があるとして、ターゲットリソースをキャッシュすべきであると指定する。
preload外部リソース使用不可Yesユーザーエージェントが先制フェッチし、as属性(および対応する宛先に関連付けられた優先度)によって与えられた潜在的な宛先に応じて、現在のナビゲーションに対するターゲットリソースをキャッシュすべきであると指定する。
prerender外部リソース使用不可Yesユーザーエージェントがターゲットリソースを先制フェッチし、将来的により高速な応答を提供するのに役立つように処理すできであると指定する。
prevハイパーリンク·現在の文書があるシリーズの一部であり、かつそのシリーズの前の文書が参照される文書であることを示す。
searchハイパーリンク·現在の文書と関連する文書を通して検索に使用できるリソースへのリンクを与える。
stylesheet外部リソース使用不可YesCSSスタイルシートをインポートする
tag使用不可ハイパーリンク使用不可·現在の文書に適用される(与えられたアドレスにより識別される)タグを与える。
4.6.6.1 リンクタイプ"alternate"

alternateキーワードは、linkaarea要素で使用してもよい。

このキーワードの意味は、他の属性値に依存する。

要素がlinkでありrel属性がまたstylesheetキーワードを含む場合

alternateキーワードはstylesheetキーワードの意味を定められた方法で書き換える。alternateキーワード自身はリンクを生成しない。

ここで、link要素のセットは、スタイルシートを提供する:

<!-- a persistent style sheet -->
<link rel="stylesheet" href="default.css">

<!-- the preferred alternate style sheet -->
<link rel="stylesheet" href="green.css" title="Green styles">

<!-- some alternate style sheets -->
<link rel="alternate stylesheet" href="contrast.css" title="High contrast">
<link rel="alternate stylesheet" href="big.css" title="Big fonts">
<link rel="alternate stylesheet" href="wide.css" title="Wide screen">
alternateキーワードがapplication/rss+xmlまたはapplication/atom+xmlを値に持つtype属性とともに用いられている場合

配信フィードへのハイパーリンクを作成する(ただし現在のページと全く同じものが配信されるとは限らない)。

フィード自動検出の目的で、ユーザーエージェントは、alternateキーワードを使用し、かつtype属性を値application/rss+xmlまたは値application/atom+xmlに設定する、文書内のすべてのlink要素を検討すべきである。ユーザーエージェントがデフォルトのシンジケーションフィードの概念を持つ場合、(ツリー順で)そのような最初の要素はデフォルトとして使用されるべきである。

次のlink要素は、ブログにシンジケーションフィードを提供する:

<link rel="alternate" type="application/atom+xml" href="posts.xml" title="Cool Stuff Blog">
<link rel="alternate" type="application/atom+xml" href="posts.xml?category=robots" title="Cool Stuff Blog: robots category">
<link rel="alternate" type="application/atom+xml" href="comments.xml" title="Cool Stuff Blog: Comments">

そのようなlink要素は、(該当する場合に)最初のデフォルトであるものをもつ、フィード自動検出に従事するユーザーエージェントによって使用される。

次の例は、a要素を使用して、ユーザーにさまざまな異なるシンジケーションフィードを提案する:

<p>You can access the planets database using Atom feeds:</p>
<ul>
 <li><a href="recently-visited-planets.xml" rel="alternate" type="application/atom+xml">Recently Visited Planets</a></li>
 <li><a href="known-bad-planets.xml" rel="alternate" type="application/atom+xml">Known Bad Planets</a></li>
 <li><a href="unexplored-planets.xml" rel="alternate" type="application/atom+xml">Unexplored Planets</a></li>
</ul>

これらのリンクは、フィードの自動検出に使用されない。

そうでなければ

現在の文書の代替表現を参照するハイパーリンクを作成する。

参照される文書の性質は、hreflang属性、およびtype属性で与えられる。

alternateキーワードがhreflang属性とともに用いられ、かつその属性の値が文書要素言語と異なる場合、参照される文書が翻訳であることを示す。

alternateキーワードがtype属性とともに用いられる場合、参照される文書は現在の文書を指定されたフォーマットに変換したものであることを示す。

hreflang、およびtype属性は、alternateキーワードとともに指定される場合、組み合わせて使用できる。

次の例は、別の形式を使用する、他言語向け、他のメディアのために意図されているページのバージョンをどのように指定できるかを示す:

<link rel=alternate href="/en/html" hreflang=en type=text/html title="English HTML">
<link rel=alternate href="/fr/html" hreflang=fr type=text/html title="French HTML">
<link rel=alternate href="/en/html/print" hreflang=en type=text/html media=print title="English HTML (for printing)">
<link rel=alternate href="/fr/html/print" hreflang=fr type=text/html media=print title="French HTML (for printing)">
<link rel=alternate href="/en/pdf" hreflang=en type=application/pdf title="English PDF">
<link rel=alternate href="/fr/pdf" hreflang=fr type=application/pdf title="French PDF">

このキーワードが示す関係は、遷移的である。つまり、ある文書が他の2つの文書にリンクタイプ"alternate"でリンクする場合、2つの文書が最初の文書の代替表現を意味することに加えて、2つの文書もまた互いに代替表現の関係にあることを示す。

authorキーワードはlinkaareaの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

aareaの各要素に対して、authorキーワードは、参照される文書が著者に関するより詳しい情報の提供を示す。ここでの著者とは、存在する場合、ハイパーリンクを定義する要素の先祖要素にあたる直近のarticle要素の著者であり、存在しない場合はその文書全体の著者である。

link要素に対して、authorキーワードは、参照される文書がページ全体の著者に関するより詳しい情報の提供を示す。

"参照される文書"には、著者のメールアドレスを指示するmailto: URLを用いることが可能である。多くの場合、この形態が用いられる。[MAILTO]

シノニム:歴史的な理由により、ユーザーエージェントはまた、リンクの関係として指定されるauthorキーワードを持つものとして値を"made"を伴うrev属性を持つlinkaおよびarea要素を扱わなければならない。

bookmarkキーワードはaareaの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

bookmarkキーワードは、問題の要素のリンクを生成する直近の祖先article要素、または祖先article要素が存在しない場合はリンクを生成する要素が最も深く関与している節へのパーマリンクを生成する。

以下の例には、3つのハイパーリンクがある。ユーザーエージェントはパーマリンクが与えられている場所を見ることにより、問題のパーマリンクがどの仕様に適合するかを判断するかもしれない。

 ...
 <body>
  <h1>Example of permalinks</h1>
  <div id="a">
   <h2>First example</h2>
   <p><a href="a.html" rel="bookmark">This permalink applies to
   only the content from the first H2 to the second H2</a>. The DIV isn't
   exactly that section, but it roughly corresponds to it.</p>
  </div>
  <h2>Second example</h2>
  <article id="b">
   <p><a href="b.html" rel="bookmark">This permalink applies to
   the outer ARTICLE element</a> (which could be, e.g., a blog post).</p>
   <article id="c">
    <p><a href="c.html" rel="bookmark">This permalink applies to
    the inner ARTICLE element</a> (which could be, e.g., a blog comment).</p>
   </article>
  </article>
 </body>
 ...

canonicalキーワードはlink要素とともに使用してもよい。このキーワードはハイパーリンクを生成する。

canonicalキーワードは、href属性で指定されるURLが現在の文書の優先URLであることを示す。That helps search engines reduce duplicate content, as described in more detail in The Canonical Link Relation. [RFC6596]

dns-prefetchキーワードはlink要素と共に使用してもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

dns-prefetchキーワードは、ユーザーがその生成元に位置するリソースを必要とする可能性が高く、かつ、ユーザーエクスペリエンスがDNS解決に関連する待ち時間コストを先取りすることによって改善されるので、指定されたリソースの生成元のDNS解決を先制実行することが、有益である可能性が高いことを示す。User agents must implement the processing model of the dns-prefetch keyword described in Resource Hints. [RESOURCEHINTS]

dns-prefetchキーワードによって与えられるリソースにデフォルトタイプは存在しない。

externalキーワードは、aareaおよびform要素とともに使用されてもよい。このキーワードはハイパーリンクを生成しないが、要素によって作成される他のハイパーリンク(他のキーワードがハイパーリンクを生成しない場合は暗黙のハイパーリンク)の注釈をつける

externalキーワードは、リンクが現在の文書が一部を形成するサイトの一部ではない文書へ導くことを示す。

helpキーワードはlinkaareaおよびformの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

aareaおよびformの各要素について、helpキーワードは、参照される文書がハイパーリンクを定義する要素の親要素およびその子要素のより詳しいヘルプ情報を提供することを示す。

以下の例では、フォームコントロールはこれに対応したヘルプと関連付けられている。ユーザーエージェントはこの情報を用いるかもしれない。たとえば、ユーザーが"ヘルプ"や"F1"を押す際にいつでも参照される文書を表示できる。

 <p><label> Topic: <input name=topic> <a href="help/topic.html" rel="help">(Help)</a></label></p>

link要素について、helpキーワードは参照される文書がページ全体のヘルプを提供することを示す。

aareaの各要素について、ブラウザーはhelpキーワードがリンクに異なるカーソルを表示することがある。

4.6.6.8 リンクタイプ"icon"

Support: link-icon-pngChrome for Android 75+Chrome 4+iOS Safari NoneSamsung Internet 4+UC Browser for Android 12.12+Firefox 2+Safari 3.1+IE 11+Edge 12+Opera Mini NoneOpera 9+Android Browser 2.1+

Source: caniuse.com

iconキーワードはlink要素で使用してもよい。このキーワードは外部リソースへのリンクを生成する。

指定されるリソースは、ページまたはサイトを表すアイコンであり、かつユーザーインターフェイスにおけるページを示す際にユーザーエージェントによって使用されるべきである。

アイコンは、聴覚アイコン、視覚アイコン、または他の種類のアイコンかもしれない。複数のアイコンが提供される場合、ユーザーエージェントは typemedia、およびsizes属性に応じて最も適切なアイコンを選択しなければならない。複数の均等に適切なアイコンがある場合、ユーザーエージェントは、ユーザーエージェントは、アイコンのリストを収集した時点で、ツリー順で宣言された最後のものを使用する必要がある。ユーザーエージェントがアイコンを使用しようと試みるが、綿密に検討すると、そのアイコンが実際には不適切であると判定される場合(たとえば、アイコンがサポートされない形式を使用するため)、ユーザーエージェントは属性によって決定されるように次の最も適切なアイコンを試みなければならない。

ユーザーエージェントは、アイコンのリストが変更する場合にアイコンを更新するよう要求されないが、更新することを奨励する。

iconキーワードで指定されるリソースに対するデフォルトタイプは存在しない。しかし、リソースの種類を決定するために、ユーザーエージェントは、リソースが、画像であることを期待しなければならない。

sizesキーワードは、(CSSピクセルではなく)生ピクセルのアイコンサイズを表す。

CSSピクセルあたり2デバイスピクセルのデバイス画素密度(2x, 192dpi)をもつディスプレイを意図する50 CSSピクセル幅であるアイコンは、100生ピクセルの幅を持つだろう。この機能は、異なるリソースが小さな高解像度アイコン対大きな低解像度のアイコン(たとえば50×50 2x 対100×100 1×)に対して使用されることを示すものをサポートしない。

属性値を解析して処理するために、ユーザーエージェントは、最初のASCII空白文字上の属性値を分割しなければならず、値が何を表すかを決定するためにそれぞれの得られたキーワードを解析しなければならない。

anyキーワードは、たとえばSVG画像で提供されるなど、リソースがスケーラブルなアイコンであることを表す。

キーワードが何を表すかを決定するために、以下のように他のキーワードをさらに解析しなければならない:

sizes属性に指定されたキーワードは、リンクされたリソースで実際に利用可能でないアイコンのサイズを表してはならない。

In the absence of a link with the icon keyword, for Document objects whose URL's scheme is an HTTP(S) scheme, user agents may instead run these steps in parallel:

  1. Let request be a new request whose url is the URL record obtained by resolving the URL "/favicon.ico" against the Document object's URL, client is the Document object's relevant settings object, destination is "image", synchronous flag is set, credentials mode is "include", and whose use-URL-credentials flag is set.

  2. Let response be the result of fetching request.

  3. Use response's unsafe response as an icon as if it had been declared using the icon keyword.

次の例は、複数のアイコンを持つアプリケーションの冒頭部を示している。

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>lsForums — Inbox</title>
  <link rel=icon href=favicon.png sizes="16x16" type="image/png">
  <link rel=icon href=windows.ico sizes="32x32 48x48" type="image/vnd.microsoft.icon">
  <link rel=icon href=mac.icns sizes="128x128 512x512 8192x8192 32768x32768">
  <link rel=icon href=iphone.png sizes="57x57" type="image/png">
  <link rel=icon href=gnome.svg sizes="any" type="image/svg+xml">
  <link rel=stylesheet href=lsforums.css>
  <script src=lsforums.js></script>
  <meta name=application-name content="lsForums">
 </head>
 <body>
  ...

歴史的な経緯により、iconキーワードは、"shortcut"キーワードが先行してもよい。"shortcut"キーワードが存在する場合、rel属性の全体の値は、(トークンと他のASCII空白文字でないものの間に単一のU+0020 SPACE文字を伴う)文字列"shortcut icon"にASCII大文字・小文字不区別でマッチしなければならない。

licenseキーワードはlinkaareaおよびformの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

licenseキーワードは、参照される文書が、現在の文書のメインコンテンツを規定する著作権許諾の条項を提供することを示す。

この仕様は、主要コンテンツの一部であるとみなされない文書の主要なコンテンツとコンテンツとを区別する方法を指定しない。区別は、ユーザーにとってわかりやすいように行われるべきである。

写真共有サイトについて考えてみる。そのサイトのあるページは、写真を掲載し、その写真について説明するかもしれない。そして、そのページは、以下のようにマークアップされるかもしれない:

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>Exampl Pictures: Kissat</title>
  <link rel="stylesheet" href="/style/default">
 </head>
 <body>
  <h1>Kissat</h1>
  <nav>
   <a href="../">Return to photo index</a>
  </nav>
  <figure>
   <img src="/pix/39627052_fd8dcd98b5.jpg">
   <figcaption>Kissat</figcaption>
  </figure>
  <p>One of them has six toes!</p>
  <p><small><a rel="license" href="http://www.opensource.org/licenses/mit-license.php">MIT Licensed</a></small></p>
  <footer>
   <a href="/">Home</a> | <a href="../">Photo index</a>
   <p><small>© copyright 2009 Exampl Pictures. All Rights Reserved.</small></p>
  </footer>
 </body>
</html>

このケースでは、licenseはこの文書のメインコンテンツである写真にのみ適用され、文書全体には適用されない。具体的には、ページのデザインそのものには適用されないということである。これらは文書の末尾に示されているとおりの著作権により保護される。これは、(たとえば、ページの下部に淡い小さなテキストでページの著作権を持つ一方、目立つ写真の近くに配置ライセンスのリンクを作成する)スタイリングでより明確に作成することができる。

同義語:歴史的な理由により、ユーザーエージェントはまた、licenseキーワードのようなキーワード"copyright"を扱わなければならない。

Support: link-rel-modulepreloadChrome for Android 75+Chrome 66+iOS Safari NoneSamsung Internet 9.2+UC Browser for Android NoneFirefox NoneSafari NoneIE NoneEdge 76+Opera Mini NoneOpera 53+Android Browser 67+

Source: caniuse.com

modulepreloadキーワードはlink要素で使用してもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

modulepreloadキーワードは、プリロードするモジュールスクリプトに合わせて調整された処理モデルをもつ、preloadキーワードの専門的な代替である。具体的には、モジュールスクリプトに対する特定のフェッチ動作(たとえば、crossorigin属性の異なる解釈を含む)を使用し、後の評価のために結果を適切なモジュールマップに配置する。対照的に、preloadキーワードを使用する類似の外部リソースリンクは、文書のモジュールマップに影響を与えることなく、プリロードキャッシュに結果を配置する。

さらに、実装は、指定されたモジュールの依存関係を同様にフェッチするために、モジュールスクリプトが依存関係を宣言するという事実を活用することができる。これは最適化の機会として意図されている。ほとんど確実に、ユーザーエージェントがこれらの依存関係も後で必要になることを知っているためである。サービスワーカーやサーバーサイドの監視などの技術を使用せずに、一般に観測できない。特に、適切な loadまたはerrorは、指定されたモジュールがフェッチされた後に発生し、一切の依存関係を待たない。

The appropriate times to fetch and process the linked resource for such a link are:

他のリンク関係とは異なり、このようなlinkの関連属性(ascrossoriginreferrerpolicyなど)を変更しても、新しいフェッチはトリガーされない。これは、文書のモジュールマップがすでに以前のフェッチによって作成されており、再フェッチが無意味になるためである。

The fetch and process the linked resource algorithm for modulepreload links, given a link element el, is as follows:

  1. If the href attribute's value is the empty string, then return.

  2. Let destination be the current state of the as attribute (a destination), or "script" if it is in no state.

  3. If destination is not script-like, then queue a task on the networking task source to fire an event named error at the link element, and return.

  4. Parse the URL given by the href attribute, relative to the element's node document. If that fails, then return. Otherwise, let url be the resulting URL record.

  5. Let settings object be the link element's node document's relevant settings object.

  6. Let credentials mode be the module script credentials mode for the crossorigin attribute.

  7. Let cryptographic nonce be the current value of the element's [[CryptographicNonce]] internal slot.

  8. Let integrity metadata be the value of the integrity attribute, if it is specified, or the empty string otherwise.

  9. Let referrer policy be the current state of the element's referrerpolicy attribute.

  10. Let options be a script fetch options whose cryptographic nonce is cryptographic nonce, integrity metadata is integrity metadata, parser metadata is "not-parser-inserted", credentials mode is credentials mode, and referrer policy is referrer policy.

  11. Fetch a modulepreload module script graph given url, destination, settings object, and options. Wait until the algorithm asynchronously completes with result.

  12. If result is null, then fire an event named error at the link element, and return.

  13. Fire an event named load at the link element.

次の断片は、複数のモジュールがプリロードされるアプリケーションの冒頭部を示する:

<!DOCTYPE html>
<html lang="en">
<title>IRCFog</title>

<link rel="modulepreload" href="app.mjs">
<link rel="modulepreload" href="helpers.mjs">
<link rel="modulepreload" href="irc.mjs">
<link rel="modulepreload" href="fog-machine.mjs">

<script type="module" src="app.mjs">
...

アプリケーションのモジュールグラフが次のようになっていると仮定する:

The module graph is rooted at app.mjs, which depends on irc.mjs and fog-machine.mjs. In turn, irc.mjs depends on helpers.mjs.

ここでは、ユーザーエージェントがすべてのフェッチを開始することを保証するよう、アプリケーション開発者がモジュールグラフにおいてすべてのモジュールをmodulepreloadで使用している。HTTP/2 Server Pushなどの技術が動作していない場合、そのようなプリロードなしでは、ユーザーエージェントはhelpers.mjsを検出する前に複数のネットワークラウンドトリップを行う必要があるだろう。このようにして、modulepreload link要素は、アプリケーションのモジュールのある種の"マニフェスト"として使用することができる。

次のコードは、import()と一緒にmodulepreloadリンクを使用して、ネットワークフェッチが確実に行われるようにする方法を示している。import()が呼び出されるとき、モジュールはモジュールマップ内で既に準備が整っている(ただし評価されない):

<link rel="modulepreload" href="awesome-viewer.mjs">

<button onclick="import('./awesome-viewer.mjs').then(m => m.view())">
  View awesome thing
</button>

nofollowキーワードは、aareaおよびform要素とともに使用されてもよい。このキーワードはハイパーリンクを生成しないが、要素によって作成される他のハイパーリンク(他のキーワードがハイパーリンクを生成しない場合は暗黙のハイパーリンク)の注釈をつける

nofollowキーワードは、ページの原著者や発行者がリンクを保証しないか、2つのページに関係する人々の商業的関係のために参照される文書が主として含まれていることを示す。

Support: rel-noopenerChrome for Android 75+Chrome 49+iOS Safari 10.3+Samsung Internet 5.0+UC Browser for Android 12.12+Firefox 52+Safari 10.1+IE NoneEdge 76+Opera Mini NoneOpera 36+Android Browser 67+

Source: caniuse.com

noopenerキーワードは、aareaおよびform要素とともに使用されてもよい。このキーワードはハイパーリンクを生成しないが、要素によって作成される他のハイパーリンク(他のキーワードがハイパーリンクを生成しない場合は暗黙のハイパーリンク)の注釈をつける

このキーワードは、ハイパーリンクをたどることによって生じる、新しく作成されたトップレベルブラウジングコンテキスト補助ブラウジングコンテキストではないことを示す。たとえば、そのwindow.opener属性はnullになる。

See also the processing model where the branching between an auxiliary browsing context and a top-level browsing context is defined.

これは通常、補助ブラウジングコンテキストを作成する(ブラウジングコンテキスト名が"example"である既存のブラウジングコンテキストがないと仮定する)。

<a href=help.html target=example>Help!</a>

これは補助ブラウジングコンテキストではないトップレベルブラウジングコンテキストを作成する(同じことを仮定して):

<a href=help.html target=example rel=noopener>Help!</a>

これらは同等で、親のブラウジングコンテキストをナビゲートするだけである:

<a href=index.html target=_parent>Home</a>
<a href=index.html target=_parent rel=noopener>Home</a>

Support: rel-noreferrerChrome for Android 75+Chrome 16+iOS Safari 4.0+Samsung Internet 4+UC Browser for Android 12.12+Firefox 33+Safari 5+IE (limited) 11+Edge 13+Opera Mini NoneOpera 15+Android Browser 2.3+

Source: caniuse.com

noreferrerキーワードは、aareaおよびform要素とともに使用されてもよい。このキーワードはハイパーリンクを生成しないが、要素によって作成される他のハイパーリンク(他のキーワードがハイパーリンクを生成しない場合は暗黙のハイパーリンク)の注釈をつける

リンクをたどるときにリファラー情報が漏洩しないことを示し、同じ条件下でのnoopenerキーワードのふるまいも暗示する。

See also the processing model where referrer is directly manipulated.

<a href="..." rel="noreferrer" target="_blank"> has the same behavior as <a href="..." rel="noreferrer noopener" target="_blank">.

openerキーワードは、aareaおよびform要素とともに使用されてもよい。このキーワードはハイパーリンクを生成しないが、要素によって作成される他のハイパーリンク(他のキーワードがハイパーリンクを生成しない場合は暗黙のハイパーリンク)の注釈をつける

このキーワードは、ハイパーリンクをたどることによって生じる、新しく作成されたトップレベルブラウジングコンテキスト補助ブラウジングコンテキストあることを示す。

See also the processing model.

次の例において、openerは、ヘルプページのポップアップがそのオープナーをナビゲートすることを可能にするために使用される(例えば、ユーザーが探しているものが他の場所で見つけられることができる場合)。 代わりに_blankではなく名前付きターゲットを使用することもできるが、これは既存の名前と衝突する可能性がある。

<a href="..." rel=opener target=_blank>Help!</a>

stylesheetキーワードは、link要素とともに使用されてもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

For the semantics of the pingback keyword, see Pingback 1.0. [PINGBACK]

preconnectキーワードはlink要素で使用してもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

preconnectキーワードは、ユーザーがその生成元に位置するリソースを必要とする可能性が高く、かつ、ユーザーエクスペリエンスが接続を確立するとともに関連する待ち時間コストを先取りすることによって改善されるので、指定されたリソースの生成元に接続を先制初期化することが、有益である可能性が高いことを示す。ユーザーエージェントは、Resource Hintsに記載されたpreconnectキーワードの処理モデルを実装しなければならない。[RESOURCEHINTS]

preconnectキーワードで指定されるリソースに対するデフォルトタイプは存在しない。

prefetchキーワードはlink要素と共に使用してもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

prefetchキーワードは、ユーザーが指定されたリソースを必要とすることが高く見込まれるため、事前にそのリソースをフェッチしキャッシュすることが有益であることを示す。ユーザーエージェントは、Resource Hintsに記載されたprefetchキーワードの処理モデルを実装しなければならない。[RESOURCEHINTS]

prefetchキーワードにより与えられたリソースにデフォルトタイプは存在しない。

preloadキーワードはlink要素で使用してもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

preloadキーワードは、ユーザーが現在のナビゲーションにこのリソースを必要とする可能性が高いように、ユーザーエージェントがas属性(およびその対応する宛先に関連付けられた優先度)によって与えられる潜在的な宛先に応じて指定されたリソースを先制フェッチしキャッシュしなければならないことを示す。ユーザーエージェントは、Preloadに記述されるpreloadキーワードの処理モデルを実装しなければならず、また、この仕様のリンクされたリソースアルゴリズムをフェッチしなければならない。[PRELOAD]

preloadキーワードで指定されるリソースに対するデフォルトタイプは存在しない。

The linked resource fetch setup steps for this type of linked resource, given a link element el and request request, are:

  1. Let as be the current state of el's as attribute.

  2. If as does not represent a state, return false.

  3. Set request's destination to the result of translating as.

  4. If as is "image", then:

    1. Let selected source and selected pixel density be the URL andpixel density that results from selecting an image source given el, respectively.

    2. If selected source is null, then return.

    3. Parse selected source, relative to el's node document. If that fails, then return false. Otherwise, let url be the resulting URL record.

    4. Set request's url to url.

  5. Return true.

prerenderキーワードはlink要素で使用してもよい。このキーワードは外部リソースへのリンクを生成する。このキーワードはbody-okである。

prerenderキーワードは、指定されたリソースが次のナビゲーションによって必要とされるかもしれず、そこで、先制リソースを先制フェッチするだけでなく、たとえば、そのサブリソースをフェッチまたはいくつかのレンダリングを行うことで、リソースを処理することを示す。ユーザーエージェントは、Resource Hintsに記載されたprerenderキーワードの処理モデルを実装しなければならない。[RESOURCEHINTS]

prerenderキーワードで指定されるリソースに対するデフォルトタイプは存在しない。

searchキーワードはlinkaareaおよびformの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

searchキーワードは、参照された文書が、現在の文書と関連するリソースを検索するためのインターフェイスを提供することを示す。

ユーザーエージェントが自動的に検索用インターフェイスを発見できるよう、OpenSearch記述文書をlink要素およびsearchリンクタイプに使用できる。[OPENSEARCH]

stylesheetキーワードはlink要素で使用してもよい。このキーワードは、スタイル処理モデルに寄与する外部リソースへのリンクを生成する。このキーワードはbody-okである。

指定されたリソースは、文書をどのように表示するかを記述するCSSスタイルシートである。

alternateキーワードがlink要素で併せて指定される場合、リンクは代替スタイルシートである。この場合、空でない値とともに、link要素でtitle属性が指定されなければならない。

stylesheetキーワードで与えられるリソースのデフォルトタイプはtext/cssである。

The appropriate times to fetch and process this type of link are:

Quirk: If the document has been set to quirks mode, has the same origin as the URL of the external resource, and the Content-Type metadata of the external resource is not a supported style sheet type, the user agent must instead assume it to be text/css.

The linked resource fetch setup steps for this type of linked resource, given a link element el (ignoring the request) are:

  1. If el contributes a script-blocking style sheet, increment el's node document's script-blocking style sheet counter by 1.

  2. Return true.

See issue #968 for plans to use the CSSOM fetch a CSS style sheet algorithm instead of the default fetch and process the linked resource algorithm.

To process this type of linked resource given a link element el, boolean success, and response response, the user agent must run these steps:

  1. If the resource's Content-Type metadata is not text/css, then set success to false.

  2. If el no longer creates an external resource link that contributes to the styling processing model, or if, since the resource in question was fetched, it has become appropriate to fetch it again, then return.

  3. If el has an associated CSS style sheet, remove the CSS style sheet.

  4. If success is true, then:

    1. Create a CSS style sheet with the following properties:

      type

      text/css

      location

      The resulting URL string determined during the fetch and process the linked resource algorithm.

      This is before any redirects get applied.

      owner node

      element

      media

      The media attribute of element.

      This is a reference to the (possibly absent at this time) attribute, rather than a copy of the attribute's current value. CSSOM defines what happens when the attribute is dynamically set, changed, or removed.

      title

      The title attribute of element, if element is in a document tree, or the empty string otherwise.

      This is similarly a reference to the attribute, rather than a copy of the attribute's current value.

      alternate flag

      Set if the link is an alternative style sheet; unset otherwise.

      origin-clean flag

      Set if the resource is CORS-same-origin; unset otherwise.

      parent CSS style sheet
      owner CSS rule

      null

      disabled flag

      Left at its default value.

      CSS rules

      Left uninitialized.

      This doesn't seem right. Presumably we should be using the response body? Tracked as issue #2997.

      The CSS environment encoding is the result of running the following steps: [CSSSYNTAX]

      1. If the element has a charset attribute, get an encoding from that attribute's value. If that succeeds, return the resulting encoding. [ENCODING]

      2. Otherwise, return the document's character encoding. [DOM]

    2. Fire an event named load at el.

  5. Otherwise, fire an event named error at el.

  6. If el contributes a script-blocking style sheet, then:

    1. Assert: el's node document's script-blocking style sheet counter is greater than 0.

    2. Decrement el's node document's script-blocking style sheet counter by 1.

tagキーワードはaareaの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

tagキーワードは、参照される文書に代表されるタグが現在の文書適用されることを示す。

これはタグが現在の文書に適用されることを示すものであるから、このキーワードをタグクラウドのマークアップに用いるのは不適切である。なお、タグクラウドとは、あるページの集合に対してよく使われるタグを一覧にしたものである。

この文書は、宝石に関するページで、"https://en.wikipedia.org/wiki/Gemstone"にタグ付けされている。これにより、たとえば、アメリカの街やRubyのパッケージフォーマット、スイスの機関車種別ではなく、"宝石"の一種であるgemに明確にカテゴライズされる。

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>My Precious</title>
 </head>
 <body>
  <header><h1>My precious</h1> <p>Summer 2012</p></header>
  <p>Recently I managed to dispose of a red gem that had been
  bothering me. I now have a much nicer blue sapphire.</p>
  <p>The red gem had been found in a bauxite stone while I was digging
  out the office level, but nobody was willing to haul it away. The
  same red gem stayed there for literally years.</p>
  <footer>
   Tags: <a rel=tag href="https://en.wikipedia.org/wiki/Gemstone">Gemstone</a>
  </footer>
 </body>
</html>

この文書には2つの記事が存在する。しかし、"tag"リンクはページ全体に適用される。(そして、どこに配置されるかに関係なく適用される。article要素内に配置する場合も同様である。)

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>Gem 4/4</title>
 </head>
 <body>
  <article>
   <h1>801: Steinbock</h1>
   <p>The number 801 Gem 4/4 electro-diesel has an ibex and was rebuilt in 2002.</p>
  </article>
  <article>
   <h1>802: Murmeltier</h1>
   <figure>
    <img src="https://upload.wikimedia.org/wikipedia/commons/b/b0/Trains_de_la_Bernina_en_hiver_2.jpg"
         alt="The 802 was red with pantographs and tall vents on the side.">
    <figcaption>The 802 in the 1980s, above Lago Bianco.</figcaption>
   </figure>
   <p>The number 802 Gem 4/4 electro-diesel has a marmot and was rebuilt in 2003.</p>
  </article>
  <p class="topic"><a rel=tag href="https://en.wikipedia.org/wiki/Rhaetian_Railway_Gem_4/4">Gem 4/4</a></p>
 </body>
</html>

文書によっては、連続する文書の一部を構成する。

連続する文書は、各文書がおよびを持つことができる。兄を持たない文書は文書の最初であり、弟を持たない文書は文書の末尾である。

文書は複数シーケンスの一部であってもよい。

nextキーワードはlinkaareaおよびformの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

nextキーワードは、文書がシーケンスの一部であり、かつリンクがシーケンスにおいて次の論理的な文書に導くリンクであることを示す。

nextキーワードが link 要素とともに使用される場合、ユーザーエージェントはResource Hintsに記述された処理モデルの1つを実装すべきである。つまり、あたかもdns-prefetchpreconnectprefetch、またはprerenderキーワードのいずれかを使用しているかのように、そのようなリンクを処理すべきである。ユーザーエージェントが使用を望むリソースヒントは実装依存である。 例えば、ユーザーエージェントは、データ、バッテリー電力、または処理能力を節約しようとするときに、より安価なpreconnectを使用することを望むことができ、または同様のシナリオにおける過去のユーザー挙動のヒューリスティックな分析に基づいてリソースヒントを選択することができる。[RESOURCEHINTS]

prevキーワードはlinkaareaおよびformの各要素で使用してもよい。このキーワードはハイパーリンクを生成する。

prevキーワードは、文書がシーケンスの一部であり、かつリンクがシーケンスにおいて前の論理的な文書に導くリンクであることを示す。

同義語:歴史的な理由により、ユーザーエージェントはまた、prevキーワードのようなキーワード"previous"を扱わなければならない。

あらかじめ定義されたリンクタイプ群に対する拡張は、microformats wikiのexisting-rel-valuesページにおいて登録してもよい。[MFREL]

microformats wikiのexisting-rel-valuesページには、いつでも、誰でも、自由に新たなリンクタイプを追加できる。拡張されたリンクタイプは以下の情報と共に定義されなければならない:

キーワード

実際の値が定義される。値は、他の定義済みの名前と紛らわしいものであるべきでない(たとえば、大文字と小文字だけが異なる)。

値にU+003A COLON文字(:)を含む場合、その値は絶対URLでなければならない。

linkへの効果

以下のうちの1つをとる:

使用不可
キーワードはlink要素で指定されてはならない。
ハイパーリンク
キーワードをlink要素で指定してもよい。ハイパーリンクを生成する。
外部リソース
キーワードをlink要素で指定してもよい。外部リソースへのリンクを生成する。
aおよびareaへの効果

以下のうちの1つをとる:

使用不可
キーワードはaおよびarea要素で指定されてはならない。
ハイパーリンク
キーワードをaおよびarea要素で指定してもよい。ハイパーリンクを生成する。
外部リソース
キーワードをaおよびarea要素で指定してもよい。外部リソースへのリンクを生成する。
ハイパーリンク注釈
キーワードをaおよびarea要素で指定してもよい。要素によって作成される他のハイパーリンク補足する
formへの効果

以下のうちの1つをとる:

使用不可
キーワードはform要素で指定されてはならない。
ハイパーリンク
キーワードをform要素で指定してもよい。ハイパーリンクを生成する。
外部リソース
キーワードをform要素で指定してもよい。外部リソースへのリンクを生成する。
ハイパーリンク注釈
キーワードをform要素で指定してもよい。要素によって作成される他のハイパーリンク補足する
概要

キーワードが何を意味するかについての規範的でない短い説明。

Specification(仕様)

キーワードのセマンティックスと要件についてのより詳細な説明へのリンク。それはWiki上の別のページかもしれないし、外部ページへのリンクかもしれない。

Synonyms(類義語)

全く同じ処理要件を持つキーワードの一覧。著者は、同義語であると定義された値を使用すべきではなく、同義語はユーザーエージェントがレガシーコンテンツをサポートするためだけのものである。誰もが実際に使用されてない同義語を削除できる。レガシーコンテンツとの互換性のために同義語として処理する必要がある名前のみが、この方法で登録されているのである。

Status(状態)

以下のうちの1つをとる:

Proposed(提案)
広いレビューと承認を受けていないキーワード。誰かが提案済みか提案している、あるいは提案予定であり、使うことができる。
Ratified(承認)
広いレビューと承認を受けたキーワード。それは、明確に不正確な方法で使用する場合を含めて、キーワードを使用するページを処理する方法を明快に定義した仕様を持つ。
Discontinued(中止)
広いレビューを受けており、欠陥が発見されたキーワード。既存のページはこのキーワードを使用しているが、新しいページでは避けるべきである。"brief description"(簡単な説明)と"specification"(仕様書)のエントリは、どちらかといえば著者が代わりに使用すべきものの詳細を提供するだろう。

キーワードが既存の値とともに冗長であることが判明した場合、削除され、既存の値の同義語としてリストされているべきである。

キーワードが、使用するまたは指定することなく一月以上の期間"proposed"(提案)状態で登録されている場合、レジストリーから削除されることがある。

キーワードが"proposed"(提案)状態で追加され、既存の値とともに冗長であることが判明している場合、既存の値の同義語として削除され、リストされているべきである。キーワードは"proposed"(提案)状態で追加され、有害だと判明している場合、"discontinued"(中止)状態に変更すべきである。

誰もがいつでも状態を変更できるが、上記の定義にしたがってのみ行うべきである。

適合性チェッカーは、値が許容されるかどうかを確立するためにmicroformats wikiのexisting-rel-valuesページで指定される情報を使用しなければならない:この仕様で定義されるまたは"proposed"(提案)または"ratified"(承認)としてマークされる値は、"Effect on..."フィールドに記載されるように適用するものに対する要素上で使用される場合に受け入れなければならない。ところが、"discontinued"(中止)としてマークされる値またはこの仕様または前述のページのいずれかで記載されない値は、不正として拒否されなければならない。適合性チェッカーは、この情報をキャッシュしてもよい(たとえば、パフォーマンス上の理由から、または信頼性の低いネットワーク接続を使用することを避けるためなど)。

著者がこの仕様またはWikiページのいずれかで定義されない新しいタイプを使用する場合、適合性チェッカーは詳細は、上記で説明される詳細とともに、"proposed"(提案)状態をもつWikiに値を追加するために提供すべきである。

状態"proposed"また"ratified"とともにmicroformats wikiのexisting-rel-valuesページで拡張として定義されるリンクタイプは、"効果"の定めるところに従って、linkaareaの各要素のrel属性とともに使用してもよい。[MFREL]