分享一个用 Windsurf 写的网站,源代码
基于 Next.js 14 构建的多语言产品展示网站,支持中英文切换,针对 SEO 优化,并实现了静态页面生成。
src/
├── app/ # 应用主目录
│ └── [locale]/ # 多语言路由
│ ├── page.tsx # 首页
│ ├── products/ # 产品相关页面
│ └── blog/ # 博客相关页面
├── components/ # 公共组件
├── content/ # 内容数据目录
│ ├── en/ # 英文内容
│ └── zh/ # 中文内容
├── i18n/ # 国际化配置
├── lib/ # 工具函数
├── messages/ # 翻译文件
└── types/ # TypeScript 类型定义
产品内容存储在 src/content/{locale}/products/
目录下,每个产品使用单独的 JSON 文件。
产品文件结构:
{
"name": "产品名称",
"description": "产品描述",
"image": "/images/products/product1.jpg",
"features": [
"特点 1",
"特点 2"
],
"specifications": [
"规格 1",
"规格 2"
],
"metadata": {
"keywords": ["关键词 1", "关键词 2"],
"category": "产品分类"
}
}
博客文章存储在 src/content/{locale}/blog/
目录下。
文章文件结构:
{
"title": "文章标题",
"description": "文章描述",
"content": "文章内容",
"image": "/images/blog/post1.jpg",
"author": "作者名称",
"date": "2024-01-01",
"tags": ["标签 1", "标签 2"],
"metadata": {
"keywords": ["关键词 1", "关键词 2"],
"category": "文章分类"
}
}
首页 (app/[locale]/page.tsx
)
messages/{locale}.json
的 Index
命名空间获取产品列表页 (app/[locale]/products/page.tsx
)
messages/{locale}.json
的 Products
命名空间获取content/{locale}/products/
目录读取产品详情页 (app/[locale]/products/[id]/page.tsx
)
博客列表页 (app/[locale]/blog/page.tsx
)
messages/{locale}.json
的 Blog
命名空间获取content/{locale}/blog/
目录读取博客文章页 (app/[locale]/blog/[slug]/page.tsx
)
{
"@context": "https://schema.org",
"@type": "Product",
"name": "产品名称",
"description": "产品描述",
"image": "产品图片 URL",
"brand": {
"@type": "Brand",
"name": "品牌名称"
}
}
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "文章标题",
"description": "文章描述",
"image": "文章图片 URL",
"author": {
"@type": "Person",
"name": "作者名称"
},
"datePublished": "发布日期"
}
每个页面都配置了完整的元数据,包括:
基本元数据
Open Graph 元数据
多语言支持( hrefLang )
alternates: {
canonical: `/${locale}/products`,
languages: {
en: '/en/products',
zh: '/zh/products'
}
}
结构化数据
所有图片按类型分类存储在 public/images/
目录下:
public/images/
├── products/ # 产品图片目录
│ ├── product1.jpg
│ ├── product2.jpg
│ └── ...
├── blog/ # 博客图片目录
│ ├── blog1.jpg
│ ├── blog2.jpg
│ └── ...
└── defaults/ # 默认图片目录
├── default-product.jpg # 产品默认图片
└── default-blog.jpg # 博客默认图片
产品图片
public/images/products/
product-name.jpg
博客图片
public/images/blog/
blog-post-title.jpg
默认图片
public/images/defaults/
npm install
npm run dev
npm run build
npm run start
添加新语言时:
src/i18n/config.ts
中添加语言代码messages/
目录下创建对应的翻译文件content/
目录下创建对应的内容目录添加新产品/文章时:
public
目录的路径SEO 最佳实践: