<link rel="prefetch">
The prefetch keyword for the rel attribute of the <link> element provides a hint to browsers that the user is likely to need the target resource for future navigations, and therefore the browser can likely improve the user experience by preemptively fetching and caching the resource. <link rel="prefetch"> is used for same-site navigation resources, or for subresources used by same-site pages.
The result is kept in the HTTP cache on disk. Because of this it is useful for prefetching subresources, even if they are not used by the current page. You could also use it to prefetch the next document the user will likely visit on the site. However, as a result you need to be careful with headers — for example certain Cache-Control headers could block prefetching (for example no-cache or no-store).
Note: Because of such limitations, you are advised to use the Speculation Rules API for document prefetches instead, where it is supported.
<link rel="prefetch"> is functionally equivalent to a fetch() call with a priority: "low" option set on it, except that the former will generally have an even lower priority, and it will have a Sec-Purpose: prefetch header set on the request. Note that in general browsers will give prefetch resources a lower priority than preload ones (e.g., requested via <link rel="preload">) — the current page is more important than the next.
The fetch request for a prefetch operation results in an HTTP request that includes the HTTP header Sec-Purpose: prefetch. A server might use this header to change the cache timeouts for the resources, or perform other special handling. The request will also include the Sec-Fetch-Dest header with the value set to empty.
The Accept header in the request will match the value used for normal navigation requests. This allows the browser to find the matching cached resources following navigation.
Browser support
| Feature | Desktop | Mobile | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 110 | 110 | 115 | | 110 | | |
| DOM API | ||||||
deliveryType (navigational-prefetch) Experimental Non-standard `deliveryType="navigational-prefetch"` | 117 | 117 | | | 117 | |
| Other | ||||||
| The prefetch keyword for the rel attribute of the link element provides a hint to browsers that the user is likely to need the target resource for future navigations, and therefore the browser can likely improve the user experience by preemptively fetching and caching the resource. is used for same-site navigation resources, or for subresources used by… | 8 | 12 | 2 | 13.1 | 18 | 13.4 |
http.headers.Sec-Purpose.prefetch `Sec-Purpose` for `<link rel="prefetch">` prefetch | | | 115 | | | |
- Requires secure context
- Requires secure context
- Requires secure context
- Requires an experimental browser flag to be enabled
- Requires secure context
- Requires an experimental browser flag to be enabled
- Doesn't support `Sec-Purpose` for `<link rel="prefetch">`. In Chrome, the legacy `Purpose: prefetch` header is used to indicate a `link` request is a prefetch. See bug 40236973.
- Doesn't support `Sec-Purpose` for `<link rel="prefetch">`. In Edge, the legacy `Purpose: prefetch` header is used to indicate a `link` request is a prefetch. See bug 40236973.
- `Sec-Purpose: prefetch` replaces the non-standard `X-moz: prefetch` header that was used to indicate a `link` prefetch request in earlier versions.
- Prefetch requests should also include the header `Accept` header string for navigations, but `Accept: */*` is sent instead.
- Doesn't support `Sec-Purpose` for `<link rel="prefetch">`. In Chrome Android, the legacy `Purpose: prefetch` header is used to indicate a `link` request is a prefetch. See bug 40236973.
Syntax
<link rel="prefetch" href="/next-page.html">
<link rel="prefetch" href="/js/page2.js" as="script"> Live demo
Prefetch idea
Explain how prefetch prepares likely future navigations or assets at a lower priority.
Good candidates
Prefetch is best for likely future work rather than the current critical path.
Prefetch vs preload
Compare speculative future loading with urgent current-page fetching.
Use cases
-
Control document behavior
Use <link rel="prefetch"> to influence loading, metadata, or script behavior at the document level.
-
Tune performance strategy
Apply <link rel="prefetch"> when earlier resource hints or document settings improve startup or runtime behavior.
Cautions
- Test <link rel="prefetch"> in your target browsers and input environments before depending on it as a primary behavior.
- Provide a fallback path or acceptable degradation strategy when support is still limited.
Accessibility
- Make sure <link rel="prefetch"> supports the intended task without making the page harder to perceive, understand, or operate.