cloudflare/vinext

App Router: client `<Link>` soft navigation triggers full server re-render

Open

#1,523 opened on May 22, 2026

View on GitHub
 (0 comments) (0 reactions) (0 assignees)TypeScript (329 forks)github user discovery
adapter-api-e2ehelp wanted

Repository metrics

Stars
 (8,120 stars)
PR merge metrics
 (Avg merge 1d 1h) (462 merged PRs in 30d)

Description

This issue was created by an agent analysing CI failures from the Next.js Deploy Suite (vinext main vs Next.js v16.2.6, 2026-05-22).

Problem

Soft client-side navigations via <Link> (push, back/forward) trigger a fresh server render instead of reusing the cached client tree. The deployment build ID changes between the initial render and after navigation, indicating the client re-fetches rather than soft-navigates. Layout is re-rendered when it should be reused.

Soft <Link> navigation rerenders layout (build IDs differ)

Estimated Impact

~4 test failures across the deploy suite.

Affected Test Suites

  • test/e2e/app-dir/app/index.test.ts (4 failures)

Recommendation

  1. Reproduce first in vinext's own test suite. Add a test that captures the deployment ID once, navigates via <Link> to a sibling route, and asserts the build ID is the same (i.e. no full server re-render).

  2. Make <Link> navigations use the cached client tree. On click, perform an RSC payload fetch and reuse the existing layout/cache subtree instead of dispatching a full server render.

  3. Cover back/forward. Same expectation applies to history traversal.


Part of #1328.

Contributor guide