Prefetch behaviour
With partialPrefetching on, Next.js prefetches one reusable App Shell per route rather than one prefetch per visible link. A page with twenty links to the same route produces one prefetch, not twenty.
The three destinations below differ only in their prefetch segment export, so the network tab shows what each one costs.
What to check
Prefetching is build-only. Next.js does not prefetch in next dev. Everything on this page needs pnpm build && pnpm start.
The recipe. Open the network tab, filter to Fetch/XHR, clear it, then reload this page and scroll the link groups into view. Prefetches fire as links enter the viewport.
What to expect. The force-disabled destination requests no segment data. Route metadata may still be fetched, but that segment and everything below it are left out. The other two request an App Shell each.
Shared shells. The four links to the same destination in the last group make one request between them, not four. That is the point of partial prefetching.
Per-link escalation. A <Link prefetch={true}> pulls more than the shell. It resolves params, searchParams and the full URL, which costs a server render per link on any page that reads runtime data.
Destinations
prefetch = 'partial'Opts into partial prefetching. Redundant while the global flag is on. This is the per-segment form for adopting it route by route without the flag.
/prefetch/partialno prefetch exportThe default. Follows whatever partialPrefetching is set to app-wide. Do not write prefetch = 'auto' explicitly; omitting the export is the same thing.
/prefetch/autoprefetch = 'force-disabled'Never prefetched. Segment data for this route and everything below it is left out. For rarely visited pages, such as ones behind auth, where a prefetch is wasted work.
/prefetch/disabledLink-level intent
prefetch props. The destination's ceiling still applies, so no link can pull more than the segment permits.<Link prefetch={true}>Also resolves params, searchParams and the full URL, plus the cached content behind them. On a page that reads runtime data, that is one server render per link.
<Link prefetch={false}>Opts out at the link. Wins regardless of how the destination is configured.