Next.js 独立站点完整技术实现方案
我会给你一套可直接落地、生产级的 Next.js 独立站点开发全流程,从初始化、核心技术选型、页面开发、部署上线全覆盖,适用于博客、官网、产品站、营销站等所有独立站点。
一、技术栈选型(生产环境标配)
- 框架:Next.js 15(App Router 最新标准)
- 语言:TypeScript(类型安全,企业级必备)
- 样式:Tailwind CSS + shadcn/ui(快速开发美观界面)
- 数据:本地 Markdown / 无头CMS(Contentful/Notion)/ 接口请求
- 部署:Vercel(零配置,Next.js 官方推荐)
- 优化:图片优化、SEO、静态生成(SSG)、缓存
二、快速初始化项目
1. 创建 Next.js 项目
npx create-next-app@latest my-site
安装时选择:
- TypeScript ✅
- ESLint ✅
- Tailwind CSS ✅
- App Router ✅
- No src directory ✅
- App Router 路由 ✅
2. 项目核心目录结构(独立站点标准结构)
my-site/
├── app/ # 路由页面(Next.js 15 核心)
│ ├── page.tsx # 首页
│ ├── layout.tsx # 全局布局
│ ├── about/ # 关于页面
│ ├── blog/ # 博客列表页
│ └── [slug]/page.tsx # 博客详情页(动态路由)
├── components/ # 公共组件
├── lib/ # 工具函数、接口、工具类
├── public/ # 静态资源(图片、favicon)
└── content/ # Markdown 文章(静态站点必备)
三、核心功能实现(直接复制可用)
1. 全局布局(app/layout.tsx)
所有页面共享的头部、底部、全局样式
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import Navbar from "@/components/navbar";
import Footer from "@/components/footer";
const inter = Inter({ subsets: ["latin"] });
// SEO 全局配置
export const metadata: Metadata = {
title: "我的独立站点",
description: "基于 Next.js 开发的独立网站",
keywords: "Next.js,独立站点,个人网站",
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="zh-CN">
<body className={inter.className}>
<Navbar />
<main className="min-h-screen">{children}</main>
<Footer />
</body>
</html>
);
}
2. 静态页面开发(首页 / 关于页)
首页(app/page.tsx)
export default function Home() {
return (
<section className="container mx-auto px-4 py-16 text-center">
<h1 className="text-4xl font-bold mb-6">欢迎来到我的独立站点</h1>
<p className="text-lg text-gray-600 mb-8">
基于 Next.js + Tailwind 构建的现代化独立网站
</p>
<button className="bg-blue-600 text-white px-6 py-3 rounded-lg">
了解更多
</button>
</section>
);
}
3. 静态博客功能(Markdown 文章)
独立站点最常用的内容方案:本地 Markdown + SSG 静态生成
步骤1:安装依赖
npm install gray-matter remark remark-html
步骤2:工具函数(lib/markdown.ts)
import fs from "fs";
import path from "path";
import matter from "gray-matter";
import { remark } from "remark";
import html from "remark-html";
// 文章目录
const contentDir = path.join(process.cwd(), "content");
// 获取所有文章列表
export function getAllPosts() {
const files = fs.readdirSync(contentDir);
return files.map((file) => {
const slug = file.replace(/.md$/, "");
const content = fs.readFileSync(path.join(contentDir, file), "utf8");
const { data } = matter(content);
return { slug, ...data };
});
}
// 获取单篇文章详情
export async function getPostBySlug(slug: string) {
const file = fs.readFileSync(path.join(contentDir, `${slug}.md`), "utf8");
const { data, content } = matter(file);
const processedContent = await remark().use(html).process(content);
const htmlContent = processedContent.toString();
return { ...data, content: htmlContent };
}
步骤3:博客列表页(app/blog/page.tsx)
import Link from "next/link";
import { getAllPosts } from "@/lib/markdown";
export default function BlogPage() {
const posts = getAllPosts();
return (
<section className="container mx-auto px-4 py-16">
<h1 className="text-3xl font-bold mb-10">博客文章</h1>
<div className="grid gap-6 md:grid-cols-2">
{posts.map((post) => (
<div key={post.slug} className="border p-6 rounded-lg">
<h2 className="text-xl font-semibold mb-2">{post.title}</h2>
<p className="text-gray-500 mb-4">{post.date}</p>
<Link href={`/blog/${post.slug}`} className="text-blue-600">
阅读全文 →
</Link>
</div>
))}
</div>
</section>
);
}
步骤4:博客详情页(app/blog/[slug]/page.tsx)
import { getPostBySlug, getAllPosts } from "@/lib/markdown";
// 生成静态页面路径(SSG 优化)
export async function generateStaticParams() {
const posts = getAllPosts();
return posts.map((post) => ({ slug: post.slug }));
}
export default async function PostPage({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
return (
<article className="container mx-auto px-4 py-16 max-w-3xl">
<h1 className="text-3xl font-bold mb-4">{post.title}</h1>
<p className="text-gray-500 mb-8">{post.date}</p>
<div dangerouslySetInnerHTML={{ __html: post.content }} />
</article>
);
}
4. 图片优化(Next.js 内置)
Next.js 自动优化图片,无需手动压缩
import Image from "next/image";
import logo from "@/public/logo.png";
export default function Logo() {
return <Image src={logo} alt="logo" width={120} height={40} />;
}
5. SEO 优化(页面独立配置)
// app/blog/[slug]/page.ts
export async function generateMetadata({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
return {
title: post.title,
description: post.description,
};
}
四、本地开发与构建
# 开发模式
npm run dev
# 生产构建
npm run build
# 启动生产服务
npm start
五、一键部署上线(独立站点必备)
推荐:Vercel(零配置、免费、全球CDN)
- 把代码上传到 GitHub
- 打开 Vercel
- 导入你的 GitHub 仓库
- 自动部署完成 → 获得独立域名
备选部署
- Netlify
- Cloudflare Pages
- 阿里云/腾讯云(需配置 Node 服务)
六、生产级优化(必做)
- 静态生成(SSG) :Next.js 默认自动优化,页面秒开
- 图片懒加载:内置 Image 组件自动支持
- 路由预加载:Link 组件自动预加载页面
- GZIP 压缩:Vercel 自动开启
- 缓存策略:自动缓存静态资源
- 移动端适配:Tailwind 自带响应式
七、扩展功能(按需添加)
- 评论系统:Giscus / Disqus
- 搜索功能:Algolia / 本地搜索
- 统计分析:Google Analytics / 百度统计
- 后台管理:Strapi / Contentful
- 表单提交:Formspree / 腾讯云短信
总结
这套方案是目前业界最主流、最稳定的 Next.js 独立站点实现:
- 技术现代化:Next.js 15 + TS + Tailwind
- 开发极快:1 天可完成完整独立站点
- 体验极佳:SSG 静态生成,秒开页面
- SEO 友好:服务端渲染,搜索引擎优先收录
- 零成本部署:Vercel 免费托管自定义域名
你需要我帮你生成完整项目代码包、定制某类站点(官网/博客/作品集) ,或解决部署/SEO问题吗?