feat: AI SEO optimization - JSON-LD schemas, per-page metadata, dynamic lesson metadata

This commit is contained in:
AyrisAI
2026-07-25 11:11:44 +03:00
parent d88cf955c7
commit 84acfadf96
5 changed files with 299 additions and 0 deletions
+37
View File
@@ -89,6 +89,43 @@ export default async function RootLayout({
className={`${jakartaSans.variable} ${jetbrainsMono.variable} dark h-full antialiased`}
>
<body className="min-h-full flex flex-col bg-slate-950 text-slate-100 font-sans selection:bg-red-500 selection:text-white tracking-normal leading-relaxed" suppressHydrationWarning>
{/* Organization + WebSite JSON-LD — global entity recognition */}
<script
type="application/ld+json"
suppressHydrationWarning
dangerouslySetInnerHTML={{
__html: JSON.stringify([
{
'@context': 'https://schema.org',
'@type': 'Organization',
name: 'ayris.tech',
url: BASE_URL,
logo: `${BASE_URL}/logo.jpeg`,
sameAs: [
'https://www.youtube.com/@ayristech',
'https://github.com/ayrisdev',
'https://git.ayris.tech/ayrisdev',
],
description:
'ayris.tech is a YouTube channel and resource portal publishing tutorials on Next.js, React, TypeScript, Python, AI agents, Docker, and modern full-stack development.',
},
{
'@context': 'https://schema.org',
'@type': 'WebSite',
name: 'ayris.tech YouTube Portal',
url: BASE_URL,
description:
'Source code, lesson notes, cheatsheets, AI prompts, and project downloads for every ayris.tech YouTube tutorial.',
publisher: { '@type': 'Organization', name: 'ayris.tech', url: BASE_URL },
potentialAction: {
'@type': 'SearchAction',
target: { '@type': 'EntryPoint', urlTemplate: `${BASE_URL}/en/lessons?q={search_term_string}` },
'query-input': 'required name=search_term_string',
},
},
]),
}}
/>
<NextIntlClientProvider messages={messages}>
<Navbar locale={locale} />
<main className="flex-1 flex flex-col">