An SEO-friendly blog with the Next.js App Router
Build-time HTML, structured data, RSS and a sitemap. A look at how this blog works.
- Published
- Reading
- 1 minutes
- Topics
- Next.js, SEO, Performance
Bring your cursor closer; Uslu will join you.
With pre-rendered HTML, a reader or search engine can access the content without waiting for client-side JavaScript to construct the page. Server Components can produce that HTML at build time, including for a static site.
Posts are Markdown files
Each post is a .md file in content/posts. Its frontmatter contains the title, summary, publication date and tags. English versions live in content/posts/en with the same filename.
---
title: A post title
summary: A short introduction.
date: 2026-10-28
tags: [Next.js, SEO]
---HTML at build time
The unified pipeline converts Markdown to HTML. Shiki and rehype-pretty-code highlight code while the site builds, so syntax highlighting does not require another client-side library. The static output can be served directly by Cloudflare.
Structured data
Every article includes BlogPosting JSON-LD with its author, title and publication date. Canonical links and language alternatives describe each page's place in the site.
RSS and sitemap
/rss.xml and /sitemap.xml are generated from the content catalogue. Adding a post and rebuilding updates them too.