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

@@ -6,18 +6,45 @@ import ProductCard from "@/components/product/ProductCard";
import { ChevronDown } from "lucide-react";
import { getPageMetadata } from "@/lib/i18n/pageMetadata";
import { isValidLocale, DEFAULT_LOCALE, getSaleorLocale, type Locale } from "@/lib/i18n/locales";
import { getPageKeywords } from "@/lib/seo/keywords";
import { Metadata } from "next";
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://dev.manoonoils.com";
interface ProductsPageProps {
params: Promise<{ locale: string }>;
}
export async function generateMetadata({ params }: ProductsPageProps) {
export async function generateMetadata({ params }: ProductsPageProps): 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, 'products');
// Build canonical URL
const localePrefix = validLocale === DEFAULT_LOCALE ? "" : `/${validLocale}`;
const canonicalUrl = `${baseUrl}${localePrefix}/products`;
return {
title: metadata.products.title,
description: metadata.products.description,
keywords: [...keywords.primary, ...keywords.secondary].join(', '),
alternates: {
canonical: canonicalUrl,
},
openGraph: {
title: metadata.products.title,
description: metadata.products.description,
type: 'website',
url: canonicalUrl,
images: [{
url: `${baseUrl}/og-image.jpg`,
width: 1200,
height: 630,
alt: metadata.products.title,
}],
locale: validLocale,
},
};
}