feat: separate About/Clients/Partners into /o-kompanii/ page, add IndexNow meta

- Create /[lang]/o-kompanii/ page with About, Clients, Partners sections
- Remove those sections from homepage (Hero + Services + FAQ remain)
- Update Header nav: "О нас" now links to /o-kompanii/ instead of /#about
- AboutSection: support standalone prop (h1 vs h2)
- Root layout: add indexnow-key meta tag (key from public/40c65b...txt)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 03:17:39 +03:00
parent 55f88d5227
commit 55981c14dd
5 changed files with 56 additions and 9 deletions

View File

@@ -0,0 +1,49 @@
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 }))
}
export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }): Promise<Metadata> {
const { lang } = await params
const isRu = lang === 'ru'
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.',
alternates: {
canonical: `https://sag24.ru/${lang}/o-kompanii/`,
languages: {
'ru': 'https://sag24.ru/ru/o-kompanii/',
'en': 'https://sag24.ru/en/o-kompanii/',
'x-default': 'https://sag24.ru/ru/o-kompanii/',
},
},
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/`,
images: [{ url: '/og-image.png' }],
},
}
}
export default async function AboutPage({ params }: { params: Promise<{ lang: string }> }) {
const { lang: langStr } = await params
const lang = langStr as Locale
const d = getDictionary(lang)
return (
<div className="pt-16">
<AboutSection d={d} standalone />
<ClientsSection d={d} />
<PartnersSection d={d} />
</div>
)
}

View File

@@ -2,9 +2,6 @@ import type { Metadata } from 'next'
import { getDictionary, LOCALES, type Locale } from '@/lib/i18n'
import Hero from '@/components/sections/Hero'
import ServicesGrid from '@/components/sections/ServicesGrid'
import AboutSection from '@/components/sections/AboutSection'
import ClientsSection from '@/components/sections/ClientsSection'
import PartnersSection from '@/components/sections/PartnersSection'
import FaqSection from '@/components/sections/FaqSection'
export function generateStaticParams() {
@@ -67,9 +64,6 @@ export default async function HomePage({ params }: { params: Promise<{ lang: str
<>
<Hero d={d} lang={lang} />
<ServicesGrid d={d} lang={lang} />
<AboutSection d={d} />
<ClientsSection d={d} />
<PartnersSection d={d} />
<FaqSection d={d} />
<script
type="application/ld+json"

View File

@@ -11,6 +11,9 @@ const manrope = Manrope({
export const metadata: Metadata = {
metadataBase: new URL('https://sag24.ru'),
other: {
'indexnow-key': '40c65b722891b81d944f2c3fea6cab95',
},
}
export default function RootLayout({ children }: { children: React.ReactNode }) {

View File

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

View File

@@ -1,13 +1,14 @@
import type { Dictionary } from '@/lib/i18n'
export default function AboutSection({ d }: { d: Dictionary }) {
export default function AboutSection({ d, standalone }: { d: Dictionary; standalone?: boolean }) {
const stats = [d.about.stat1, d.about.stat2, d.about.stat3]
const Title = standalone ? 'h1' : 'h2'
return (
<section id="about" className="py-24 bg-white">
<div className="max-w-6xl mx-auto px-4 sm:px-6">
<div className="grid md:grid-cols-2 gap-16 items-center">
<div>
<h2 className="text-3xl sm:text-4xl font-bold text-slate-900 mb-6">{d.about.title}</h2>
<Title className="text-3xl sm:text-4xl font-bold text-slate-900 mb-6">{d.about.title}</Title>
<p className="text-slate-600 text-lg leading-relaxed mb-4">{d.about.text1}</p>
<p className="text-slate-600 leading-relaxed">{d.about.text2}</p>
</div>