Quick Answer: Prevent over-fetching in Next.js by centralizing data access, caching aggressively, and only requesting the fields and records a route actually needs. Eliminate duplicate requests by sharing a single server-side fetch layer, deduplicating identical calls with memoization or a cache key strategy, and hydrating the client with preloaded data instead of re-fetching on mount.
In Next.js, over-fetching usually happens when pages, components, and client-side effects each call the same API independently, often with broader payloads than necessary. The fix is architectural: fetch once at the closest server boundary, normalize and cache the response, and pass only the minimal data set into downstream components. Use request deduplication patterns such as React cache, Next.js fetch caching, SWR/React Query dedupe intervals, and stable query keys so identical requests collapse into one. Also reduce payload size at the source by using projection fields, pagination, and route-specific endpoints instead of generic all-purpose responses.