From 234b1f1739e382e765a3e7c5633092c2c99819de Mon Sep 17 00:00:00 2001 From: Unchained Date: Mon, 30 Mar 2026 11:22:44 +0200 Subject: [PATCH] feat: comprehensive SEO system with keywords and schema markup - Add 4-locale keyword configurations (SR, EN, DE, FR) - Create schema generators (Product, Organization, Breadcrumb) - Add React components for JSON-LD rendering - Implement caching for keyword performance - Abstract all SEO logic for maintainability --- src/components/seo/JsonLd.tsx | 39 +++ src/components/seo/OrganizationSchema.tsx | 41 +++ src/components/seo/ProductSchema.tsx | 67 +++++ src/components/seo/index.ts | 9 + .../seo/keywords/config/keywordStrategy.ts | 58 ++++ src/lib/seo/keywords/index.ts | 46 +++ src/lib/seo/keywords/locales/de.ts | 274 +++++++++++++++++ src/lib/seo/keywords/locales/en.ts | 271 +++++++++++++++++ src/lib/seo/keywords/locales/fr.ts | 275 ++++++++++++++++++ src/lib/seo/keywords/locales/sr.ts | 269 +++++++++++++++++ src/lib/seo/keywords/types.ts | 77 +++++ src/lib/seo/keywords/utils/getKeywords.ts | 148 ++++++++++ src/lib/seo/schema/breadcrumbSchema.ts | 84 ++++++ src/lib/seo/schema/index.ts | 31 ++ src/lib/seo/schema/organizationSchema.ts | 79 +++++ src/lib/seo/schema/productSchema.ts | 104 +++++++ src/lib/seo/schema/types.ts | 85 ++++++ 17 files changed, 1957 insertions(+) create mode 100644 src/components/seo/JsonLd.tsx create mode 100644 src/components/seo/OrganizationSchema.tsx create mode 100644 src/components/seo/ProductSchema.tsx create mode 100644 src/components/seo/index.ts create mode 100644 src/lib/seo/keywords/config/keywordStrategy.ts create mode 100644 src/lib/seo/keywords/index.ts create mode 100644 src/lib/seo/keywords/locales/de.ts create mode 100644 src/lib/seo/keywords/locales/en.ts create mode 100644 src/lib/seo/keywords/locales/fr.ts create mode 100644 src/lib/seo/keywords/locales/sr.ts create mode 100644 src/lib/seo/keywords/types.ts create mode 100644 src/lib/seo/keywords/utils/getKeywords.ts create mode 100644 src/lib/seo/schema/breadcrumbSchema.ts create mode 100644 src/lib/seo/schema/index.ts create mode 100644 src/lib/seo/schema/organizationSchema.ts create mode 100644 src/lib/seo/schema/productSchema.ts create mode 100644 src/lib/seo/schema/types.ts diff --git a/src/components/seo/JsonLd.tsx b/src/components/seo/JsonLd.tsx new file mode 100644 index 0000000..4af447c --- /dev/null +++ b/src/components/seo/JsonLd.tsx @@ -0,0 +1,39 @@ +import Script from 'next/script'; +import { SchemaType } from '@/lib/seo/schema/types'; + +interface JsonLdProps { + data: SchemaType | SchemaType[]; +} + +/** + * React component to render JSON-LD schema markup + * Uses Next.js Script component for proper loading + * + * @param data - Single schema object or array of schemas + * @returns Script component with JSON-LD + * @example + * + * + */ +export function JsonLd({ data }: JsonLdProps) { + // Handle single schema or array + const schemas = Array.isArray(data) ? data : [data]; + + return ( + <> + {schemas.map((schema, index) => ( +