普通视图

发现新文章,点击刷新页面。
今天 — 2025年11月28日首页

Next.js SEO 优化完整方案

作者 七淮
2025年11月28日 17:51

适用于 Next.js 15(App Router) 的 SEO 全流程优化指南,包括页面级 SEO、站点级 SEO、组件优化、性能优化、结构化数据、国际化等内容。


1. 页面级 SEO

1.1 使用 metadata 配置页面 SEO

// app/page.tsx
export const metadata = {
  title: "首页标题 | 品牌词",
  description: "页面描述,建议 50~160 字。",
  keywords: ["关键词1", "关键词2"],
  openGraph: {
    title: "OG 标题",
    description: "OG 描述",
    url: "https://xxx.com",
    images: [{ url: "/og.jpg" }],
  },
  alternates: {
    canonical: "https://xxx.com",
  },
};

1.2 动态页面 SEO(如文章详情)

// app/blog/[id]/page.tsx
export async function generateMetadata({ params }) {
  const data = await getPost(params.id);

  return {
    title: data.title,
    description: data.summary,
    openGraph: {
      images: data.cover,
    },
    alternates: {
      canonical: `https://xxx.com/blog/${params.id}`,
    },
  };
}

2. 渲染模式与 SEO

渲染方式 SEO 效果 适用场景
SSR(默认) ⭐⭐⭐⭐ 动态数据页面
SSG ⭐⭐⭐⭐⭐ 静态内容、博客
ISR ⭐⭐⭐⭐⭐ 内容频繁更新页面

ISR 使用示例

export const revalidate = 60; // 页面缓存 60 秒

3. URL 结构优化

  • 使用语义化目录: /blog/xxx
  • 避免 query 作主要结构: /search?q=xxx
  • URL 小写、简短、语义化

4. 站点级 SEO

4.1 robots.txt

// app/robots.ts
export default function Robots() {
  return {
    rules: [{ userAgent: "*", allow: "/" }],
    sitemap: "https://xxx.com/sitemap.xml",
  };
}

4.2 sitemap.xml 自动生成

// app/sitemap.ts
export default async function sitemap() {
  const posts = await getPosts();

  return [
    { url: "https://xxx.com", lastModified: new Date() },
    ...posts.map(p => ({
      url: `https://xxx.com/blog/${p.id}`,
      lastModified: p.updated_at,
    })),
  ];
}

5. 组件级 SEO

5.1 使用语义标签

<main>
<article>
<header>
<footer>
<section>
<nav>

5.2 使用 next/image 优化图片

<Image src="/hero.png" alt="banner" width={800} height={600} />

5.3 延迟加载非关键组件

const Comments = dynamic(() => import('./Comments'), { ssr: false });

6. 性能优化(SEO 强关联)

  • 仅在必要组件使用 use client
  • 使用 next/image(自动压缩、lazyload、webp)
  • 减少 API 延迟:Edge Runtime、Server Actions
  • 打包体积优化(减少第三方库)

7. 国际化 SEO(可选)

export const metadata = {
  alternates: {
    canonical: "https://xxx.com",
    languages: {
      "en-US": "https://xxx.com/en",
      "zh-CN": "https://xxx.com/zh",
    },
  },
};

8. 结构化数据(Rich Snippets)

<script type="application/ld+json">
{JSON.stringify({
  "@context": "https://schema.org",
  "@type": "Article",
  headline: title,
  datePublished: created,
  dateModified: updated,
  author: { "@type": "Person", name: "作者名" }
})}
</script>

9. 上线前 SEO Checklist

项目 状态
页面 metadata 配置完整
sitemap.xml 正常生成
robots.txt 正常访问
canonical 链接填写
OG 信息正常
渲染方式:SSR/SSG/ISR
URL 语义化
图片全部用 next/image
lighthouse ≥ 90
结构化数据(可选)

10. metadata 字段说明

字段 作用
title 页面标题
description SEO 摘要
keywords 关键词(影响极弱,可选)
openGraph 社交媒体分享卡片信息
alternates.canonical 主 URL,用于防止重复页面降权
alternates.languages 多语言 SEO

11. 推荐实践总结

  1. 优先 SSR 或 SSG 渲染关键内容
  2. metadata + canonical + sitemap + robots.txt 配置完整
  3. URL 简短语义化,避免重复
  4. 使用 next/image、语义化标签和动态加载优化性能
  5. 配置 OpenGraph 和结构化数据提升社交分享与搜索展示效果
  6. 国际化站点务必设置语言 alternates
  7. 定期使用 Lighthouse 或 PageSpeed 检测性能
昨天 — 2025年11月27日首页

nextjs 16 基础完全指南!(一) - 初步安装

作者 孟祥_成都
2025年11月27日 11:11

注,以下内容过于基础,对于“老鸟”可以跳过文章前面,直接看最后最需要了解的知识点: React 的服务器组件和客户端组件。

前言

首先很多人疑惑为什么要学习 next.js 技术,我从客观角度帮你分析,你需不需要:

  • 一个是未来你想做 remote 也就是远程开发者,next.js 几乎是必备的,因为它最大的优点之一就是全栈,可以将前后端在一起做

这里我简单解释一下,全栈是指前端页面和后端接口服务都可以做,但实际上复杂应用一般还是会前后端分离,但鉴于国外很多小公司,面对的用户数量并不多,所以使用一个技术快速验证商业想法才是最主要的,这是 next.js 很受欢迎的原因。

  • 一个是对 seo 有强烈需求的,seo 你简单理解就是你的网站内容能被搜索引擎爬虫爬到,然后用户搜索的时候,你的页面有机会呈现在搜索引擎中,这是我们传统的单页面应用(SPA)做不到的,当然也有一些其他办法,但没有 next.js 直接。

但是任何技术有利有弊,国内为什么不流行 next.js 的最大原因就是很多 B端 后台系统,根本用不着 next.js ,首先是前后端分离在国内是常见的技术合作模式,其次 B端 后台系统不需要 seo, 只有首页和官网可能需要。

Next 和 React 的区别

简单说一下 reactnext.js 的区别。

本质:Next.js 是一个用于构建全栈 Web 应用程序的 React 框架。

  • React 是一个库,只负责应用的视图层。开发者需要自行选择和配置路由、数据获取等生产级功能。

  • Next.js 是一个框架,它在 React 的基础上,提供了一整套开箱即用的生产就绪功能,并遵循特定的约定和最佳实践。

这里咋们就不说太多概念的东西,例如 Next.js 提供了哪些常见的开箱即用的功能,我们直接上手(毕竟初学看到了这些概念也不知道具体是什么意思)。

学习前提

  • 只需要基本的 HTMLCSSJavaScript 知识,和基本会使用一点 React 就可以开始学习 Next.js
  • 需要你安装了 Node.js (版本建议 20 以上)
  • 安装命令:npx create-next-app@latest
    • 然后会让你输入项目名称,你可以直接回车默认,也可以输入你喜欢的名称。
    • 最后设置一些选项,等待下载完依赖包,就可以完成安装了

image.png

最后使用 npm run dev(你用 pnpmpnpm run dev) 就可以启动了:

image.png

对于访问的 URL(如 /),Next.js 在 app 目录下找到对应的 page.tsx 组件。

Next.js 项目结构解析

一个基础的 Next.js 项目包含以下核心部分:

  • 4个主要文件夹:.next, node_modules, public, src (或 app)

    • .next: 是构建输出目录,自动生成,无需手动修改。这是当你运行 npm run dev、npm run build 或 npm run start 时,Next.js 构建工具链生成的优化后的生产就绪代码,例如包含编译后的 JavaScript 和 CSS 文件。
    • node_modules: 是安装第三包包的目录
    • public: 静态资源目录, 例如图片和字体都可以放进来。
    • src/ 或 app/ - 应用源代码目录(你的主战场):这是你作为开发者最常工作和编写代码的地方。
  • 10个左右配置文件:包括 package.json、Next.js 和各类工具的配置文件。

    • package.json,主要包含以下两部分:

      • 依赖管理:列出 next, react, react-dom 等核心库。
      • 脚本命令:定义 dev (开发), build (构建), start (生产启动), lint (代码检查)具体使用的命令是什么。
    • image.png

    • next.config.js (Next.js 配置)

    • tsconfig.json (TypeScript 配置)

    • eslint.config.js (代码规范检查)

    • tailwind.config.js (Tailwind CSS 配置)

    • .gitignore:版本控制忽略文件。

    • README.md:项目说明文档。

    • next-env.d.ts:Next.js 的 TypeScript 类型声明。

    • favicon.ico浏览器标签页图标。

    • globals.css全局样式文件。

    • layout.tsx根布局:定义所有页面共享的 UI(如导航栏、页脚)。

    • page.tsx首页组件:对应路由 / (localhost:3000) 的页面内容。

服务器从根布局 layout.tsx 开始渲染(也就是 app 下的 layout 文件开始渲染 )。虽然是从 layout.tsx 渲染,但 layout.tsx 主要作用是共享 UI,也就是例如头部导航栏所有组件一般都会用到,所以 layout.tsx 里面的代码会共享给所有组件,但如果你只看当前路由渲染的内容,是在 page.tsx 文件中。

对于访问的 URL(如 /),Next.js 在 app 目录下找到对应的 page.tsx 组件。

image.png

React 服务器组件核心概

根本性变革

RSC(React Server Component 也就是 React 服务端组件) 是 React 团队引入的新架构,并已被 Next.js 广泛采用。

它彻底改变了 React 组件的构建方式,将组件明确划分为两种类型:服务器组件和客户端组件。

两种组件对比

特性 服务器组件 客户端组件
默认状态 Next.js 中所有组件默认都是服务器组件 需要明确使用 'use client' 指令
运行环境 在服务器端渲染 在浏览器端渲染
能力/优势 执行服务端任务: • 直接读取文件 • 从数据库获取数据 实现交互性: • 使用 React Hooks • 处理用户交互事件
限制 不能使用 React Hooks 或处理用户交互 不能执行服务端任务

关键:

  • 服务器组件用于等待异步操作(如数据获取)完成后渲染内容。其中不能使用 React 的 Hook,只有客户端组件才可以,并且需要在文件开头,写上 'use client' 字符串,表明是客户端组件!
❌
❌