96SEO 2026-06-30 21:03 1
嘿,你知道Next.js如何实现多语言支持吗?哈哈,其实hen简单,咱就是说不就是i18n嘛,你懂的。
我们需要了解一些术语,比如locale,它是指语言和地区的组合,例如en-US表示英语,zh-CN表示中文。

Next.js建议我们使用http报文头来判断用户使用的语言Accept-Language,例如Accept-Language: zh-CN,zh;q=,en;q=表示用户使用中文,Ru果用户没有设置,则使用默认语言。
const languages = 'zh-CN,zh;q=,en;q='.splitconst languagesWithQ = languages.map return { lang, q:parseFloat || '') }}).sort=>b.q-a.q).map
简单复刻了一下Negotiator的实现,用于解析Accept-Language。
src/dictionaries/index.ts定义项目支持的语言和默认语言。
export const locales = // 支持的语言export const defaultLocale = 'zh' // 项目默认使用的语言
然后我们需要根据locale参数动态导入对应的语言文件,例如locale为zh则导入src/dictionaries/zh.json,locale为en则导入src/dictionaries/en.json等等。
{ "title": "标题", "description": "描述", "keywords": "关键词"}
新建测试用例
src/dictionaries/zh.json、src/dictionaries/en.json、src/dictionaries/ja.json、src/dictionaries/ko.json分别定义了对应的语言文件。
{ "title": "title", "description": "description", "keywords": "keywords"}
{ "title": "제목", "description": "설명", "keywords": "키워드"}
封装语言切换组件
src/app//home/switchI18n.tsx封装了一个语言切换组件,用于切换当前语言。
'use client'import { locales } from '@dict/index'import { usePathname,useRouter } from 'next/navigation'export default function SwitchI18n { const pathname = usePathname // 获取当前路径 const router = useRouter // 获取路由实例 const handleChange = => { const newLang = e.target.value // 获取新语言 const newPath = pathname.replace // 替换语言 router.replace // 跳转新路径 } return <div> <select value={lang} onChange={handleChange}> {locales.map} </select> </div>}
代理函数
src/proxy.ts 创建一个代理函数,用于匹配语言并重定向到对应的语言页面。
import { NextRequest, NextResponse } from 'next/server'import Negotiator from 'negotiator'import { match } from '@formatjs/intl-localematcher'import { locales, defaultLocale } from '@dict/index' // 导入项目支持的语言和默认语言export default function proxy { // Ru果请求路径为根路径,则直接返回 首页不Zuo任何处理 if { return NextResponse.next } //Ru果路径Yi经包含所支持的语言,则直接返回 例如 /zh/about /zs/home 等 if)){ return NextResponse.next } // 获取请求头 const headers = { 'accept-language': req.headers.get || '' } // 解析请求头 const negotiator = new Negotiator // 获取语言 const language = negotiator.languages const lang = match const pathname = req.nextUrl.pathname req.nextUrl.pathname = `/${lang}${pathname}` return NextResponse.redirect}
说实话,这个代理函数还是挺复杂的,但是咱就是说它实现了多语言支持,这才是关键,你懂的。
i18n的小知识i18n的由来是取自开头i和n的中间有18个字母,所以称为i18n,其他的也是类似的例如k8s就是取自开头k和s的中间有8个字母,所以称为k8s。
不对不对,应该是刚才在说为什么百度不收录我的网站,其实吧,这个问题挺复杂的,有hen多因素会影响百度收录,比如网站的内容质量、geng新频率、外部链接等等,害,你要是想让百度收录你的网站,就得好好优化你的网站,说实话,这是一个长期的过程,需要耐心和坚持。
Zui近在研究SEO优化,发现了一个有意思的事情,就是i18n,对SEO优化也有帮助,Ke以提高网站在不同地区的搜索排名。
实现多语言支持需要考虑hen多因素,包括语言匹配、语言切换、SEO优化等等,但是只要你用心去Zuo,还是Ke以Zuo好的,加油!
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback