企业级官网全栈(React·Next.js·Tailwind·Axios·Headless UI·RHF·i18n)实战教程-第六章:Metadata 与 SEO(企业级优化)

第六章:Metadata 与 SEO(企业级优化)

前面我们已经完成了登录、权限等核心能力,现在开始进入前端最容易忽视,但真实生产非常重要的部分:SEO 与元信息管理

Next.js 13+ 在 App Router 时代彻底重构了 Metadata 体系,和老的 next/head 不同,它是类型安全、SSR 友好、自动合并的元信息方案

你将学会:

内容目标
metadata 静态/动态写法为所有页面提供 SEO 信息
多语言 SEO(自动 href-lang你的项目支持 zh/en i18n
Open Graph / Twitter Meta分享时生成带封面预览卡片
结构化数据(JSON-LD)提升搜索权重(企业站必须)
自定义动态标题覆盖产品、新闻、文章详情页必备
robots / sitemap 自动生成全站 SEO 关键配置

1.全局 Metadata 设定

📂 src/app/layout.tsx

export const metadata = {
  title: {
    default: 'Enterprise Platform',
    template: '%s | Enterprise',
  },
  description: '企业级管理平台,支持多语言、权限系统与现代前端架构。',
  keywords: ['Enterprise', 'Management', 'SaaS', 'B2B'],
  creator: 'Enterprise Inc.',
  generator: 'Next.js',
  metadataBase: new URL('https://example.com'),
  openGraph: {
    title: 'Enterprise Platform',
    description: '现代企业管理平台解决方案',
    url: 'https://example.com',
    siteName: 'Enterprise',
    images: ['/og-default.png'],
    locale: 'zh_CN',
    type: 'website',
  },
} satisfies import('next').Metadata;

satisfies Metadata = 类型安全
✔ OpenGraph 结构带分享卡片
template 允许动态替换标题


2.多语言 SEO:自动注入 <link href-lang>

App Router 自带:

export const generateStaticParams = () => locales.map(locale => ({ locale }))

我们增强 metadata 输出语言版本。

📁 src/app/[locale]/layout.tsx

import type { Metadata } from 'next'
import { locales } from '@/lib/i18n/config'

export async function generateMetadata({ params }: { params: { locale: string } }): Promise<Metadata> {
  const { locale } = params

  return {
    alternates: {
      canonical: `/${locale}`,
      languages: Object.fromEntries(
        locales.map((lng) => [lng, `/${lng}`])
      )
    }
  }
}

搜索引擎会知道这页面有多个语言版本(排名会提升)


3.页面级 SEO(产品详情 / 新闻详情特别重要)

📁 src/app/[locale]/products/[id]/page.tsx

import type { Metadata } from 'next'
import { getProductDetail } from '@/services/product.service'

export async function generateMetadata({ params }: { params: { id: string, locale: string }}): Promise<Metadata> {
  const product = await getProductDetail(params.id)

  return {
    title: product.name,
    description: product.summary,
    openGraph: {
      title: product.name,
      description: product.summary,
      images: product.cover ? [product.cover] : ['/og-default.png']
    }
  }
}

export default function ProductDetailPage() { /* ... */ }

✔ SEO 自动按内容生成,不用手写
✔ 微信/Slack 分享时出现真实封面


4.JSON-LD 结构化数据(权重增强)

📁 src/app/[locale]/products/[id]/page.tsx

export default async function ProductDetailPage({ params }: Props) {
  const product = await getProductDetail(params.id)

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: JSON.stringify({
            "@context": "https://schema.org",
            "@type": "Product",
            name: product.name,
            image: product.cover,
            description: product.summary,
            brand: "Enterprise"
          })
        }}
      />
      {/* 页面渲染 */}
    </>
  )
}

在搜索引擎搜索中会出现更详细的展示


5.设置 robots 与 sitemap(SEO 关键)

📁 src/app/robots.ts

import type { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  return {
    rules: { userAgent: '*', allow: '/' },
    sitemap: 'https://example.com/sitemap.xml',
  }
}

📁 src/app/sitemap.ts

import type { MetadataRoute } from 'next'

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    { url: 'https://example.com', lastModified: new Date() },
    { url: 'https://example.com/zh', lastModified: new Date() },
    { url: 'https://example.com/en', lastModified: new Date() },
  ]
}

6.你需要掌握的实践 Checklist

是否完成
Global Metadata(logo、品牌、默认标题)
多语言 alternate
动态页面 SEO generateMetadata
OpenGraph 分享卡片
JSON-LD 结构化数据
robots + sitemap

若全开启,你的网站就已经达成 可收录、可分享、可语言切换、可呈现封面信息
真正达到企业 SEO 标准。


Next Step:第七章预告

性能优化 & 图片策略 + Loading/Suspense + Prefetch 预加载

  • next/image 全局封装

  • 不使用 Suspense 的加载策略会导致“白屏”

  • 代码切割 & RSC 缓存

  • ISR / SSG / SSR 选择策略

  • Lighthouse 指标优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值