Loading post…
Loading post…
8 Sept 20261 min read
Server components, caching gotchas and SEO wins I picked up shipping a real marketplace.
The App Router rewards a simple bias: fetch and render on the server, reach for "use client" only for interaction. Most pages on this portfolio are server components for exactly that reason.
fetch in server components caches by default. For live data, opt out deliberately with cache: "no-store" or export const dynamic = "force-dynamic".generateMetadata runs per route. Give every post its own title, description and OG image.export async function generateMetadata({ params }) {
const post = await getPost(params.slug);
return { title: post.title, description: post.description };
}
<h1> per page.BlogPosting, FAQPage) alongside visible content.Ship the boring SEO first. Fancy can wait.
Links