feat: separate About/Clients/Partners into individual pages

- /[lang]/about/ — О компании (AboutSection standalone)
- /[lang]/clients/ — Нам доверяют (ClientsSection standalone)
- /[lang]/partners/ — Партнёры (PartnersSection standalone)
- Remove /o-kompanii/ page
- Update Header nav with all three links
- Add clients/partners keys to ru/en dictionaries
- sections: standalone prop → h1 heading, adjusted padding

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 03:45:07 +03:00
parent 925caef547
commit 40250aa4a6
8 changed files with 115 additions and 21 deletions

View File

@@ -1,8 +1,6 @@
import type { Metadata } from 'next'
import { getDictionary, LOCALES, type Locale } from '@/lib/i18n'
import AboutSection from '@/components/sections/AboutSection'
import ClientsSection from '@/components/sections/ClientsSection'
import PartnersSection from '@/components/sections/PartnersSection'
export function generateStaticParams() {
return LOCALES.map(lang => ({ lang }))
@@ -14,22 +12,22 @@ export async function generateMetadata({ params }: { params: Promise<{ lang: str
return {
title: isRu ? 'О компании — Сисадмингрупп' : 'About Us — SysadminGroup',
description: isRu
? 'Сисадмингрупп — IT-аутсорсинг в Пушкино и Московской области. Более 10 лет опыта, 150+ клиентов, надёжные партнёры.'
: 'SysadminGroup — IT outsourcing in Pushkino and Moscow Region. Over 10 years experience, 150+ clients, trusted partners.',
? 'Сисадмингрупп — IT-аутсорсинг в Пушкино и Московской области. Более 10 лет опыта, 150+ клиентов.'
: 'SysadminGroup — IT outsourcing in Pushkino and Moscow Region. Over 10 years experience, 150+ clients.',
alternates: {
canonical: `https://sag24.ru/${lang}/o-kompanii/`,
canonical: `https://sag24.ru/${lang}/about/`,
languages: {
'ru': 'https://sag24.ru/ru/o-kompanii/',
'en': 'https://sag24.ru/en/o-kompanii/',
'x-default': 'https://sag24.ru/ru/o-kompanii/',
'ru': 'https://sag24.ru/ru/about/',
'en': 'https://sag24.ru/en/about/',
'x-default': 'https://sag24.ru/ru/about/',
},
},
openGraph: {
title: isRu ? 'О компании — Сисадмингрупп' : 'About Us — SysadminGroup',
description: isRu
? 'Сисадмингрупп — IT-аутсорсинг в Пушкино и Московской области. Более 10 лет опыта, 150+ клиентов.'
: 'SysadminGroup — IT outsourcing in Pushkino and Moscow Region. Over 10 years experience, 150+ clients.',
url: `https://sag24.ru/${lang}/o-kompanii/`,
? 'Сисадмингрупп — IT-аутсорсинг в Пушкино и Московской области. 10+ лет опыта, 150+ клиентов.'
: 'SysadminGroup — IT outsourcing in Pushkino and Moscow Region. 10+ years experience, 150+ clients.',
url: `https://sag24.ru/${lang}/about/`,
images: [{ url: '/og-image.png' }],
},
}
@@ -42,8 +40,6 @@ export default async function AboutPage({ params }: { params: Promise<{ lang: st
return (
<div className="pt-16">
<AboutSection d={d} standalone />
<ClientsSection d={d} />
<PartnersSection d={d} />
</div>
)
}

View File

@@ -0,0 +1,45 @@
import type { Metadata } from 'next'
import { getDictionary, LOCALES, type Locale } from '@/lib/i18n'
import ClientsSection from '@/components/sections/ClientsSection'
export function generateStaticParams() {
return LOCALES.map(lang => ({ lang }))
}
export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }): Promise<Metadata> {
const { lang } = await params
const isRu = lang === 'ru'
return {
title: isRu ? 'Наши клиенты — Сисадмингрупп' : 'Our Clients — SysadminGroup',
description: isRu
? 'Компании, которые доверяют IT-инфраструктуру Сисадмингрупп. 150+ клиентов в Пушкино и Московской области.'
: 'Companies that trust SysadminGroup with their IT infrastructure. 150+ clients in Moscow Region.',
alternates: {
canonical: `https://sag24.ru/${lang}/clients/`,
languages: {
'ru': 'https://sag24.ru/ru/clients/',
'en': 'https://sag24.ru/en/clients/',
'x-default': 'https://sag24.ru/ru/clients/',
},
},
openGraph: {
title: isRu ? 'Наши клиенты — Сисадмингрупп' : 'Our Clients — SysadminGroup',
description: isRu
? '150+ компаний доверяют нам своё IT в Пушкино и Московской области.'
: '150+ companies trust us with their IT in Moscow Region.',
url: `https://sag24.ru/${lang}/clients/`,
images: [{ url: '/og-image.png' }],
},
}
}
export default async function ClientsPage({ params }: { params: Promise<{ lang: string }> }) {
const { lang: langStr } = await params
const lang = langStr as Locale
const d = getDictionary(lang)
return (
<div className="pt-16">
<ClientsSection d={d} standalone />
</div>
)
}

View File

@@ -0,0 +1,45 @@
import type { Metadata } from 'next'
import { getDictionary, LOCALES, type Locale } from '@/lib/i18n'
import PartnersSection from '@/components/sections/PartnersSection'
export function generateStaticParams() {
return LOCALES.map(lang => ({ lang }))
}
export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }): Promise<Metadata> {
const { lang } = await params
const isRu = lang === 'ru'
return {
title: isRu ? 'Партнёры — Сисадмингрупп' : 'Partners — SysadminGroup',
description: isRu
? 'Технологические партнёры Сисадмингрупп: RU-CENTER, REG.RU, МТВ, КОНТУР. Официальные представители.'
: 'Technology partners of SysadminGroup: RU-CENTER, REG.RU, MTV, Kontur. Authorized representatives.',
alternates: {
canonical: `https://sag24.ru/${lang}/partners/`,
languages: {
'ru': 'https://sag24.ru/ru/partners/',
'en': 'https://sag24.ru/en/partners/',
'x-default': 'https://sag24.ru/ru/partners/',
},
},
openGraph: {
title: isRu ? 'Партнёры — Сисадмингрупп' : 'Partners — SysadminGroup',
description: isRu
? 'Технологические партнёры: RU-CENTER, REG.RU, МТВ, КОНТУР.'
: 'Technology partners: RU-CENTER, REG.RU, MTV, Kontur.',
url: `https://sag24.ru/${lang}/partners/`,
images: [{ url: '/og-image.png' }],
},
}
}
export default async function PartnersPage({ params }: { params: Promise<{ lang: string }> }) {
const { lang: langStr } = await params
const lang = langStr as Locale
const d = getDictionary(lang)
return (
<div className="pt-16">
<PartnersSection d={d} standalone />
</div>
)
}

View File

@@ -14,7 +14,9 @@ export default function Header({ lang }: { lang: string }) {
const links = [
{ label: d.nav.services, href: `/${lang}/uslugi/` },
{ label: d.nav.about, href: `/${lang}/o-kompanii/` },
{ label: d.nav.about, href: `/${lang}/about/` },
{ label: d.nav.clients, href: `/${lang}/clients/` },
{ label: d.nav.partners, href: `/${lang}/partners/` },
{ label: d.nav.faq, href: `/${lang}/faq/` },
]

View File

@@ -1,11 +1,12 @@
import type { Dictionary } from '@/lib/i18n'
export default function ClientsSection({ d }: { d: Dictionary }) {
export default function ClientsSection({ d, standalone }: { d: Dictionary; standalone?: boolean }) {
const Title = standalone ? 'h1' : 'h2'
return (
<section className="py-16 bg-white border-t border-slate-100">
<section className={`${standalone ? 'py-24' : 'py-16 border-t border-slate-100'} bg-white`}>
<div className="max-w-6xl mx-auto px-4 sm:px-6">
<div className="text-center mb-10">
<h2 className="text-2xl sm:text-3xl font-bold text-slate-900 mb-2">{d.clients.title}</h2>
<Title className="text-2xl sm:text-3xl font-bold text-slate-900 mb-2">{d.clients.title}</Title>
<p className="text-slate-500">{d.clients.subtitle}</p>
</div>
<div className="flex flex-wrap justify-center gap-3">

View File

@@ -7,12 +7,13 @@ const PARTNERS = [
{ name: 'КОНТУР', sub: 'Электронная отчётность' },
]
export default function PartnersSection({ d }: { d: Dictionary }) {
export default function PartnersSection({ d, standalone }: { d: Dictionary; standalone?: boolean }) {
const Title = standalone ? 'h1' : 'h2'
return (
<section className="py-16 bg-slate-50 border-t border-slate-100">
<section className={`${standalone ? 'py-24' : 'py-16 border-t border-slate-100'} bg-slate-50`}>
<div className="max-w-6xl mx-auto px-4 sm:px-6">
<div className="text-center mb-10">
<h2 className="text-2xl sm:text-3xl font-bold text-slate-900 mb-2">{d.partners.title}</h2>
<Title className="text-2xl sm:text-3xl font-bold text-slate-900 mb-2">{d.partners.title}</Title>
<p className="text-slate-500">{d.partners.subtitle}</p>
</div>
<div className="flex flex-wrap justify-center gap-4">

View File

@@ -2,6 +2,8 @@ export const en = {
nav: {
services: 'Services',
about: 'About',
clients: 'Clients',
partners: 'Partners',
faq: 'FAQ',
contact: 'Contact',
},

View File

@@ -1,7 +1,9 @@
export const ru = {
nav: {
services: 'Услуги',
about: 'О нас',
about: 'О компании',
clients: 'Клиенты',
partners: 'Партнёры',
faq: 'FAQ',
contact: 'Контакты',
},