Why Vercel ISR reads and writes are high with use-cache despite low traffic

Problem

I’m seeing very high ISR cache activity that doesn’t match my actual traffic.

Setup

  • ~400+ dynamic pages
  • use-cache enabled
  • No time-based revalidate
  • Only using on-demand revalidateTag
  • I did NOT call revalidateTag
  • No recent deployments
  • Only a couple real visitors per day

Current Behavior

For just one day:

  • I’m seeing ~10k ISR reads in a single day
  • Significant ISR writes as well
  • Writes appear to happen across many/all dynamic pages
  • Pages that were not visited still seem to get regenerated
  • Activity continues throughout the day without obvious triggers

Expected Behavior

  • ISR reads roughly proportional to actual traffic
  • Writes only when:
    1. A page is visited after invalidation
    2. A deployment occurs
    3. revalidateTag is called

Environment

  • App Router
  • Dynamic routes (e.g. /[slug])
  • Using use-cache
  • On-demand revalidation via revalidateTag (not triggered)
  • No export const revalidate = X
  • No background jobs or cron hitting these routes

Questions

What can cause ISR reads and writes without user visits, deployments, revalidateTag calls, or time-based revalidation? Are there internal Vercel processes, bot traffic, prefetching, or cache validation mechanisms that could explain this behavior? How can I prevent it so ISR only reads on real requests, only writes on actual invalidation, and does not regenerate untouched dynamic routes? Is there a way to trace what is triggering these regenerations?

1 Like