四个独立模板:Minimal、Developer、Magazine、Changelog,各有不同布局与阅读体验
nextjs-seo-geo-blog-templates — Next.js 博客模板
作者 Sheldon-desouza
四个基于 Next.js 的免费 MIT 博客模板,内置 JSON-LD、llms.txt、sitemap、RSS、canonical 和 OG 图片生成,可选通过 scatterpost 从 AI 助手发布。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 2
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
自动生成 JSON-LD 结构化数据、llms.txt、llms-full.txt、sitemap.xml 和 RSS feed
robots.txt 显式允许 GPTBot、ClaudeBot、PerplexityBot 和 Google-Extended
每篇文章生成 canonical 链接与 Open Graph 图片
可选 GA4 分析,带同意横幅,访客同意前不加载分析脚本
可选 scatterpost 连接器,支持从 AI 助手发布并交叉发布到其他平台
模板详细介绍
这个仓库提供四个相互独立的 Next.js 博客模板:Minimal(单栏、衬线字体、明暗模式)、Developer(代码高亮、目录、暗色优先)、Magazine(卡片网格首页、封面图、标签与分类)和 Changelog(博客加更新日志时间线)。每个模板都是自包含的 Next.js App Router 应用,使用 TypeScript、Tailwind CSS 和带 front matter 的 Markdown 文章,可单独部署到 Vercel。
SEO 与 GEO 方面,四个模板都会生成 JSON-LD 结构化数据(BlogPosting、BreadcrumbList、WebSite,以及作者的 Person 和 Organization)、llms.txt 与 llms-full.txt、sitemap.xml、robots.txt(显式允许 GPTBot、ClaudeBot、PerplexityBot 和 Google-Extended)、/feed.xml RSS、每篇文章的 canonical 链接和 Open Graph 图片。还支持通过环境变量配置 Search Console 与 Bing Webmaster 验证,以及可选的 GA4 分析(带同意横幅,访客同意前不加载也不设置分析 cookie)。
文章默认部署后存储在 Vercel Blob,本地开发使用 content/posts/*.md 文件存储,也可选用 Supabase 存储,由 CONTENT_STORE 环境变量切换。scatterpost 是可选的外部服务,用于从 AI 助手发布文章并交叉发布到 Dev.to、LinkedIn 等平台;不启用时博客本身不受影响,两个连接器端点被调用时会返回错误。
限制方面:模板不承诺任何排名、流量或引用效果;演示图片、字体、图标等第三方素材需单独核对许可;域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
适合你的项目吗?
适用场景
- 搭建以 SEO 和 AI 可读性为重点的个人或团队博客
- 为开发者文档或技术文章提供带代码高亮和目录的阅读站点
- 创建带封面图、标签和分类的杂志式内容站点
- 为产品维护博客与更新日志时间线
- 希望从 AI 助手直接撰写并发布文章到自有博客
适合人群
- 熟悉 Next.js 和 Markdown 的前端开发者
- 需要快速部署免费博客并控制代码的个人或小团队
- 重视结构化数据与 AI 爬虫可读性的内容运营者
- 希望将博客部署在 Vercel 并使用自有域名的用户
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
每个模板可单独通过 Vercel 部署按钮克隆到自己的仓库,Root Directory 预设为对应模板目录
- 2
部署时需设置 NEXT_PUBLIC_SITE_URL 为站点的完整 https 地址
- 3
本地开发可在 content/posts 下添加 Markdown 文件,部署后默认使用 Vercel Blob 存储
- 4
可选启用 scatterpost 时,需在 Vercel 项目设置中添加 SCATTERPOST_WEBHOOK_SECRET 并重新部署
- 5
Search Console、Bing、GA4 和 IndexNow 的配置步骤见仓库中的 SETUP.md
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 项目资料提及可选付费版本或功能;本次仅收录公开免费代码,不包含付费升级。
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 部署到 Vercel 时受 Vercel 自身套餐限额约束;scatterpost 是独立产品,仅在需要时才使用。
- scatterpost 是独立工具,提供免费方案和付费方案;如需从 AI 助手发布并交叉发布到其他平台,需使用该外部服务。
- 启用 scatterpost 连接器需在其平台添加 Website 频道,并将密钥填入 SCATTERPOST_WEBHOOK_SECRET 环境变量后重新部署。
- IndexNow 推送默认关闭,需设置 INDEXNOW_KEY 后才对新文章生效。
- GA4 分析为可选功能,需访客同意后才加载并设置分析 cookie。
- 模板不承诺任何排名、流量或引用效果,搜索引擎与 AI 助手如何使用内容由其自行决定。
- Claude、ChatGPT、Gemini、LinkedIn、Dev.to 等名称是其所有者的商标,scatterpost 与它们无关联。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
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.
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.
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.
README 原文
- [x] IndexNow pings for new posts that arrive through the optional connector, once you set `INDEXNOW_KEY` (off by default)
README 原文
- [x] Optional GA4 analytics behind a consent banner: Google Analytics does not load and sets no analytics cookie until a visitor agrees
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.
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.
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-09。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 85 / 100
- 技术栈
- Next.js · React
- 网站类型
- 博客 · 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-10-09
- 截图检查日期
- 2026-10-09
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Next.js。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: codex-user-requested-batch-review-20261017 · 2026-10-16
查看当时使用的来源资料
SHA-256: a148a4f0e9301098e5e7fb15340966f2c0c75e0c86068e5765e0a82a3a5e46ae
2026-10-09T15:30:30.180Z
来源文件 / 仓库# 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)
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

ai-website-cloner-template
Clone any website with one command using AI coding agents
Next.js · 启动器

Next.js SaaS Starter
Next.js SaaS Starter 是 Next.js 官方维护的 SaaS 起点模板,定位介于学习资源和可直接部署的脚手架之间。
Next.js · SaaS

Next.js Commerce
Next.js Commerce 是 Vercel 团队维护的电商启动模板,基于 Next.js App Router 构建,采用服务端渲染、React Server Components、Server Actions …
Next.js · 电商

Next-js-Boilerplate
Next-js-Boilerplate 是一个面向 Next.js 16、Tailwind CSS 4 和 TypeScript 的启动器,核心定位是开发者体验优先。
Next.js · 启动器

tailwind-nextjs-starter-blog
tailwind-nextjs-starter-blog 是一个面向个人技术博客的 Next.js 与 Tailwind CSS 启动模板,其 v2 版本基于 App Router 与 React Server Comp…
Next.js · 博客

next-forge
Production-grade Turborepo template for Next.js apps.
Next.js · 启动器
