feat: integrate SEO system into pages

- Add OrganizationSchema to root layout
- Add ProductSchema with metadata to product pages
- Add enhanced metadata to homepage with keywords
- Add enhanced metadata to products listing page
- Add noindex to checkout page via layout
- Implement canonical URLs, OpenGraph, and Twitter cards
This commit is contained in:
Unchained
2026-03-30 11:42:58 +02:00
parent 234b1f1739
commit fd0490c3e1
5 changed files with 154 additions and 3 deletions

View File

@@ -12,15 +12,49 @@ import ProblemSection from "@/components/home/ProblemSection";
import HowItWorks from "@/components/home/HowItWorks";
import { getPageMetadata } from "@/lib/i18n/pageMetadata";
import { isValidLocale, DEFAULT_LOCALE, getSaleorLocale, type Locale } from "@/lib/i18n/locales";
import { getPageKeywords, getBrandKeywords } from "@/lib/seo/keywords";
import { Metadata } from "next";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }) {
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://dev.manoonoils.com";
export async function generateMetadata({ params }: { params: Promise<{ locale: string }> }): Promise<Metadata> {
const { locale } = await params;
const validLocale = isValidLocale(locale) ? locale : DEFAULT_LOCALE;
const metadata = getPageMetadata(validLocale as Locale);
const keywords = getPageKeywords(validLocale as Locale, 'home');
const brand = getBrandKeywords(validLocale as Locale);
setRequestLocale(validLocale);
// Build canonical URL
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix || '/'}`;
return {
title: metadata.home.title,
description: metadata.home.description,
keywords: [...keywords.primary, ...keywords.secondary].join(', '),
alternates: {
canonical: canonicalUrl,
},
openGraph: {
title: metadata.home.title,
description: metadata.home.description,
type: 'website',
url: canonicalUrl,
images: [{
url: `${baseUrl}/og-image.jpg`,
width: 1200,
height: 630,
alt: brand.tagline,
}],
locale: validLocale,
},
twitter: {
card: 'summary_large_image',
title: metadata.home.title,
description: metadata.home.description,
images: [`${baseUrl}/og-image.jpg`],
},
};
}