feat: AI SEO optimization - JSON-LD schemas, per-page metadata, dynamic lesson metadata
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import type { Metadata } from 'next';
|
||||
|
||||
const BASE_URL = 'https://ayrisai.xyz';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Developer Cheatsheets & Quick Reference | ayris.tech',
|
||||
description:
|
||||
'Free developer cheatsheets for Git, Next.js App Router, Docker, TypeScript, Python, SQL, and more. Quick-copy command references used in ayris.tech YouTube tutorials.',
|
||||
keywords: [
|
||||
'developer cheatsheet', 'Git commands cheatsheet', 'Next.js cheatsheet',
|
||||
'Docker commands', 'TypeScript quick reference', 'SQL cheatsheet',
|
||||
'programming reference card', 'ayris.tech',
|
||||
],
|
||||
alternates: {
|
||||
canonical: `${BASE_URL}/en/cheatsheets`,
|
||||
},
|
||||
openGraph: {
|
||||
title: 'Developer Cheatsheets & Quick Reference | ayris.tech',
|
||||
description: 'Free copy-paste developer cheatsheets for Git, Next.js, Docker, TypeScript, and more.',
|
||||
url: `${BASE_URL}/en/cheatsheets`,
|
||||
type: 'website',
|
||||
},
|
||||
};
|
||||
|
||||
export default function CheatsheetsLayout({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
suppressHydrationWarning
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify({
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'CollectionPage',
|
||||
name: 'Developer Cheatsheets & Quick Reference — ayris.tech',
|
||||
description:
|
||||
'Free developer cheatsheets for Git, Next.js, Docker, TypeScript, Python, SQL, and more.',
|
||||
url: `${BASE_URL}/en/cheatsheets`,
|
||||
publisher: {
|
||||
'@type': 'Person',
|
||||
name: 'ayris.tech',
|
||||
url: BASE_URL,
|
||||
},
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
{children}
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user