Diagnosing Vercel Incremental Static Regeneration (ISR) Stale‑Content Problems
Stale pages on Vercel? Diagnose ISR issues with a step‑by‑step guide: check revalidate values, middleware headers, build settings, and logs. Fix the root cause and know when to ask Vercel support.
16 Mar 2026, 17:33 UTC

Recognizing the Problem
When a page on your Vercel‑hosted site shows data that is older than the revalidate interval you configured, you are witnessing a stale‑content issue. The page may look correct in the browser, but the x-vercel-cache header will reveal that Vercel served a cached copy instead of triggering a revalidation. This can break time‑sensitive content such as product prices or event schedules.
Root‑Cause Table
| Cause | Typical Symptoms | Diagnostic Check |
|---|---|---|
Missing or zero revalidate in getStaticProps |
Page never updates after deployment | Inspect the returned object from getStaticProps |
Edge Middleware sets Cache‑Control: max‑age |
ISR is overridden by middleware cache | Check _middleware.js for cache headers |
| Project setting “Ignore Build Step” enabled | New deployments skip rebuilding static pages | Review Vercel project settings |
| Runtime set to "edge" for ISR page | Revalidation messages absent in logs | Confirm runtime: "edge" is not used with ISR |
Ordered Diagnostic Checklist
- Verify
revalidatevalueOpen the page’s source code and locate
getStaticProps.export async function getStaticProps() { const data = await fetchData(); return { props: { data }, revalidate: 60, // seconds }; }Ensure the value is a positive integer and not omitted or set to
0orfalse. - Check HTTP response headers
Run a quick request from the terminal:
curl -I https://your-site.vercel.app/your-pageLook for
x-vercel-cache: HITandagevalues. A largeageindicates the cached page is still being served. Ifageis0or missing, the page was freshly generated. - Inspect middleware cache headers
Search for any
_middleware.jsor_middleware.tsin the project root or the page’s folder. If you find code like:export function middleware(request) { return new Response(request, { headers: { 'Cache-Control': 'public, max-age=86400', }, }); }Remove or adjust the
max‑ageto a value lower than the ISRrevalidateperiod. - Confirm deployment settings
Navigate to the Vercel dashboard, select your project, and open the Settings → General tab. Ensure the Ignore Build Step toggle is OFF. If it is ON, Vercel will skip the build step, preventing new static pages from being generated.
- Check deployment logs for
getStaticPropsexecutionRun:
vercel logs -e production --tailSearch for “getStaticProps” or “ISR” messages. If you see no entries, the function is not being called, implying a configuration issue.
- Validate runtime configuration
Open
pages/your-page.jsand look for:export const config = { runtime: 'edge' };Using the Edge runtime disables ISR. Remove the line or set
runtime: 'nodejs'if you need ISR.
Fixes Tied to Findings
- Missing / zero
revalidate– Add a positive integer value and redeploy. - Middleware overriding cache – Either delete the middleware or set
Cache‑Control: no-storefor ISR pages. - Ignore Build Step enabled – Turn it OFF, then redeploy.
- Runtime edge with ISR – Switch to the Node.js runtime or remove the
runtimeexport.
Escalation Criteria
If after following the checklist the page still serves stale content, consider:
- Confirm that the deployment actually triggered a rebuild by checking the build status in the Vercel dashboard.
- Verify that the environment variables used in
getStaticPropsare correctly set for the production environment. - Contact Vercel support with the deployment ID, logs excerpt, and the headers you observed. Provide the
getStaticPropscode snippet for reference.
Practical Verification Steps
- Set
revalidate: 1ingetStaticProps. - Deploy the change.
- Fetch the page twice within two seconds using
curl -Iand compare theageheader. The second request should showage: 0or a newx-vercel-cache: HITwith a lower age. - Rollback by reverting the
revalidatevalue if you need to maintain a longer interval.
Conclusion
Stale content on Vercel often boils down to a misconfigured revalidate value or an unintended cache header from middleware. By systematically checking the configuration, headers, and deployment logs, you can pinpoint the root cause and apply the appropriate fix without unnecessary deployments. If the problem persists, Vercel’s support channel is the next logical step.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.