Files
e-tib.com/lib/schema.ts
Marc Mintel a52c35a224
All checks were successful
Build & Deploy / 🔍 Prepare (push) Successful in 30s
Build & Deploy / 🧪 QA (push) Successful in 1m32s
Build & Deploy / 🏗️ Build (push) Successful in 2m57s
Build & Deploy / 🚀 Deploy (push) Successful in 35s
Build & Deploy / 🧪 Post-Deploy Verification (push) Successful in 1m4s
Build & Deploy / 🔔 Notify (push) Successful in 2s
fix(seo): remove process.env.CI override for baseUrl to prevent etib.localhost leaking into prod canonicals
2026-06-24 12:13:28 +02:00

118 lines
3.4 KiB
TypeScript

import { config } from './config';
const getSiteUrl = () => {
return (config.baseUrl as string) || 'https://e-tib.com';
};
export const SITE_URL = getSiteUrl();
export const LOGO_URL = `${SITE_URL}/assets/logo.png`;
export const getOrganizationSchema = () => ({
'@context': 'https://schema.org' as const,
'@type': 'Organization' as const,
name: 'E-TIB GmbH',
url: SITE_URL,
logo: LOGO_URL,
sameAs: ['https://www.instagram.com/me.and.eloise/'],
contactPoint: {
'@type': 'ContactPoint' as const,
telephone: '+4935616857733',
contactType: 'customer service' as const,
email: 'info@e-tib.com',
availableLanguage: ['German', 'English'],
},
});
export const getBreadcrumbSchema = (items: { name: string; item: string }[]) => ({
'@context': 'https://schema.org' as const,
'@type': 'BreadcrumbList' as const,
itemListElement: items.map((item, index) => ({
'@type': 'ListItem' as const,
position: index + 1,
name: item.name,
item: item.item.startsWith('http') ? item.item : `${SITE_URL}${item.item}`,
})),
});
export const getLocalBusinessSchema = () => ({
'@context': 'https://schema.org' as const,
'@type': 'LocalBusiness' as const,
name: 'E-TIB GmbH',
url: SITE_URL,
logo: LOGO_URL,
image: LOGO_URL,
description: 'Ihr Partner für Kabelleitungsnetzbau, Horizontalspülbohrungen, Planung und Vermessung in Guben und überregional.',
telephone: '+4935616857733',
email: 'info@e-tib.com',
address: {
'@type': 'PostalAddress' as const,
streetAddress: 'Gewerbestraße 22',
addressLocality: 'Guben',
postalCode: '03172',
addressCountry: 'DE',
},
geo: {
'@type': 'GeoCoordinates' as const,
latitude: 51.9547, // Approx coordinates for Guben area
longitude: 14.7175,
},
openingHoursSpecification: [
{
'@type': 'OpeningHoursSpecification' as const,
dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
opens: '08:00',
closes: '17:00',
},
],
sameAs: ['https://www.instagram.com/me.and.eloise/'],
});
export const getFAQSchema = (questions: { question: string; answer: string }[]) => ({
'@context': 'https://schema.org' as const,
'@type': 'FAQPage' as const,
mainEntity: questions.map((q) => ({
'@type': 'Question' as const,
name: q.question,
acceptedAnswer: {
'@type': 'Answer' as const,
text: q.answer,
},
})),
});
export const getServiceSchema = (serviceName: string, description: string, image?: string) => ({
'@context': 'https://schema.org' as const,
'@type': 'Service' as const,
name: serviceName,
description: description,
provider: {
'@type': 'Organization' as const,
name: 'E-TIB GmbH',
},
...(image && { image }),
});
export const getEventSchema = (event: { name: string; startDate: string; endDate?: string; locationName: string; locationAddress?: string; url?: string }) => ({
'@context': 'https://schema.org' as const,
'@type': 'Event' as const,
name: event.name,
startDate: event.startDate,
...(event.endDate && { endDate: event.endDate }),
location: {
'@type': 'Place' as const,
name: event.locationName,
...(event.locationAddress && {
address: {
'@type': 'PostalAddress' as const,
streetAddress: event.locationAddress,
},
}),
},
organizer: {
'@type': 'Organization' as const,
name: 'E-TIB GmbH',
url: SITE_URL,
},
...(event.url && { url: event.url }),
});