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:
49
src/app/[lang]/o-kompanii/page.tsx
Normal file
49
src/app/[lang]/o-kompanii/page.tsx
Normal 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>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -2,9 +2,6 @@ import type { Metadata } from 'next'
|
|||||||
import { getDictionary, LOCALES, type Locale } from '@/lib/i18n'
|
import { getDictionary, LOCALES, type Locale } from '@/lib/i18n'
|
||||||
import Hero from '@/components/sections/Hero'
|
import Hero from '@/components/sections/Hero'
|
||||||
import ServicesGrid from '@/components/sections/ServicesGrid'
|
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'
|
import FaqSection from '@/components/sections/FaqSection'
|
||||||
|
|
||||||
export function generateStaticParams() {
|
export function generateStaticParams() {
|
||||||
@@ -67,9 +64,6 @@ export default async function HomePage({ params }: { params: Promise<{ lang: str
|
|||||||
<>
|
<>
|
||||||
<Hero d={d} lang={lang} />
|
<Hero d={d} lang={lang} />
|
||||||
<ServicesGrid d={d} lang={lang} />
|
<ServicesGrid d={d} lang={lang} />
|
||||||
<AboutSection d={d} />
|
|
||||||
<ClientsSection d={d} />
|
|
||||||
<PartnersSection d={d} />
|
|
||||||
<FaqSection d={d} />
|
<FaqSection d={d} />
|
||||||
<script
|
<script
|
||||||
type="application/ld+json"
|
type="application/ld+json"
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ const manrope = Manrope({
|
|||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
metadataBase: new URL('https://sag24.ru'),
|
metadataBase: new URL('https://sag24.ru'),
|
||||||
|
other: {
|
||||||
|
'indexnow-key': '40c65b722891b81d944f2c3fea6cab95',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export default function Header({ lang }: { lang: string }) {
|
|||||||
|
|
||||||
const links = [
|
const links = [
|
||||||
{ label: d.nav.services, href: `/${lang}/uslugi/` },
|
{ 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/` },
|
{ label: d.nav.faq, href: `/${lang}/faq/` },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import type { Dictionary } from '@/lib/i18n'
|
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 stats = [d.about.stat1, d.about.stat2, d.about.stat3]
|
||||||
|
const Title = standalone ? 'h1' : 'h2'
|
||||||
return (
|
return (
|
||||||
<section id="about" className="py-24 bg-white">
|
<section id="about" className="py-24 bg-white">
|
||||||
<div className="max-w-6xl mx-auto px-4 sm:px-6">
|
<div className="max-w-6xl mx-auto px-4 sm:px-6">
|
||||||
<div className="grid md:grid-cols-2 gap-16 items-center">
|
<div className="grid md:grid-cols-2 gap-16 items-center">
|
||||||
<div>
|
<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 text-lg leading-relaxed mb-4">{d.about.text1}</p>
|
||||||
<p className="text-slate-600 leading-relaxed">{d.about.text2}</p>
|
<p className="text-slate-600 leading-relaxed">{d.about.text2}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user