Resource hints prefetch and prerender optimized for likely next navigations
Why it matters
Untargeted prefetching wastes bandwidth — especially on mobile where users pay per megabyte. Unconditionally prefetching all <Link> hrefs in a Next.js app can download 2–3 MB of route bundles that the user never visits (ISO-25010 resource-utilisation). Conversely, missing prefetch on high-probability paths (a paginated list with a 90% chance the user clicks "next") adds 300ms of navigation delay on every click. The gap between what the user is likely to do and what the browser has prefetched is a measurable UX cost.
Severity rationale
Low because the impact is a delay on predictable navigations or wasted bandwidth on low-probability prefetches — real but not blocking correct functionality.
Remediation
Implement targeted prefetch on high-probability navigation paths, not all links. For Next.js, use the prefetch prop selectively and the router for hover-based prefetching:
import { useRouter } from 'next/navigation'
const router = useRouter()
// Prefetch only on hover — not unconditionally
<button onMouseEnter={() => router.prefetch('/checkout')}>
Proceed to Checkout
</button>
For broader speculation, use the Speculation Rules API (Chrome 109+):
<script type="speculationrules">
{
"prefetch": [
{ "source": "document", "where": { "href_matches": "/products/*" } }
]
}
</script>
Only prefetch pages users have >50% probability of visiting next. Disable unconditional prefetch on <Link prefetch={false}> for low-probability destinations.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Performance Core Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- iso-25010:2011 · performance-efficiency.time-behaviour — Time Behaviour
Taxons
History
- 2026-04-18·v1.0.0·Initial import from performance-core·automated