A framework upgrade can change a storefront’s behaviour without changing its visible design. Next.js 15’s October release changes important caching defaults and makes request-related APIs asynchronous. For a headless Magento team, the sensible response is not to turn every cache on or off. It is to state which information can be shared, how fresh it must be and what should invalidate it.

Inventory the responses before changing the configuration

Start with product descriptions, category results, prices, account pages and baskets. They have different requirements. A published description can often tolerate a planned refresh process, while a customer’s basket needs to reflect the correct private state. Treating them all as generic data fetches hides the business meaning of the response.

The release announcement identifies changed defaults for fetch requests, GET Route Handlers and client navigation caching. Review the application paths that depend on those behaviours. An assumption inherited from an earlier framework version should become an explicit decision rather than remain an invisible part of the architecture.

Define the event that makes information stale

A catalogue edit, price change, sign-in or basket mutation can each affect what the storefront should show. Identify which views need refreshing after the event and which can remain unchanged. Broad invalidation may be simpler initially, but it can create unnecessary work or hide an unclear dependency model.

Use a concrete staging example. Change a product description through the intended admin workflow, then inspect the category, product page and direct URL. Repeat with a customer-specific operation. The test should reveal when the new information appears and whether any other visitor can receive a response that does not belong to them.

Choose caching from the business meaning of the response: Public product description; Context-dependent price; Private customer basket; Explicit policy for each
Catalogue content, contextual prices and a private basket need deliberately different freshness and sharing decisions.

Review request context during the upgrade

Next.js 15 also changes request-dependent APIs such as cookies and headers towards asynchronous use. Follow the documented migration path and inspect the resulting code where those values determine identity, store context or response behaviour. A mechanical transformation can assist the work without proving that every business assumption remains correct.

Keep the change review focused. Record the relevant old behaviour, the intended new configuration and the tests used to establish the result. Combining a major redesign with a framework migration can make a failure much harder to attribute to one cause.

Measure useful performance after correctness

Once the sharing and freshness rules are correct, examine response time and the work performed by the application. A very fresh result that requires avoidable repeated work may need optimisation, while a very fast stale price is not an acceptable shortcut. Performance and accuracy should be designed together.

Replace inherited defaults with a cache policy the team can explain. A headless store is easier to maintain when each important response has a known owner, sharing boundary and refresh trigger. The framework supplies mechanisms; the business meaning of the data determines how those mechanisms should be used.