How to Build a Blog with the Next.js App Router
A blog is one of the best ways to bring organic traffic to a product. Building one in the Next.js App Router is straightforward — and you can make it as simple or as rich as you like.
Where to store content
You have three main options: MDX files in your repo, a structured data format like JSON or typed objects, or a database. Files are great for a personal blog; a database is better when you want a draft/publish workflow, likes, and comments managed from an admin panel.
Dynamic routes
Use a `[slug]` dynamic route for individual posts and a listing page for the index. `generateStaticParams` pre-renders known posts at build time, while `dynamicParams` lets newly published posts render on demand without a rebuild.
SEO for every post
- Generate per-post metadata (title, description, canonical, Open Graph) from the post data.
- Emit BlogPosting JSON-LD so posts are eligible for rich results.
- Add breadcrumbs and internal links to related posts.
- Include each post in your dynamic sitemap.
Add engagement: likes and comments
Likes and comments turn a static blog into a community. Store them in your database, use server actions to record them, and moderate comments before they appear to keep spam out. A denormalized like counter keeps the post page fast.
The KitCraft marketplace blog is built exactly this way — database-backed posts with a draft/publish workflow, likes, and moderated comments — and the same patterns ship in our SaaS templates.
