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: 'AI System Prompts & LLM Templates | ayris.tech',
|
||||
description:
|
||||
'Curated AI system prompts and LLM agent templates for ChatGPT, Claude, and Gemini. Covering Next.js architecture, UI/UX design, Python automation, and full-stack development roles.',
|
||||
keywords: [
|
||||
'AI system prompts', 'ChatGPT system prompt', 'Claude system prompt',
|
||||
'LLM agent template', 'AI coding assistant prompt',
|
||||
'Next.js AI prompt', 'Python AI agent prompt', 'Gemini prompt engineering',
|
||||
],
|
||||
alternates: {
|
||||
canonical: `${BASE_URL}/en/prompts`,
|
||||
},
|
||||
openGraph: {
|
||||
title: 'AI System Prompts & LLM Templates | ayris.tech',
|
||||
description: 'Battle-tested AI system prompts and LLM templates for ChatGPT, Claude, and Gemini.',
|
||||
url: `${BASE_URL}/en/prompts`,
|
||||
type: 'website',
|
||||
},
|
||||
};
|
||||
|
||||
export default function PromptsLayout({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
suppressHydrationWarning
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify({
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'CollectionPage',
|
||||
name: 'AI System Prompts & LLM Templates — ayris.tech',
|
||||
description:
|
||||
'Curated AI system prompts for ChatGPT, Claude, and Gemini. For Next.js, Python, UI/UX, and full-stack development.',
|
||||
url: `${BASE_URL}/en/prompts`,
|
||||
publisher: {
|
||||
'@type': 'Person',
|
||||
name: 'ayris.tech',
|
||||
url: BASE_URL,
|
||||
},
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
{children}
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user