feat(seo): implement SEO audit remediations

- Add dynamic sitemap.ts, robots.ts, and llms.txt route
- Add metadataBase and JSON-LD Organization schema to layout
- Set canonical alternates for all routes
- Migrate raw img tags to next/image for LCP optimization
- Add SEO dictionary strings to tr.json and en.json
This commit is contained in:
mstfyldz
2026-06-04 12:29:19 +03:00
parent 4996ec38e6
commit e1d8bae5a4
17 changed files with 233 additions and 28 deletions
+31 -4
View File
@@ -17,10 +17,18 @@ const montserrat = Montserrat({
weight: ["300", "400", "500", "600", "700"],
});
export const metadata: Metadata = {
title: "Moy Group | Ege'nin Ruhunu Hisset",
description: "Akyaka, Akçapınar ve Datça'da restoran, beach, bungalov ve kitesurf hizmetleriyle doğa ile iç içe premium tatil deneyimi.",
};
export async function generateMetadata({ params }: { params: Promise<{ lang: string }> }): Promise<Metadata> {
const { lang } = await params;
const dict = await getDictionary(lang as Locale);
return {
metadataBase: new URL("https://moygroup.com.tr"),
title: {
template: "%s | Moy Group",
default: dict.seo.home.title,
},
description: dict.seo.home.description,
};
}
export default async function RootLayout({
children,
@@ -33,11 +41,30 @@ export default async function RootLayout({
const locale = lang as Locale;
const dict = await getDictionary(locale);
const jsonLd = {
"@context": "https://schema.org",
"@type": "Organization",
"name": "Moy Group",
"url": "https://moygroup.com.tr",
"logo": "https://moygroup.com.tr/logo.png",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+90-534-465-62-35",
"contactType": "customer service"
}
};
return (
<html
lang={locale}
className={`${cormorant.variable} ${montserrat.variable} h-full antialiased`}
>
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
</head>
<body className="min-h-full flex flex-col">
<Navbar lang={locale} dict={dict.navigation} />
<main className="flex-1">{children}</main>