Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Short answer: x-nextjs-cache: HIT reports the Next.js or adapter cache, not Cloudflare’s edge cache. A page can therefore be a framework cache hit while Cloudflare reports MISS, NONE, or no Age header at all. Conversely, Cloudflare can serve an older HTML response during stale-while-revalidate even after the Worker has fresh data. To find the real source of stale content, inspect both cache-status headers together with Age, Cache-Control, entity validators, and Worker timing data.
This distinction matters most on Cloudflare Workers deployments using OpenNext or vinext, where ISR can involve a Next.js incremental cache, a persistent backend such as R2, and Cloudflare’s independent edge cache. The fix depends on which layer owns the old response.
What does x-nextjs-cache: HIT actually mean?
x-nextjs-cache is a signal from the Next.js request path, usually Next.js itself or an adapter such as OpenNext. A value of HIT means that path found a cached result in its incremental-cache workflow. It does not identify the component that delivered bytes to the browser, and it does not prove that the result is newly generated.
Cloudflare exposes a separate signal in CF-Cache-Status. That header describes the edge-cache decision for the response that passed through Cloudflare. If the Worker generated the response or read it from its own persistent incremental cache, Cloudflare may report MISS or NONE/UNKNOWN even while x-nextjs-cache says HIT.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Do not infer freshness from either header in isolation. A framework hit can contain old data, and an edge hit can intentionally be stale under the response’s cache policy.
How does Next.js ISR revalidation work on Workers?
Incremental Static Regeneration (ISR) serves a prerendered response and refreshes it without rebuilding the entire site. Next.js documents two principal invalidation modes: time-based revalidation and on-demand invalidation.
Time-based revalidation
When a route is configured with a revalidation interval, Next.js can continue serving the existing entry until the interval is reached. Regeneration is limited to at most once per configured interval; it is not a guarantee that every request after the interval synchronously waits for a new render. Depending on the runtime and adapter, one request may trigger regeneration while another still receives the prior entry.
Recommended Free Tools
On-demand path or tag invalidation
revalidatePath invalidates a path entry, and regeneration occurs on a subsequent request. Tag-based invalidation follows the same principle: the matching tagged data is marked for refresh, but the request that performs invalidation is not necessarily the request that renders and stores the replacement HTML.
On Workers, the incremental cache also depends on the adapter’s persistence implementation. Next.js states that ISR behavior is runtime-dependent and that adapters have platform-specific support. Cloudflare’s OpenNext guide lists ISR, App Router, Pages Router, SSG, SSR, Server Actions, and streaming as supported, while recommending vinext for new Next.js applications. Record the adapter and runtime versions whenever you investigate an incident.
What is the difference between x-nextjs-cache and CF-Cache-Status?
They answer different questions: “Did the Next.js/adapter cache find an entry?” versus “Did Cloudflare’s edge cache serve or revalidate this response?” Use them as a pair, then confirm with age and policy headers.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
| Signal | Owner | What it tells you | What it cannot prove |
|---|---|---|---|
x-nextjs-cache |
Next.js or the deployment adapter | Whether the framework request path found a cached page or marked it stale | That Cloudflare served the bytes, or that the page reflects current data |
CF-Cache-Status |
Cloudflare edge | Whether the edge missed, hit, refreshed, bypassed, or did not cache the response | Whether an inner Next.js/R2 entry was fresh |
Age |
Cloudflare edge | Approximate seconds an object has resided in the edge cache; normally present on edge HIT, STALE, and UPDATING |
How old the underlying database or API data is |
Cache-Control |
Origin/Worker policy consumed by caches | The browser and shared-cache freshness and stale-serving directives | That every intermediary obeyed the policy identically |
ETag and Last-Modified |
Origin or framework | Validators that allow conditional requests | Which cache layer generated the body |
A response with x-nextjs-cache: HIT, CF-Cache-Status: NONE, and no Age is commonly being served by the Worker or its incremental-cache backend, not by a directly cached Cloudflare object.
Why can Cloudflare serve stale HTML after ISR has revalidated?
Cloudflare may serve an existing edge object while it refreshes that object asynchronously. This is the expected behavior of stale-while-revalidate when the response policy permits it, not proof that ISR failed.
Asynchronous edge refresh
During background refresh Cloudflare can return CF-Cache-Status: UPDATING. The response may carry an Age value because the served object is older than the refresh request. After the refresh finishes, later requests generally become HIT with a newly reset edge age. Directives such as max-age, s-maxage, stale-while-revalidate, must-revalidate, proxy-revalidate, and no-cache determine how much stale service is allowed.
Framework persistence and adapter behavior
OpenNext issue reports describe version-specific failures that can look like Cloudflare staleness. Issue #1295 records a sequence in which revalidateTag ran but the next response still returned x-nextjs-cache: HIT and old content; the report associates the behavior with bypassTagCacheOnCacheHit. Issue #1315 reports time-based fetch-cache entries on deployed Workers that were not rewritten under Next 16, including a production response reported as 16 days old. These reports are evidence to check against the exact versions in use, not a claim that every OpenNext deployment behaves this way.
Cloudflare edge not involved
OpenNext issue #1333 documents HTML responses with x-nextjs-cache: HIT or STALE but without cf-cache-status: HIT and Age. That pattern is consistent with the Worker or an R2-backed incremental cache supplying the response while the outer edge does not cache it.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchHow do I prove which cache served an old response?
Capture several requests to the same URL and compare every layer. Use a cache-busting control URL only when your application permits it; adding a query string can select a different cache key and is not a substitute for testing the production URL.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
- Record the deployment identity. Write down the Next.js version, OpenNext or vinext version, Workers runtime version, adapter configuration, and the incremental-cache backend. A behavior tied to Next 16 or a particular adapter release cannot be diagnosed reliably without these details.
- Request the production URL repeatedly. Save headers and body content from at least two requests before and after an invalidation or content change.
- Inspect both cache-status headers. Capture
x-nextjs-cacheandCF-Cache-Statusexactly, preserving capitalization and values such asMISS,HIT,EXPIRED,REVALIDATED,UPDATING,STALE,BYPASS, andNONE/UNKNOWN. - Check age and freshness policy. Record
Age,Cache-Control,ETag, andLast-Modified. An oldAgewith an edgeHITpoints toward edge TTL or stale-serving policy; noAgewith a framework hit points elsewhere. - Correlate execution telemetry. Capture
Server-Timingand Worker logs. Look for evidence that OpenNext ran, read the incremental cache, rendered the route, or performed a background operation. - Trigger the intended invalidation. Call the exact path or tag used by the application, then make a fresh request. Verify that the spelling, locale prefix, route group, and tag value match the cached entry; a near match invalidates nothing.
curl -sS -D - -o /tmp/page.html https://example.com/news/item
Run the command more than once and keep the complete header sets. Compare the body or a content hash as well as the status values; two responses can share headers while containing different content.
How should I interpret common header combinations?
| Observed combination | Most likely explanation | Next check |
|---|---|---|
Framework HIT + edge MISS or NONE/UNKNOWN + no Age |
Worker or persistent incremental cache supplied the page; Cloudflare did not serve a stored edge object | Inspect OpenNext/vinext cache reads, writes, and backend persistence |
Framework HIT + edge HIT + high Age |
Both layers found entries, and Cloudflare’s object is old | Review s-maxage, stale-while-revalidate, and purge behavior |
Edge UPDATING + Age present |
Cloudflare is serving the prior object while revalidating asynchronously | Wait for a subsequent request and inspect whether the age resets and content changes |
Edge EXPIRED or REVALIDATED |
Cloudflare contacted the origin synchronously | Check the Worker response and its inner Next.js cache result |
Framework STALE + edge NONE/UNKNOWN |
The adapter marked its own entry stale; the edge was not the serving cache | Verify regeneration and persistence logs in the Worker |
These are diagnostic patterns, not hard guarantees. Custom Workers, cache rules, redirects, and intermediary proxies can alter which headers survive, so always correlate the values with logs and the response body.
How do I fix ISR that stays stale on Cloudflare Workers?
Apply the remedy to the layer identified by the evidence. Purging Cloudflare cannot repair an inner R2 entry, and changing an ISR interval cannot remove an already cached edge object.
Use on-demand invalidation for urgent updates
For editorial or inventory changes that must appear promptly, use revalidatePath or tag invalidation rather than waiting for a time interval. Confirm that the invalidation request reaches the same deployment and that the path or tag is identical to the one attached to the cached data. Follow it with a request that exercises the route, because invalidation marks the entry for regeneration rather than necessarily rendering it immediately.
Make cache policy intentional
Define separate expectations for browser freshness, shared Cloudflare freshness, and stale service. Review max-age for browsers, s-maxage for shared caches, and whether stale-while-revalidate is acceptable. Add must-revalidate or proxy-revalidate when serving stale bytes is unacceptable, and avoid no-cache assumptions that differ between browser and edge implementations.
Verify incremental-cache persistence
Ensure the adapter’s backend is writable in the Workers environment and that regenerated entries are actually committed. Background work must be awaited or registered through the Workers-supported mechanism; returning a response before a write completes can leave the next request with the old value. Instrument cache reads, writes, invalidations, and errors rather than logging only the final HTML status.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
Test the adapter and version combination
Compare your deployment with the relevant OpenNext issue reports, especially when using Next 16 or a release that changed fetch-cache behavior. Reproduce the problem in a staging Worker with the same runtime and persistence configuration, then upgrade or pin the adapter only after checking compatibility. For a new Next.js application, evaluate Cloudflare’s current recommendation of vinext and document why your selected adapter supports the ISR features you need.
Which deployment choice gives the clearest ISR behavior?
There is no universal “best” cache arrangement. The practical choice depends on whether you prioritize immediate invalidation, low latency, storage durability, or the simplest observability.
| Design | Cache ownership | Invalidation | Main risk | Operational focus |
|---|---|---|---|---|
| Worker-only incremental cache | Next.js/adapter, with persistent storage if configured | Time-based or path/tag | Persistence or background-write failures can preserve old entries | Instrument cache operations and verify backend writes |
| Worker plus Cloudflare edge cache | Inner incremental cache and outer edge | Application invalidation plus edge TTL/purge | Two independent freshness windows can disagree | Track both status headers, Age, and policy directives |
| Origin revalidation with short edge TTL | Edge stores briefly; Worker regenerates more often | Mostly time-based, with optional on-demand invalidation | Higher origin execution and latency | Balance request cost against freshness requirements |
| Minimal edge caching for dynamic HTML | Primarily Worker/Next.js | Path/tag invalidation | Less edge performance and greater Worker load | Keep persistence reliable and observe regeneration latency |
What should an incident report contain?
- The exact URL, request time in UTC, response body identifier, and whether a cache-busting control was used.
- Complete values for
x-nextjs-cache,CF-Cache-Status,Age,Cache-Control,ETag,Last-Modified, andServer-Timing. - Next.js, OpenNext or vinext, and Workers runtime versions, plus the incremental-cache backend and relevant configuration.
- The precise path or tag invalidated, when it was called, and which request first showed new content.
- Worker logs showing whether the response came from a persistent cache, a render, or a Cloudflare edge hit.
FAQ
Can a browser cache make a correctly revalidated Worker page look stale?
Yes. A browser may reuse a response according to its own max-age even after the Worker and Cloudflare have newer content. Test with a fresh private window or an explicit reload that bypasses the browser cache, then compare the network response headers rather than the DOM alone.
Does purging Cloudflare invalidate Next.js ISR data?
No. An edge purge removes Cloudflare objects, but it does not automatically delete a Next.js incremental-cache entry stored by the Worker or its persistence backend. If the inner entry is old, the next request can repopulate the edge with the same old HTML.
Why might Age be missing even when Cloudflare handled the request?
Cloudflare can process a request without serving a stored cache object, producing a miss, bypass, or non-cacheable response. In those cases there is no resident edge object whose age can be reported; use CF-Cache-Status, cache rules, and Worker timing data together.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Should I remove stale-while-revalidate to guarantee fresh pages?
Removing it can reduce intentional stale service, but it may increase latency and origin or Worker load because refreshes become synchronous or more frequent. First set a maximum acceptable staleness window, then choose directives and invalidation behavior that meet that requirement.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
What is the safest way to upgrade OpenNext or change adapters?
Record the current versions and cache backend, reproduce the stale sequence in a staging Worker, and compare headers, body content, and persistence logs before and after the change. Keep a rollback version available because adapter support for ISR details is runtime- and release-dependent.
Frequently Asked Questions
Can a browser cache make a correctly revalidated Worker page look stale?
Yes. A browser may reuse a response according to its own max-age even after the Worker and Cloudflare have newer content. Test with a fresh private window or an explicit reload that bypasses the browser cache, then compare the network response headers rather than the DOM alone.
Does purging Cloudflare invalidate Next.js ISR data?
No. An edge purge removes Cloudflare objects, but it does not automatically delete a Next.js incremental-cache entry stored by the Worker or its persistence backend. If the inner entry is old, the next request can repopulate the edge with the same old HTML.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Why might Age be missing even when Cloudflare handled the request?
Cloudflare can process a request without serving a stored cache object, producing a miss, bypass, or non-cacheable response. In those cases there is no resident edge object whose age can be reported; use CF-Cache-Status, cache rules, and Worker timing data together.
Should I remove stale-while-revalidate to guarantee fresh pages?
Removing it can reduce intentional stale service, but it may increase latency and origin or Worker load because refreshes become synchronous or more frequent. First set a maximum acceptable staleness window, then choose directives and invalidation behavior that meet that requirement.
What is the safest way to upgrade OpenNext or change adapters?
Record the current versions and cache backend, reproduce the stale sequence in a staging Worker, and compare headers, body content, and persistence logs before and after the change. Keep a rollback version available because adapter support for ISR details is runtime- and release-dependent.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problems

