diff --git a/src/components/seo/schemas/ServiceJsonLd.tsx b/src/components/seo/schemas/ServiceJsonLd.tsx new file mode 100644 index 0000000..4fcffd5 --- /dev/null +++ b/src/components/seo/schemas/ServiceJsonLd.tsx @@ -0,0 +1,44 @@ +import { type Locale } from '@/i18n/config'; + +interface ServiceJsonLdProps { + name: string; + description: string; + url: string; + locale: Locale; + areaServed?: string[]; +} + +export function ServiceJsonLd({ + name, + description, + url, + locale, + areaServed = ['Köln', 'Düsseldorf', 'Frankfurt', 'Deutschland'], +}: ServiceJsonLdProps) { + const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://damjan-savic.com'; + + const schema = { + '@context': 'https://schema.org', + '@type': 'Service', + name: name, + description: description, + url: url.startsWith('http') ? url : `${baseUrl}${url}`, + inLanguage: locale === 'de' ? 'de-DE' : locale === 'sr' ? 'sr-RS' : 'en-US', + availableLanguage: ['de-DE', 'en-US', 'sr-RS'], + provider: { + '@id': `${baseUrl}/#business`, + }, + areaServed: areaServed.map((area) => ({ + '@type': 'City', + name: area, + })), + serviceType: name, + }; + + return ( +