HTML link Table

rel valueWhat it loadsField note
stylesheetCSS fileRender-blocking in head - split and media-query what you can
iconFaviconSizes attribute picks among multiple icons
canonicalThe authoritative URLEnds duplicate-content confusion for search engines
preloadFetch now, use lateras="font" / "script"; without as it downloads twice
preconnectWarm the connectionDNS+TCP+TLS handshake early - free speed for known third parties
alternateFeed or language varianttype="application/rss+xml" for feeds; hreflang for languages
modulepreloadPre-fetch an ES moduleParses too, not just downloads
nofollow / noopener / noreferrerLink security trio on anoopener stops tab-nabbing on target=_blank
Reference: the MDN link element reference. link is the head's instruction sheet: it loads stylesheets and icons, declares the canonical URL, warms connections to third-party hosts (preconnect), and pre-fetches what the next page will need (preload). The performance wins are ordered: preconnect for every critical third-party origin, preload for the hero font, modulepreload for the app shell. Bottom line: rel values are a vocabulary - the browser behaves differently for each, and the wrong one (preload without as, canonical pointing at itself repeatedly) is a silent bug. On plain links, the noopener/noreferrer trio protects users from tab-nabbing. Related tools: HTML attributes table, HTTP caching table (the headers preload interacts with), and web vitals table for what these optimize.

The link element is the head's instruction sheet: it loads stylesheets and icons, declares which URL is authoritative, warms connections to third-party hosts, and pre-fetches what the next navigation will need - all without rendering anything itself. The table below is the working eight rel values, ordered by how often they earn their place.

Bottom line: the performance wins are ordered by effort. preconnect for every critical third-party origin (fonts CDN, API host) costs one line and saves full DNS+TCP+TLS handshakes. preload for the hero font - with the as attribute, without which browsers fetch it twice. Everything else (canonical, alternate, icon) is correctness rather than speed, and correctness rows are the ones audits check.

The honest part: link mistakes are silent by design. A preload without as downloads the resource twice (unknown type, then real fetch). A canonical pointing at a URL that redirects points at nothing. And rel values on link are a different vocabulary than the link-security trio on <a> elements (noopener/noreferrer) - same attribute name, different lists.

How to use

  1. Load what renders: stylesheet and icon first - the two rows every page has.
  2. Declare identity: canonical for the authoritative URL, alternate for feeds and language variants.
  3. Then optimize: preconnect known third-party origins, preload only the hero resource with its as type set correctly.

Frequently asked questions

What is the difference between preload and preconnect?

preconnect warms the connection to a host - DNS, TCP and TLS - without downloading anything; use it for origins you will request from soon (a fonts CDN, an API host). preload actually downloads a specific resource you will use on this page. They stack: preconnect the font host, then preload the hero font file itself with as="font" and crossorigin (fonts always need crossorigin, even same-origin - the number one preload mistake).

Why does my preloaded font download twice?

Almost always a missing or mismatched as attribute. preload without as downloads the file blind - the browser cannot match that anonymous request to the later font fetch, which uses CORS - so it fetches twice. as="font" plus crossorigin makes the preloaded response the one the stylesheet actually uses. The second cause is a mismatched crossorigin: preload without it, @font-face request with it - same double-fetch, different trigger.

What does rel=canonical actually do?

It tells search engines which URL is authoritative when the same content is reachable at several URLs (with and without trailing slash, with query parameters, printed in two sections). The canonical link on every duplicate points at the one true URL, consolidating ranking signals. Two rules: absolute URLs only (relative canonical is silently mishandled by some crawlers), and each page canonicals to ITSELF when there is no duplicate - self-canonical is the standard default.

What do noopener and noreferrer do on links?

Wrong table by one tag - those live on <a> elements, not link, and they matter: without them, a page opened via target="_blank" can manipulate the opener through window.opener (tab-nabbing). Modern browsers imply noopener for target="_blank" automatically, which retired most of the risk; noreferrer additionally strips the referrer header. Inside link elements, the security vocabulary is different - it is about what the LINKED-TO resource may do, set via the allow attribute pattern on iframes or Permissions-Policy.

Related tools