1. 4.6 Links
      1. 4.6.1 Introduction
      2. 4.6.2 Links created by a and area elements
      3. 4.6.3 API for a and area elements
      4. 4.6.4 Downloading resources
      5. 4.6.5 Hyperlink auditing
        1. 4.6.5.1 The `Ping-From` and `Ping-To` headers
      6. 4.6.6 Link types
        1. 4.6.6.1 Link type "alternate"
        2. 4.6.6.2 Link type "author"
        3. 4.6.6.3 Link type "bookmark"
        4. 4.6.6.4 Link type "canonical"
        5. 4.6.6.5 Link type "dns-prefetch"
        6. 4.6.6.6 Link type "external"
        7. 4.6.6.7 Link type "help"
        8. 4.6.6.8 Link type "icon"
        9. 4.6.6.9 Link type "license"
        10. 4.6.6.10 Link type "manifest"
        11. 4.6.6.11 Link type "modulepreload"
        12. 4.6.6.12 Link type "nofollow"
        13. 4.6.6.13 Link type "noopener"
        14. 4.6.6.14 Link type "noreferrer"
        15. 4.6.6.15 Link type "opener"
        16. 4.6.6.16 Link type "pingback"
        17. 4.6.6.17 Link type "preconnect"
        18. 4.6.6.18 Link type "prefetch"
        19. 4.6.6.19 Link type "preload"
        20. 4.6.6.20 Link type "prerender"
        21. 4.6.6.21 Link type "search"
        22. 4.6.6.22 Link type "stylesheet"
        23. 4.6.6.23 Link type "tag"
        24. 4.6.6.24 Sequential link types
          1. 4.6.6.24.1 Link type "next"
          2. 4.6.6.24.2 Link type "prev"
        25. 4.6.6.25 Other link types

4.6.1 Introduction

Links are a conceptual construct, created by a, area, form, search, and link elements, that represent a connection between two resources, one of which is the current Document. There are two kinds of links in HTML:

Links to external resources

These are links to resources that are to be used to augment the current document, generally automatically processed by the user agent. All external resource links have a fetch and process the linked resource algorithm which describes how the resource is obtained.

Hyperlinks

These are links to other resources that are generally exposed to the user by the user agent so that the user can cause the user agent to navigate to those resources, e.g. to visit them in a browser or download them.

For link elements with an href attribute and a rel attribute, links must be created for the keywords of the rel attribute, as defined for those keywords in the link types section.

Similarly, for a and area elements with an href attribute and a rel attribute, links must be created for the keywords of the rel attribute as defined for those keywords in the link types section. Unlike link elements, however, a and area elements with an href attribute that either do not have a rel attribute, or whose rel attribute has no keywords that are defined as specifying hyperlinks, must also create a hyperlink. This implied hyperlink has no special meaning (it has no link type) beyond linking the element's node document to the resource given by the element's href attribute.

Similarly, for forms with a rel attribute, links must be created for the keywords of the rel attribute as defined for those keywords in the link types section. forms that do not have a rel attribute, or whose rel attribute has no keywords that are defined as specifying hyperlinks, must also create a hyperlink.

A hyperlink can have one or more hyperlink annotations that modify the processing semantics of that hyperlink.

The href attribute on a and area elements must have a value that is a valid URL potentially surrounded by spaces.

The href attribute on a and area elements is not required; when those elements do not have href attributes they do not create hyperlinks.

The target attribute, if present, must be a valid browsing context name or keyword. It gives the name of the browsing context that will be used.

When an a or area element's activation behavior is invoked, the user agent may allow the user to indicate a preference regarding whether the hyperlink is to be used for navigation or whether the resource it specifies is to be downloaded.

In the absence of a user preference, the default should be navigation if the element has no download attribute, and should be to download the specified resource if it does.

Whether determined by the user's preferences or via the presence or absence of the attribute, if the decision is to use the hyperlink for navigation then the user agent must follow the hyperlink, and if the decision is to use the hyperlink to download a resource, the user agent must download the hyperlink. These terms are defined in subsequent sections below.

The download attribute, if present, indicates that the author intends the hyperlink to be used for downloading a resource. The attribute may have a value; the value, if any, specifies the default filename that the author recommends for use in labeling the resource in a local file system. There are no restrictions on allowed values, but authors are cautioned that most file systems have limitations with regard to what punctuation is supported in filenames, and user agents are likely to adjust filenames accordingly.

Element/a#attr-ping

Support in all current engines.

Firefox🔰 YesSafari6+Chrome12+
Opera15+Edge79+
Edge (Legacy)17+Internet ExplorerNo
Firefox AndroidNoSafari iOS6+Chrome Android18+WebView Android37+Samsung Internet1.0+Opera Android14+

The ping attribute, if present, gives the URLs of the resources that are interested in being notified if the user follows the hyperlink. The value must be a set of space-separated tokens, each of which must be a valid non-empty URL whose scheme is an HTTP(S) scheme.

HTMLAnchorElement/relList

Support in all current engines.

Firefox30+Safari9+Chrome65+
Opera52+Edge79+
Edge (Legacy)18Internet ExplorerNo
Firefox Android30+Safari iOS9+Chrome Android65+WebView Android65+Samsung Internet9.0+Opera Android47+

The rel attribute on a and area elements controls what kinds of links the elements create. The attribute's value must be an unordered set of unique space-separated tokens. The allowed keywords and their meanings are defined below.

rel's supported tokens are the keywords defined in HTML link types which are allowed on a and area elements, impact the processing model, and are supported by the user agent. The possible supported tokens are noreferrer, noopener, and opener. rel's supported tokens must only include the tokens from this list that the user agent implements the processing model for.

The rel attribute has no default value. If the attribute is omitted or if none of the values in the attribute are recognized by the user agent, then the document has no particular relationship with the destination resource other than there being a hyperlink between the two.

The hreflang attribute on a elements that create hyperlinks, if present, gives the language of the linked resource. It is purely advisory. The value must be a valid BCP 47 language tag. [BCP47]

The type attribute, if present, gives the MIME type of the linked resource. It is purely advisory. The value must be a valid MIME type string.

The referrerpolicy attribute is a referrer policy attribute. Its purpose is to set the referrer policy used when following hyperlinks. [REFERRERPOLICY]

4.6.3 API for a and area elements

hyperlink.toString()
hyperlink.href

Returns the hyperlink's URL.

Can be set, to change the URL.

hyperlink.origin

Returns the hyperlink's URL's origin.

hyperlink.protocol

Returns the hyperlink's URL's scheme.

Can be set, to change the URL's scheme.

hyperlink.username

Returns the hyperlink's URL's username.

Can be set, to change the URL's username.

hyperlink.password

Returns the hyperlink's URL's password.

Can be set, to change the URL's password.

hyperlink.host

Returns the hyperlink's URL's host and port (if different from the default port for the scheme).

Can be set, to change the URL's host and port.

hyperlink.hostname

Returns the hyperlink's URL's host.

Can be set, to change the URL's host.

hyperlink.port

Returns the hyperlink's URL's port.

Can be set, to change the URL's port.

hyperlink.pathname

Returns the hyperlink's URL's path.

Can be set, to change the URL's path.

hyperlink.search

Returns the hyperlink's URL's query (includes leading "?" if non-empty).

Can be set, to change the URL's query (ignores leading "?").

hyperlink.hash

Returns the hyperlink's URL's fragment (includes leading "#" if non-empty).

Can be set, to change the URL's fragment (ignores leading "#").

4.6.4 Downloading resources

HTMLAnchorElement/download

Support in all current engines.

Firefox20+Safari10.1+Chrome15+
Opera15+Edge79+
Edge (Legacy)13+Internet ExplorerNo
Firefox Android20+Safari iOS10.3+Chrome Android18+WebView Android≤37+Samsung Internet1.0+Opera Android14+

In some cases, resources are intended for later use rather than immediate viewing. To indicate that a resource is intended to be downloaded for use later, rather than immediately used, the download attribute can be specified on the a or area element that creates the hyperlink to that resource.

The attribute can furthermore be given a value, to specify the filename that user agents are to use when storing the resource in a file system. This value can be overridden by the `Content-Disposition` HTTP header's filename parameters. [RFC6266]

In cross-origin situations, the download attribute has to be combined with the `Content-Disposition` HTTP header, specifically with the attachment disposition type, to avoid the user being warned of possibly nefarious activity. (This is to protect users from being made to download sensitive personal or confidential information without their full understanding.)

The ping attribute is redundant with pre-existing technologies like HTTP redirects and JavaScript in allowing web pages to track which off-site links are most popular or allowing advertisers to track click-through rates.

However, the ping attribute provides these advantages to the user over those alternatives:

Thus, while it is possible to track users without this feature, authors are encouraged to use the ping attribute so that the user agent can make the user experience more transparent.

4.6.5.1 The `Ping-From` and `Ping-To` headers

The `Ping-From` and `Ping-To` HTTP request headers are included in hyperlink auditing requests. Their value is a URL, serialized.

4.6.6 Link types

Link_types

Support in all current engines.

Firefox1+SafariYesChrome1+
OperaYesEdge79+
Edge (Legacy)12+Internet ExplorerYes
Firefox Android4+Safari iOSYesChrome AndroidYesWebView AndroidYesSamsung InternetYesOpera AndroidYes

Link_types

The following table summarizes the link types that are defined by this specification, by their corresponding keywords. This table is non-normative; the actual definitions for the link types are given in the next few sections.

In this section, the term referenced document refers to the resource identified by the element representing the link, and the term current document refers to the resource within which the element representing the link finds itself.

Except where otherwise specified, a keyword must not be specified more than once per rel attribute.

Some of the sections that follow the table below list synonyms for certain keywords. The indicated synonyms must not be used in documents (for example, the keyword "copyright").

Keywords are always ASCII case-insensitive.

Thus, rel="next" is the same as rel="NEXT".

Keywords that are body-ok affect whether link elements are allowed in the body. The body-ok keywords are dns-prefetch, modulepreload, pingback, preconnect, prefetch, preload, prerender, and stylesheet.

New link types that are to be implemented by web browsers are to be added to this standard. The remainder can be registered as extensions.

Link typeEffect on...body-okBrief description
linka and areaform
alternateHyperlinknot allowed · Gives alternate representations of the current document.
canonicalHyperlinknot allowed · Gives the preferred URL for the current document.
authorHyperlinknot allowed · Gives a link to the author of the current document or article.
bookmarknot allowedHyperlinknot allowed · Gives the permalink for the nearest ancestor section.
dns-prefetchExternal Resourcenot allowed Yes Specifies that the user agent should preemptively perform DNS resolution for the target resource's origin.
externalnot allowedAnnotation · Indicates that the referenced document is not part of the same site as the current document.
helpHyperlink · Provides a link to context-sensitive help.
iconExternal Resourcenot allowed · Imports an icon to represent the current document.
manifestExternal Resourcenot allowed · Imports or links to an application manifest. [MANIFEST]
modulepreloadExternal Resourcenot allowed Yes Specifies that the user agent must preemptively fetch the module script and store it in the document's module map for later evaluation. Optionally, the module's dependencies can be fetched as well.
licenseHyperlink · Indicates that the main content of the current document is covered by the copyright license described by the referenced document.
nextHyperlink · Indicates that the current document is a part of a series, and that the next document in the series is the referenced document.
nofollownot allowedAnnotation · Indicates that the current document's original author or publisher does not endorse the referenced document.
noopenernot allowedAnnotation · Creates a top-level browsing context that is not an auxiliary browsing context if the hyperlink would create either of those to begin with (i.e., has an appropriate target attribute value).
noreferrernot allowedAnnotation · No `Referer` (sic) header will be included. Additionally, has the same effect as noopener.
openernot allowedAnnotation · Creates an auxiliary browsing context if the hyperlink would otherwise create a top-level browsing context that is not an auxiliary browsing context (i.e., has "_blank" as target attribute value).
pingbackExternal Resourcenot allowed Yes Gives the address of the pingback server that handles pingbacks to the current document.
preconnectExternal Resourcenot allowed Yes Specifies that the user agent should preemptively connect to the target resource's origin.
prefetchExternal Resourcenot allowed Yes Specifies that the user agent should preemptively fetch and cache the target resource as it is likely to be required for a followup navigation.
preloadExternal Resourcenot allowed Yes Specifies that the user agent must preemptively fetch and cache the target resource for current navigation according to the potential destination given by the as attribute (and the priority associated with the corresponding destination).
prerenderExternal Resourcenot allowed Yes Specifies that the user agent should preemptively fetch the target resource and process it in a way that helps deliver a faster response in the future.
prevHyperlink · Indicates that the current document is a part of a series, and that the previous document in the series is the referenced document.
searchHyperlink · Gives a link to a resource that can be used to search through the current document and its related pages.
stylesheetExternal Resourcenot allowed Yes Imports a style sheet.
tagnot allowedHyperlinknot allowed · Gives a tag (identified by the given address) that applies to the current document.
4.6.6.1 Link type "alternate"

Alternative_style_sheets

Support in one engine only.

Firefox3+Safari?Chrome1–48
OperaYesEdgeNo
Edge (Legacy)?Internet Explorer8+
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

The alternate keyword may be used with link, a, and area elements.

The meaning of this keyword depends on the values of the other attributes.

If the element is a link element and the rel attribute also contains the keyword stylesheet

The alternate keyword modifies the meaning of the stylesheet keyword in the way described for that keyword. The alternate keyword does not create a link of its own.

Here, a set of link elements provide some style sheets:

<!-- 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">
If the alternate keyword is used with the type attribute set to the value application/rss+xml or the value application/atom+xml

The keyword creates a hyperlink referencing a syndication feed (though not necessarily syndicating exactly the same content as the current page).

The following link elements give syndication feeds for a blog:

<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">

Such link elements would be used by user agents engaged in feed autodiscovery, with the first being the default (where applicable).

The following example offers various different syndication feeds to the user, using a elements:

<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>

These links would not be used in feed autodiscovery.

Otherwise

The keyword creates a hyperlink referencing an alternate representation of the current document.

The nature of the referenced document is given by the hreflang, and type attributes.

If the alternate keyword is used with the hreflang attribute, and that attribute's value differs from the document element's language, it indicates that the referenced document is a translation.

If the alternate keyword is used with the type attribute, it indicates that the referenced document is a reformulation of the current document in the specified format.

The hreflang and type attributes can be combined when specified with the alternate keyword.

The following example shows how you can specify versions of the page that use alternative formats, are aimed at other languages, and that are intended for other media:

<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">

This relationship is transitive — that is, if a document links to two other documents with the link type "alternate", then, in addition to implying that those documents are alternative representations of the first document, it is also implying that those two documents are alternative representations of each other.

The author keyword may be used with link, a, and area elements. This keyword creates a hyperlink.

For a and area elements, the author keyword indicates that the referenced document provides further information about the author of the nearest article element ancestor of the element defining the hyperlink, if there is one, or of the page as a whole, otherwise.

For link elements, the author keyword indicates that the referenced document provides further information about the author for the page as a whole.

The "referenced document" can be, and often is, a mailto: URL giving the email address of the author. [MAILTO]

The bookmark keyword may be used with a and area elements. This keyword creates a hyperlink.

The bookmark keyword gives a permalink for the nearest ancestor article element of the linking element in question, or of the section the linking element is most closely associated with, if there are no ancestor article elements.

The following snippet has three permalinks. A user agent could determine which permalink applies to which part of the spec by looking at where the permalinks are given.

 ...
 <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>
 ...

The canonical keyword may be used with link element. This keyword creates a hyperlink.

The canonical keyword indicates that URL given by the href attribute is the preferred URL for the current document. That helps search engines reduce duplicate content, as described in more detail in The Canonical Link Relation. [RFC6596]

Link_types/dns-prefetch

Firefox3+Safari?Chrome46+
Opera33+Edge79+
Edge (Legacy)NoInternet Explorer?
Firefox Android4+Safari iOS?Chrome AndroidYesWebView Android46+Samsung InternetYesOpera Android?

The dns-prefetch keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

The dns-prefetch keyword indicates that preemptively performing DNS resolution for the origin of the specified resource is likely to be beneficial, as it is highly likely that the user will require resources located at that origin, and the user experience would be improved by preempting the latency costs associated with DNS resolution. [RESOURCEHINTS]

There is no default type for resources given by the dns-prefetch keyword.

The external keyword may be used with a, area, form, and search elements. This keyword does not create a hyperlink, but annotates any other hyperlinks created by the element (the implied hyperlink, if no other keywords create one).

The external keyword indicates that the link is leading to a document that is not part of the site that the current document forms a part of.

The help keyword may be used with link, a, area, form, and search elements. This keyword creates a hyperlink.

For a, area, form, and search elements, the help keyword indicates that the referenced document provides further help information for the parent of the element defining the hyperlink, and its children.

In the following example, the form control has associated context-sensitive help. The user agent could use this information, for example, displaying the referenced document if the user presses the "Help" or "F1" key.

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

For link elements, the help keyword indicates that the referenced document provides help for the page as a whole.

For a and area elements, on some browsers, the help keyword causes the link to use a different cursor.

4.6.6.8 Link type "icon"

Link_types#icon

Support in all current engines.

Firefox2+Safari3.1+Chrome4+
Opera9+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android4+Safari iOSNoChrome Android18+WebView Android38+Samsung Internet4.0+Opera AndroidNo
caniuse.com table

The icon keyword may be used with link elements. This keyword creates an external resource link.

Icons could be auditory icons, visual icons, or other kinds of icons.

The sizes keywords represent icon sizes in raw pixels (as opposed to CSS pixels).

An icon that is 50 CSS pixels wide intended for displays with a device pixel density of two device pixels per CSS pixel (2x, 192dpi) would have a width of 100 raw pixels. This feature does not support indicating that a different resource is to be used for small high-resolution icons vs large low-resolution icons (e.g. 50×50 2x vs 100×100 1x).

The any keyword represents that the resource contains a scalable icon, e.g. as provided by an SVG image.

The keywords specified on the sizes attribute must not represent icon sizes that are not actually available in the linked resource.

The following snippet shows the top part of an application with several icons.

<!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>
  ...

For historical reasons, the icon keyword may be preceded by the keyword "shortcut". If the "shortcut" keyword is present, the rel attribute's entire value must be an ASCII case-insensitive match for the string "shortcut icon" (with a single U+0020 SPACE character between the tokens and no other ASCII whitespace).

The license keyword may be used with link, a, area, form, and search elements. This keyword creates a hyperlink.

The license keyword indicates that the referenced document provides the copyright license terms under which the main content of the current document is provided.

This specification does not specify how to distinguish between the main content of a document and content that is not deemed to be part of that main content. The distinction should be made clear to the user.

Consider a photo sharing site. A page on that site might describe and show a photograph, and the page might be marked up as follows:

<!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>

In this case the license applies to just the photo (the main content of the document), not the whole document. In particular not the design of the page itself, which is covered by the copyright given at the bottom of the document. This could be made clearer in the styling (e.g. making the license link prominently positioned near the photograph, while having the page copyright in light small text at the foot of the page).

Link_types/manifest

Support in one engine only.

Firefox?Safari?ChromeNo
OperaNoEdgeNo
Edge (Legacy)NoInternet Explorer?
Firefox Android?Safari iOS?Chrome Android39+WebView Android39+Samsung Internet4.0+Opera Android?

The manifest keyword may be used with link elements. This keyword creates an external resource link.

The manifest keyword indicates the manifest file that provides metadata associated with the current document.

Link_types/modulepreload

Support in one engine only.

Firefox?Safari?Chrome66+
Opera53+Edge79+
Edge (Legacy)NoInternet Explorer?
Firefox Android?Safari iOS?Chrome Android66+WebView Android66+Samsung Internet9.0+Opera Android47+

The modulepreload keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

The modulepreload keyword is a specialized alternative to the preload keyword, with a processing model geared toward preloading module scripts. In particular, it uses the specific fetch behavior for module scripts (including, e.g., a different interpretation of the crossorigin attribute), and places the result into the appropriate module map for later evaluation. In contrast, a similar external resource link using the preload keyword would place the result in the preload cache, without affecting the document's module map.

Additionally, implementations can take advantage of the fact that module scripts declare their dependencies in order to fetch the specified module's dependency as well. This is intended as an optimization opportunity, since the user agent knows that, in all likelihood, those dependencies will also be needed later. It will not generally be observable without using technology such as service workers, or monitoring on the server side. Notably, the appropriate load or error events will occur after the specified module is fetched, and will not wait for any dependencies.

Unlike some other link relations, changing the relevant attributes (such as as, crossorigin, and referrerpolicy) of such a link does not trigger a new fetch. This is because the document's module map has already been populated by a previous fetch, and so re-fetching would be pointless.

The following snippet shows the top part of an application with several modules preloaded:

<!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">
...

Assume that the module graph for the application is as follows:

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.

Here we see the application developer has used modulepreload to declare all of the modules in their module graph, ensuring that the user agent initiates fetches for them all. Without such preloading, the user agent might need to go through multiple network roundtrips before discovering helpers.mjs, if technologies such as HTTP/2 Server Push are not in play. In this way, modulepreload link elements can be used as a sort of "manifest" of the application's modules.

The following code shows how modulepreload links can be used in conjunction with import() to ensure network fetching is done ahead of time, so that when import() is called, the module is already ready (but not evaluated) in the module map:

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

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

The nofollow keyword may be used with a, area, form, and search elements. This keyword does not create a hyperlink, but annotates any other hyperlinks created by the element (the implied hyperlink, if no other keywords create one).

The nofollow keyword indicates that the link is not endorsed by the original author or publisher of the page, or that the link to the referenced document was included primarily because of a commercial relationship between people affiliated with the two pages.

Link_types/noopener

Support in all current engines.

Firefox52+Safari10.1+Chrome49+
Opera36+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android52+Safari iOS10.3+Chrome Android49+WebView Android49+Samsung Internet5.0+Opera Android36+

Link_types/noopener

Support in all current engines.

Firefox52+Safari10.1+Chrome49+
Opera36+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android52+Safari iOS10.3+Chrome Android49+WebView Android49+Samsung Internet5.0+Opera Android36+

The noopener keyword may be used with a, area, form, and search elements. This keyword does not create a hyperlink, but annotates any other hyperlinks created by the element (the implied hyperlink, if no other keywords create one).

The keyword indicates that any newly created top-level browsing context which results from following the hyperlink will not be an auxiliary browsing context. E.g., its window.opener attribute will be null.

This typically creates an auxiliary browsing context (assuming there is no existing browsing context whose browsing context name is "example"):

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

This creates a top-level browsing context that is not an auxiliary browsing context (assuming the same thing):

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

These are equivalent and only navigate the parent browsing context:

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

Link_types/noreferrer

Support in all current engines.

Firefox33+Safari5+Chrome16+
Opera15+Edge79+
Edge (Legacy)13+Internet Explorer🔰 11
Firefox Android33+Safari iOS4.2+Chrome Android18+WebView Android3+Samsung Internet1.5+Opera Android14+

Link_types/noreferrer

Support in all current engines.

Firefox33+Safari5+Chrome16+
Opera15+Edge79+
Edge (Legacy)13+Internet Explorer🔰 11
Firefox Android33+Safari iOS4.2+Chrome Android18+WebView Android3+Samsung Internet1.5+Opera Android14+

The noreferrer keyword may be used with a, area, form, and search elements. This keyword does not create a hyperlink, but annotates any other hyperlinks created by the element (the implied hyperlink, if no other keywords create one).

It indicates that no referrer information is to be leaked when following the link and also implies the noopener keyword behavior under the same conditions.

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

The opener keyword may be used with a, area, form, and search elements. This keyword does not create a hyperlink, but annotates any other hyperlinks created by the element (the implied hyperlink, if no other keywords create one).

The keyword indicates that any newly created top-level browsing context which results from following the hyperlink will be an auxiliary browsing context.

In the following example the opener is used to allow the help page popup to navigate its opener, e.g., in case what the user is looking for can be found elsewhere. An alternative might be to use a named target, rather than _blank, but this has the potential to clash with existing names.

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

The pingback keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

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

Link_types/preconnect

Support in all current engines.

Firefox39+Safari11.1+Chrome46+
Opera33+Edge79+
Edge (Legacy)NoInternet ExplorerNo
Firefox Android39+Safari iOS11.3+Chrome Android46+WebView Android46+Samsung Internet4.0+Opera Android33+

The preconnect keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

The preconnect keyword indicates that preemptively initiating a connection to the origin of the specified resource is likely to be beneficial, as it is highly likely that the user will require resources located at that origin, and the user experience would be improved by preempting the latency costs associated with establishing the connection. [RESOURCEHINTS]

There is no default type for resources given by the preconnect keyword.

Link_types/prefetch

Firefox2+SafariNoChrome8+
Opera15+Edge79+
Edge (Legacy)12+Internet Explorer11
Firefox Android4+Safari iOSNoChrome Android18+WebView Android4.4+Samsung Internet1.5+Opera Android14+

The prefetch keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

The prefetch keyword indicates that preemptively fetching and caching the specified resource is likely to be beneficial, as it is highly likely that the user will require this resource for future navigations. [RESOURCEHINTS]

There is no default type for resources given by the prefetch keyword.

Link_types/preload

Support in one engine only.

Firefox85+Safari?Chrome🔰 50+
Opera37+Edge🔰 79+
Edge (Legacy)NoInternet Explorer?
Firefox Android85+Safari iOS?Chrome Android🔰 50+WebView Android50+Samsung Internet5.0+Opera Android?

The preload keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

The preload keyword indicates that the user agent will preemptively fetch and cache the specified resource according to the potential destination given by the as attribute (and the priority associated with the corresponding destination), as it is highly likely that the user will require this resource for the current navigation. [PRELOAD]

There is no default type for resources given by the preload keyword.

A Document has a map of preloaded resources, which is a map, initially empty.

A preload key is a struct. It has the following items:

URL
A URL
destination
integrity metadata
A string
mode
A request mode, either same-origin", "cors", or "no-cors"
credentials mode
A credentials mode

A preload entry is a struct. It has the following items:

response
Null or a response
on response available
Null, or an algorithm accepting a response or null

To consume a preloaded resource for Window window, given a URL url, a string destination, a string mode, a string credentialsMode, a string integrityMetadata, and onResponseAvailable, which is an algorithm accepting a response:

  1. Let key be a preload key whose URL is url, destination is destination, integrity metadata is integrityMetadata, mode is mode, and credentials mode is credentialsMode.

  2. Let preloads be window's associated Document's map of preloaded resources.

  3. If key does not exist in preloads, then return false.

  4. Let entry be preloads[key].

  5. Remove preloads[key].

  6. If entry response is null, then set entry's on response available to onResponseAvailable.

  7. Otherwise, call onResponseAvailable with entry's response.

  8. Return true.

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

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

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

  3. Let request be the result of creating a link element request given el and the result of translating as.

  4. If request is null, then return.

  5. If as is "image", then:

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

    2. If selected source is null, then return false.

    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.

  6. Let preloadKey be a preload key whose URL is request's URL, destination is request's destination, integrity metadata is request's integrity metadata, mode is request's mode, and credentials mode is request's credentials mode.

  7. Let preloadEntry be a new preload entry.

  8. Set el's node document's map of preloaded resources[preloadKey] to preloadEntry.

  9. Fetch request, with processResponseEndOfBody set to the following steps given response response and null or byte sequence bytesOrNull:

    1. If bytesOrNull is a byte sequence, then set response's body to the first return value of safely extracting bytesOrNull.

      By using processResponseEndOfBody, we have extracted the entire body. This is necessary to ensure the preloader loads the entire body from the network, regardless of whether the preload will be consumed (which is uncertain at this point). This step then resets the request's body to a new body containing the same bytes, so that other specifications can read from it at the time of actual consumption, despite us having already done so once.

    2. Otherwise, set response to a network error.

    3. Finalize and report timing with response, given el's relevant global object and "link".

    4. Fire an event named load at el.

    5. If preloadEntry's on response available is null, then set preloadEntry's response to response.

    6. Otherwise, call preloadEntry's on response available with response.

Link_types/prerender

Support in one engine only.

FirefoxNoSafariNoChrome13+
Opera15+Edge79+
Edge (Legacy)NoInternet Explorer11
Firefox AndroidNoSafari iOSNoChrome Android18+WebView Android4.4+Samsung Internet1.5+Opera Android14+

The prerender keyword may be used with link elements. This keyword creates an external resource link. This keyword is body-ok.

The prerender keyword indicates that the specified resource might be required by the next navigation, and so it may be beneficial to not only preemptively fetch the resource, but also to process it, e.g. by fetching its subresources or performing some rendering. [RESOURCEHINTS]

There is no default type for resources given by the prerender keyword.

The search keyword may be used with link, a, area, form, and search elements. This keyword creates a hyperlink.

The search keyword indicates that the referenced document provides an interface specifically for searching the document and its related resources.

OpenSearch description documents can be used with link elements and the search link type to enable user agents to autodiscover search interfaces. [OPENSEARCH]

The stylesheet keyword may be used with link elements. This keyword creates an external resource link that contributes to the styling processing model. This keyword is body-ok.

The specified resource is a CSS style sheet that describes how to present the document.

If the alternate keyword is also specified on the link element, then the link is an alternative style sheet; in this case, the title attribute must be specified on the link element, with a non-empty value.

The default type for resources given by the stylesheet keyword is text/css.

The tag keyword may be used with a and area elements. This keyword creates a hyperlink.

The tag keyword indicates that the tag that the referenced document represents applies to the current document.

Since it indicates that the tag applies to the current document, it would be inappropriate to use this keyword in the markup of a tag cloud, which lists the popular tags across a set of pages.

This document is about some gems, and so it is tagged with "https://en.wikipedia.org/wiki/Gemstone" to unambiguously categorize it as applying to the "jewel" kind of gems, and not to, say, the towns in the US, the Ruby package format, or the Swiss locomotive class:

<!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>

In this document, there are two articles. The "tag" link, however, applies to the whole page (and would do so wherever it was placed, including if it was within the article elements).

<!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>

Some documents form part of a sequence of documents.

A sequence of documents is one where each document can have a previous sibling and a next sibling. A document with no previous sibling is the start of its sequence, a document with no next sibling is the end of its sequence.

A document may be part of multiple sequences.

The next keyword may be used with link, a, area, form, and search elements. This keyword creates a hyperlink.

The next keyword indicates that the document is part of a sequence, and that the link is leading to the document that is the next logical document in the sequence.

The prev keyword may be used with link, a, area, form, and search elements. This keyword creates a hyperlink.

The prev keyword indicates that the document is part of a sequence, and that the link is leading to the document that is the previous logical document in the sequence.

Extensions to the predefined set of link types may be registered on the microformats page for existing rel values. [MFREL]

Anyone is free to edit the microformats page for existing rel values at any time to add a type. Extension types must be specified with the following information:

Keyword

The actual value being defined. The value should not be confusingly similar to any other defined value (e.g. differing only in case).

If the value contains a U+003A COLON character (:), it must also be an absolute URL.

Effect on... link

One of the following:

Not allowed
The keyword must not be specified on link elements.
Hyperlink
The keyword may be specified on a link element; it creates a hyperlink.
External Resource
The keyword may be specified on a link element; it creates an external resource link.
Effect on... a and area

One of the following:

Not allowed
The keyword must not be specified on a and area elements.
Hyperlink
The keyword may be specified on a and area elements; it creates a hyperlink.
External Resource
The keyword may be specified on a and area elements; it creates an external resource link.
Hyperlink Annotation
The keyword may be specified on a and area elements; it annotates other hyperlinks created by the element.
Effect on... form and search

One of the following:

Not allowed
The keyword must not be specified on forms.
Hyperlink
The keyword may be specified on forms; it creates a hyperlink.
External Resource
The keyword may be specified on forms; it creates an external resource link.
Hyperlink Annotation
The keyword may be specified on forms; it annotates other hyperlinks created by the element.
Brief description

A short non-normative description of what the keyword's meaning is.

Specification

A link to a more detailed description of the keyword's semantics and requirements. It could be another page on the wiki, or a link to an external page.

Synonyms

A list of other keyword values that have exactly the same processing requirements. Authors should not use the values defined to be synonyms, they are only intended to allow user agents to support legacy content. Anyone may remove synonyms that are not used in practice; only names that need to be processed as synonyms for compatibility with legacy content are to be registered in this way.

Status

One of the following:

Proposed
The keyword has not received wide peer review and approval. Someone has proposed it and is, or soon will be, using it.
Ratified
The keyword has received wide peer review and approval. It has a specification that unambiguously defines how to handle pages that use the keyword, including when they use it in incorrect ways.
Discontinued
The keyword has received wide peer review and it has been found wanting. Existing pages are using this keyword, but new pages should avoid it. The "brief description" and "specification" entries will give details of what authors should use instead, if anything.

If a keyword is found to be redundant with existing values, it should be removed and listed as a synonym for the existing value.

If a keyword is registered in the "proposed" state for a period of a month or more without being used or specified, then it may be removed from the registry.

If a keyword is added with the "proposed" status and found to be redundant with existing values, it should be removed and listed as a synonym for the existing value. If a keyword is added with the "proposed" status and found to be harmful, then it should be changed to "discontinued" status.

Anyone can change the status at any time, but should only do so in accordance with the definitions above.

Types defined as extensions in the microformats page for existing rel values with the status "proposed" or "ratified" may be used with the rel attribute on link, a, and area elements in accordance to the "Effect on..." field. [MFREL]