Four independent templates: Minimal, Developer, Magazine, Changelog, each with different layouts and reading experiences
nextjs-seo-geo-blog-templates — Next.js Blog Template
By Sheldon-desouza
Four free MIT Next.js blog templates with built-in JSON-LD, llms.txt, sitemap, RSS, canonical and OG image generation, and optional publishing from AI assistants via scatterpost.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Automatically generates JSON-LD structured data, llms.txt, llms-full.txt, sitemap.xml, and RSS feed
robots.txt explicitly allows GPTBot, ClaudeBot, PerplexityBot, and Google-Extended
Generates canonical links and Open Graph images for each post
Optional GA4 analytics with a consent banner; analytics scripts are not loaded before visitor consent
Optional scatterpost connector, supporting publishing from AI assistants and cross-posting to other platforms
Template Details
This repository provides four independent Next.js blog templates: Minimal (single column, serif fonts, light and dark modes), Developer (code highlighting, table of contents, dark-first), Magazine (card grid homepage, cover images, tags and categories), and Changelog (blog plus a changelog timeline). Each template is a self-contained Next.js App Router application using TypeScript, Tailwind CSS, and Markdown posts with front matter, and can be deployed separately to Vercel.
For SEO and GEO, all four templates generate JSON-LD structured data (BlogPosting, BreadcrumbList, WebSite, plus the author's Person and Organization), llms.txt and llms-full.txt, sitemap.xml, robots.txt (explicitly allowing GPTBot, ClaudeBot, PerplexityBot, and Google-Extended), /feed.xml RSS, per-post canonical links, and Open Graph images. They also support Search Console and Bing Webmaster verification via environment variables, and optional GA4 analytics (with a consent banner; analytics scripts are not loaded and analytics cookies are not set before visitor consent).
Posts are stored in Vercel Blob by default after deployment, use content/posts/*.md file storage during local development, and can optionally use Supabase storage, switched via the CONTENT_STORE environment variable. scatterpost is an optional external service for publishing posts from AI assistants and cross-posting to platforms such as Dev.to and LinkedIn; when not enabled, the blog itself is unaffected, and the two connector endpoints return errors when called.
Limitations: the templates do not promise any ranking, traffic, or citation results; third-party assets such as demo images, fonts, and icons require separate license verification; external services such as domain, hosting, database, payment, or AI may incur additional charges.
Is it right for your project?
Use Cases
- Building a personal or team blog focused on SEO and AI readability
- Providing a reading site with code highlighting and table of contents for developer documentation or technical articles
- Creating a magazine-style content site with cover images, tags, and categories
- Maintaining a blog and changelog timeline for a product
- Wanting to write and publish posts directly from AI assistants to your own blog
Suitable For
- Front-end developers familiar with Next.js and Markdown
- Individuals or small teams needing to quickly deploy a free blog and control the code
- Content operators who value structured data and AI crawler readability
- Users who want to deploy the blog on Vercel and use their own domain
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Each template can be cloned separately to your own repository via the Vercel deploy button, with the Root Directory preset to the corresponding template directory
- 2
During deployment, set NEXT_PUBLIC_SITE_URL to the site's full https address
- 3
For local development, add Markdown files under content/posts; after deployment, Vercel Blob storage is used by default
- 4
When optionally enabling scatterpost, add SCATTERPOST_WEBHOOK_SECRET in the Vercel project settings and redeploy
- 5
Configuration steps for Search Console, Bing, GA4, and IndexNow are in SETUP.md in the repository
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis listing covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean external services or third-party assets are free.
Must comply with when using
- Permits free use, modification, commercial use, and distribution of that version's code.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Project materials mention optional paid versions or features; this listing covers only the public free code and does not include paid upgrades.
- Demo images, fonts, icons, and other third-party assets require verification under their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domain, hosting, database, payment, or AI may incur additional charges.
- Deployment to Vercel is subject to Vercel's own plan limits; scatterpost is a separate product and is used only when needed.
- scatterpost is an independent tool offering free and paid plans; to publish from AI assistants and cross-post to other platforms, you need to use that external service.
- Enabling the scatterpost connector requires adding a Website channel on its platform and filling the key into the SCATTERPOST_WEBHOOK_SECRET environment variable, then redeploying.
- IndexNow push is disabled by default and takes effect for new posts only after setting INDEXNOW_KEY.
- GA4 analytics is an optional feature and loads and sets analytics cookies only after visitor consent.
- The templates do not promise any ranking, traffic, or citation results; how search engines and AI assistants use content is up to them.
- Names such as Claude, ChatGPT, Gemini, LinkedIn, and Dev.to are trademarks of their owners, and scatterpost is not affiliated with them.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Yes. All four templates are free and MIT licensed. Deploying one to Vercel runs on Vercel's own plan limits; scatterpost is a separate product you only need if you want it.
Original README
Let your AI assistant write and publish here, then share copies to Dev.to, LinkedIn and more. [scatterpost](https://scatterpost.io) is a separate tool, with a free plan and paid plans, that publishes to your blog first, then cross-posts with the canonical link pointing back to your site.
Original README
2. In scatterpost, add a Website channel and paste the secret it gives you into the blog's `SCATTERPOST_WEBHOOK_SECRET` env var, then redeploy. See the [website connector docs](https://scatterpost.io/docs/website-connector), or [connecting an existing site](https://scatterpost.io/docs/existing-site) if you already have a blog.
Original README
- [x] IndexNow pings for new posts that arrive through the optional connector, once you set `INDEXNOW_KEY` (off by default)
Original README
- [x] Optional GA4 analytics behind a consent banner: Google Analytics does not load and sets no analytics cookie until a visitor agrees
Original README
This gives search engines and AI assistants a clean, well-described copy of your site to read. It does not promise any ranking, traffic or citation. What search engines and AI assistants do with it is up to them.
Original README
https://github.com/Sheldon-desouza/nextjs-seo-geo-blog-templates/blob/main/LICENSEhttps://github.com/Sheldon-desouza/nextjs-seo-geo-blog-templates/blob/main/README.mdClaude, ChatGPT, Gemini, LinkedIn, Dev.to and the other platforms named here are trade marks of their owners; scatterpost is not affiliated with them.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-09. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 85 / 100
- Technologies
- Next.js · React
- Website type
- Blog · Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-10-09
- Screenshot last checked
- 2026-10-09
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: codex-user-requested-batch-review-20261017 · 2026-10-16
Inspect the recorded source material
SHA-256: a148a4f0e9301098e5e7fb15340966f2c0c75e0c86068e5765e0a82a3a5e46ae
2026-10-09T15:30:30.180Z
Source file / repository# Next.js SEO and GEO blog templates
Four free, MIT-licensed Next.js blog templates built for SEO and GEO (generative engine optimization, in UK English "optimisation"): structured data, `llms.txt`, a sitemap, an RSS feed, canonical links and social preview images are generated for you.
**Stack:** Next.js App Router, TypeScript, Tailwind CSS, Markdown posts with front matter. Each template is a self-contained app you can deploy on its own.
**Designs:** [Minimal](https://demo.scatterpost.io/minimal/), [Developer](https://demo.scatterpost.io/developer/), [Magazine](https://demo.scatterpost.io/magazine/) and [Changelog](https://demo.scatterpost.io/changelog/). All four are listed below with a live demo and a Deploy to Vercel button. Browse them together in the [demo gallery](https://demo.scatterpost.io/).
They work fully on their own. [scatterpost](https://scatterpost.io) is an optional extra, described in one section near the end.
## Preview
Each demo runs on sample posts so you can click around before you deploy.
<table>
<tr>
<td width="50%">
<a href="https://demo.scatterpost.io/minimal/">
<img src="docs/previews/minimal.gif" width="100%" alt="Minimal template demo">
</a>
<br>
<strong>Minimal</strong>: single column, readable, serif, light and dark.
<br>
<a href="https://demo.scatterpost.io/minimal/">Live demo</a> ·
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fminimal&project-name=my-blog&repository-name=my-blog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL">Deploy</a>
</td>
<td width="50%">
<a href="https://demo.scatterpost.io/developer/">
<img src="docs/previews/developer.gif" width="100%" alt="Developer template demo">
</a>
<br>
<strong>Developer</strong>: syntax highlighting, table of contents, dark-first.
<br>
<a href="https://demo.scatterpost.io/developer/">Live demo</a> ·
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fdeveloper&project-name=my-blog&repository-name=my-blog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL">Deploy</a>
</td>
</tr>
<tr>
<td width="50%">
<a href="https://demo.scatterpost.io/magazine/">
<img src="docs/previews/magazine.gif" width="100%" alt="Magazine template demo">
</a>
<br>
<strong>Magazine</strong>: card grid home with cover images, tags and categories.
<br>
<a href="https://demo.scatterpost.io/magazine/">Live demo</a> ·
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fmagazine&project-name=my-blog&repository-name=my-blog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL">Deploy</a>
</td>
<td width="50%">
<a href="https://demo.scatterpost.io/changelog/">
<img src="docs/previews/changelog.gif" width="100%" alt="Changelog template demo">
</a>
<br>
<strong>Changelog</strong>: blog plus a changelog timeline.
<br>
<a href="https://demo.scatterpost.io/changelog/">Live demo</a> ·
<a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fchangelog&project-name=my-changelog&repository-name=my-changelog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL">Deploy</a>
</td>
</tr>
</table>
## Deploy in one click
Each button clones that one template into its own repository on your own Vercel account, with the project's "Root Directory" preset to that template, and provisions a private Vercel Blob store for it.
| Template | Deploy |
|---|---|
| [`minimal/`](./minimal) | [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fminimal&project-name=my-blog&repository-name=my-blog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL) |
| [`developer/`](./developer) | [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fdeveloper&project-name=my-blog&repository-name=my-blog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL) |
| [`magazine/`](./magazine) | [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fmagazine&project-name=my-blog&repository-name=my-blog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL) |
| [`changelog/`](./changelog) | [](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FSheldon-desouza%2Fnextjs-seo-geo-blog-templates%2Ftree%2Fmain%2Fchangelog&project-name=my-changelog&repository-name=my-changelog&stores=%5B%7B%22type%22%3A%22blob%22%7D%5D&env=NEXT_PUBLIC_SITE_URL) |
Each Deploy button asks for one environment variable, `NEXT_PUBLIC_SITE_URL` (your site's full `https://` address). If you later connect scatterpost, add `SCATTERPOST_WEBHOOK_SECRET` in the Vercel project settings and redeploy. Each template's own README has the full environment variable table.
## What's built in for SEO and AI search
Every item below exists in the code of all four templates.
- [x] JSON-LD structured data (`BlogPosting`, `BreadcrumbList`, `WebSite`, plus `Person` and `Organization` for the author)
- [x] `llms.txt` and `llms-full.txt`, generated from your posts on every request
- [x] `sitemap.xml`, generated
- [x] `robots.txt` that explicitly allows GPTBot, ClaudeBot, PerplexityBot and Google-Extended
- [x] RSS feed at `/feed.xml`
- [x] Canonical links on every post, which use a post's own canonical URL when it has one
- [x] Open Graph images generated for every post
- [x] Search Console and Bing Webmaster verification through `GOOGLE_SITE_VERIFICATION` and `BING_SITE_VERIFICATION`
- [x] IndexNow pings for new posts that arrive through the optional connector, once you set `INDEXNOW_KEY` (off by default)
- [x] Optional GA4 analytics behind a consent banner: Google Analytics does not load and sets no analytics cookie until a visitor agrees
- [x] Light and dark mode, and semantic markup
This gives search engines and AI assistants a clean, well-described copy of your site to read. It does not promise any ranking, traffic or citation. What search engines and AI assistants do with it is up to them.
Step-by-step setup for Search Console, Bing, GA4 and IndexNow is in [`SETUP.md`](./SETUP.md).
## FAQ
**Is this an SEO-friendly blog template?**
It generates the technical pieces that search engines commonly read: structured data, a sitemap, an RSS feed, canonical links and Open Graph images. Whether a page ranks depends on much more than a template, and nothing here guarantees a ranking.
**What is GEO and how does this help?**
GEO is generative engine optimisation (also written "generative engine optimization"): making your content easy for AI assistants and AI search to find and read. These templates publish `llms.txt` and `llms-full.txt` plain-text summaries, structured data, and a `robots.txt` that allows all crawlers and also names GPTBot, ClaudeBot, PerplexityBot and Google-Extended explicitly. That helps an AI system read your site. It does not promise that any assistant will cite you.
**Does it work without scatterpost?**
Yes. Each template is a normal Next.js blog. Add Markdown files under `content/posts` when running locally, or use the connector if you want to publish from an AI assistant. With the scatterpost environment variables unset, the two connector endpoints return an error if called and the rest of the site is unaffected.
**Is it free?**
Yes. All four templates are free and MIT licensed. Deploying one to Vercel runs on Vercel's own plan limits; scatterpost is a separate product you only need if you want it.
**Can I use my own domain?**
Yes. Point any domain at the Vercel project and set `NEXT_PUBLIC_SITE_URL` to it; the canonical links, sitemap, feed and `llms.txt` follow.
**Can I customise the design?**
Yes. Each template is a plain Next.js app you own outright: edit the components, the CSS or the content.
**Where are posts stored?**
In Vercel Blob by default once deployed, with a file store (`content/posts/*.md`) for local development and an optional Supabase store as an alternative. `CONTENT_STORE` chooses between them.
**How do I remove the "Built with" credit?**
Set `NEXT_PUBLIC_SHOW_SCATTERPOST_CREDIT=false` in the deployed project's environment variables and redeploy. If you use scatterpost, the footer then says "Published with scatterpost."; set `NEXT_PUBLIC_SHOW_SCATTERPOST_BADGE=false` as well to show neither.
## Optional: publish from your AI assistant with scatterpost
Let your AI assistant write and publish here, then share copies to Dev.to, LinkedIn and more. [scatterpost](https://scatterpost.io) is a separate tool, with a free plan and paid plans, that publishes to your blog first, then cross-posts with the canonical link pointing back to your site.
Tested with Claude, ChatGPT and Gemini. Publishing through ChatGPT is not yet tested. Other AI apps that support remote MCP connectors with sign-in can use the same address.
1. Deploy a template with the button above.
2. In scatterpost, add a Website channel and paste the secret it gives you into the blog's `SCATTERPOST_WEBHOOK_SECRET` env var, then redeploy. See the [website connector docs](https://scatterpost.io/docs/website-connector), or [connecting an existing site](https://scatterpost.io/docs/existing-site) if you already have a blog.
3. Ask your assistant to publish.
Every template ships `POST /api/scatterpost` (push mode: scatterpost calls this site) and `GET /api/scatterpost/pull` (pull mode: this site polls scatterpost on a schedule). If you stop using scatterpost, the blog and every post stay with you.
Claude, ChatGPT, Gemini, LinkedIn, Dev.to and the other platforms named here are trade marks of their owners; scatterpost is not affiliated with them.
## Reference
### Repository layout
```
LICENSE MIT, Copyright (c) 2026 Sheldon de Souza
AGENTS.md guide for coding agents
llms.txt summary of this repository for AI assistants
shared/ the connector code once: signature verification, payload
validation, the content stores (Vercel Blob, Supabase, file),
pull, slugify, safe HTML and Markdown rendering, plus their tests
scripts/sync-shared.mjs copies shared/ into <template>/src/lib/scatterpost/;
--check exits 1 if any copy has drifted
demo/ static gallery site for demo.scatterpost.io; Vercel Root Directory = demo
minimal/ self-contained Next.js app; Vercel Root Directory = minimal
developer/ self-contained Next.js app; Vercel Root Directory = developer
magazine/ self-contained Next.js app; Vercel Root Directory = magazine
changelog/ self-contained Next.js app; Vercel Root Directory = changelog
```
Each template is self-contained: its own `package.json` and `package-lock.json`, no `workspace:` or `@scatterpost/*` dependency, so `npm install` works from a plain copy of that one folder. The code under each template's `src/lib/scatterpost/` is a synced copy of `shared/`, never hand-edited; run `npm run sync` from the repository root after changing `shared/`, and `npm run check` to confirm nothing has drifted. The `scatterpost` names in folders, modules and environment variables are kept so existing deployments keep working.
### Licence
MIT. Next.js and Vercel are trade marks of Vercel Inc.; this project is not affiliated with or endorsed by Vercel. This repository is independent of scatterpost's own proprietary codebase: nothing here depends on a private package, and these templates may be used, forked and redeployed freely under the terms of the licence.
---
Made by [scatterpost](https://scatterpost.io)
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
