Agent-skills-standard nextjs-rendering
Select and implement SSG, SSR, ISR, Streaming, or Partial Prerendering strategies in Next.js App Router. Use when choosing a rendering mode for a page, configuring generateStaticParams, or enabling PPR. (triggers: **/page.tsx, **/layout.tsx, generateStaticParams, dynamic, dynamicParams, PPR, streaming)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/nextjs/nextjs-rendering" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-nextjs-rendering && rm -rf "$T"
manifest:
skills/nextjs/nextjs-rendering/SKILL.mdsource content
Rendering Strategies (App Router)
Priority: P0 (CRITICAL)
Choose rendering strategy based on data freshness and scaling needs. See Strategy Matrix.
Workflow: Choose Rendering Strategy
- Determine data freshness — Static content? Use SSG. Periodic updates? Use ISR. Personalized? Use SSR.
- Configure fetch —
for SSG,force-cache
for ISR,revalidate: N
for SSR.no-store - Add Suspense for streaming — Wrap slow components in
with fallback.<Suspense> - Enable PPR if hybrid — Set
inppr: true
for static shell + dynamic regions.next.config.js
ISR with generateStaticParams Example
Implementation Guidelines
- SSG (Static Site Generation): Default for App Router. Use
to pre-render routes at build time. Triggered bygenerateStaticParams
withfetch
.cache: 'force-cache' - SSR (Server-Side Rendering): Triggered by
,cookies()
, orheaders()
withfetch
. Use for personalized or high-freshness data.cache: 'no-store' - ISR (Incremental Static Regeneration): Update static content after build. Use
(time-based) orrevalidate
/revalidatePath
(on-demand).revalidateTag - Streaming: Use
to wrap slow async components and prevent them from blocking initial page load. UseSuspense
for route-level skeletons.loading.tsx - PPR (Partial Prerendering): Combine static shell with dynamic regions in single HTTP request. Enable
inppr: true
.next.config.js - Strategies: Choose rendering based on SEO (SSG/ISR) vs Interactivity (Client) vs Personalization (SSR). Utilize
to control fallback behavior for uncached routes.dynamicParams - Hydration: Avoid Hydration Errors by not using browser-only values (
,window.innerWidth
) in initial render. UseDate.now()
useEffect pattern.mounted - Edge Runtime: Use
for low-latency globally distributed execution where full Node.js APIs not required.runtime: 'edge'
Anti-Patterns
- No root awaits in
: Wrap slow components inpage.tsx
to stream.<Suspense> - No SSR for static content: Use SSG or ISR; reserve SSR for truly dynamic data.
- No
in initial render: Usetypeof window
to avoid hydration errors.useEffect