diff --git a/public/og-image.png b/public/og-image.png new file mode 100644 index 0000000..d59c7b0 Binary files /dev/null and b/public/og-image.png differ diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..7c0b194 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://autli.ru/sitemap.xml diff --git a/public/sitemap.xml b/public/sitemap.xml index 1954cc3..44a3a80 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,12 +1,15 @@ - https://autli.ru/ + 2026-09-26 + monthly + 1.0 - - https://autli.ru/projects + https://autli.ru/projects/ + 2026-09-26 + monthly + 0.8 - \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index bb90acf..6094f3d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,4 +1,5 @@ import type { Metadata } from "next"; +import type { ReactNode } from "react"; import { Geist, Geist_Mono } from "next/font/google"; import { ContextMenu } from "@/widgets/context-menu"; import { CookieConsent } from "@/widgets/cookie-consent"; @@ -18,18 +19,137 @@ const geistMono = Geist_Mono({ subsets: ["latin"], }); +const siteUrl = "https://autli.ru"; + export const metadata: Metadata = { - title: "Personal Site", - description: "Personal website", + metadataBase: new URL(siteUrl), + title: { + default: "Никита Егоров — Frontend & Web Developer | Портфолио", + template: "%s | Никита Егоров", + }, + description: + "Портфолио веб-разработчика Никиты Егорова. Создание современных, быстрых и адаптивных веб-сайтов, интернет-магазинов и веб-сервисов на React, Next.js, TypeScript и Django.", + applicationName: "Никита Егоров — Портфолио", + authors: [{ name: "Никита Егоров", url: siteUrl }], + creator: "Никита Егоров", + publisher: "Никита Егоров", + keywords: [ + "Никита Егоров", + "Nikita Egorov", + "autli", + "веб-разработчик", + "фронтенд разработчик", + "Frontend Developer", + "Web Developer", + "React", + "Next.js", + "TypeScript", + "Tailwind CSS", + "Django", + "разработка сайтов", + "портфолио разработчика", + ], + formatDetection: { + email: false, + address: false, + telephone: false, + }, + alternates: { + canonical: "/", + }, + openGraph: { + title: "Никита Егоров — Frontend & Web Developer | Портфолио", + description: + "Разработка современных, быстрых и продуманных веб-сервисов, интернет-магазинов и дашбордов на React, Next.js и TypeScript.", + url: siteUrl, + siteName: "Никита Егоров — Портфолио", + locale: "ru_RU", + type: "website", + images: [ + { + url: "/og-image.png", + width: 1200, + height: 630, + alt: "Никита Егоров — Frontend & Web Developer", + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "Никита Егоров — Frontend & Web Developer | Портфолио", + description: + "Разработка современных, быстрых и продуманных веб-сервисов, интернет-магазинов и дашбордов на React, Next.js и TypeScript.", + images: ["/og-image.png"], + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, }; -const RootLayout = ({ children }: LayoutProps<"/">) => { +const jsonLd = { + "@context": "https://schema.org", + "@graph": [ + { + "@type": "Person", + "@id": `${siteUrl}/#person`, + name: "Никита Егоров", + alternateName: "Nikita Egorov", + jobTitle: "Frontend & Web Developer", + url: siteUrl, + sameAs: [ + "https://t.me/autli", + "https://github.com/autli5", + ], + knowsAbout: [ + "React", + "Next.js", + "TypeScript", + "JavaScript", + "Tailwind CSS", + "Python", + "Django", + "PostgreSQL", + "Web Development", + "Core Web Vitals", + "SEO", + ], + }, + { + "@type": "WebSite", + "@id": `${siteUrl}/#website`, + url: siteUrl, + name: "Никита Егоров — Портфолио разработчика", + description: + "Создание современных, быстрых и продуманных веб-сайтов и приложений под ключ.", + publisher: { + "@id": `${siteUrl}/#person`, + }, + inLanguage: "ru-RU", + }, + ], +}; + +const RootLayout = ({ children }: { children: ReactNode }) => { return ( + +