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 (
+
+
+
diff --git a/src/app/projects/page.tsx b/src/app/projects/page.tsx
index c8cac9b..be6db3f 100644
--- a/src/app/projects/page.tsx
+++ b/src/app/projects/page.tsx
@@ -1,12 +1,23 @@
+import type { Metadata } from "next";
import { ProjectsPage } from "@/views/projects";
+export const metadata: Metadata = {
+ title: "Все проекты",
+ description:
+ "Коммерческие и пет-проекты Egorov Nikita: веб-приложения, интернет-магазины, SaaS-дашборды и сайты под ключ на React, Next.js, TypeScript и Django.",
+ alternates: {
+ canonical: "/projects/",
+ },
+ openGraph: {
+ title: "Все проекты | Никита Егоров",
+ description:
+ "Коммерческие и пет-проекты Egorov Nikita: веб-приложения, интернет-магазины, SaaS-дашборды и сайты под ключ.",
+ url: "https://autli.ru/projects/",
+ },
+};
+
const Projects = () => {
return ;
};
-export const metadata = {
- title: "Проекты",
- description: "Все проекты Egorov Nikita",
-};
-
export default Projects;
\ No newline at end of file