73 lines
2.5 KiB
JavaScript
73 lines
2.5 KiB
JavaScript
/**
|
|
* Builds LocalBusiness JSON-LD (schema.org) — the key structured data for LOCAL
|
|
* SEO. Helps Google show the business in local results / map pack with address,
|
|
* hours, phone. Strong signal for "usługa + miasto" queries.
|
|
*
|
|
* All data from the panel (company global) — nothing hardcoded. Emit once in the
|
|
* root layout (business is site-wide):
|
|
*
|
|
* import { buildLocalBusinessJsonLd } from '@intecion/ipal-kit'
|
|
* const jsonLd = buildLocalBusinessJsonLd({
|
|
* name: company.name, url: baseUrl, telephone: company.phone,
|
|
* address: company.address, openingHours: company.hours,
|
|
* })
|
|
*
|
|
* For a more specific type (e.g. 'Dentist', 'Plumber'), override @type in the
|
|
* returned object — schema.org has many LocalBusiness subtypes.
|
|
*/ export function buildLocalBusinessJsonLd({ name, address, geo, image, logo, openingHours, priceRange, sameAs, telephone, url }) {
|
|
const logoUrl = logo?.url;
|
|
const imageUrl = image?.url ?? logoUrl;
|
|
return {
|
|
name,
|
|
'@context': 'https://schema.org',
|
|
'@type': 'LocalBusiness',
|
|
url,
|
|
...telephone ? {
|
|
telephone
|
|
} : {},
|
|
...imageUrl ? {
|
|
image: imageUrl.startsWith('http') ? imageUrl : `${url}${imageUrl}`
|
|
} : {},
|
|
...logoUrl ? {
|
|
logo: logoUrl.startsWith('http') ? logoUrl : `${url}${logoUrl}`
|
|
} : {},
|
|
...address ? {
|
|
address: {
|
|
'@type': 'PostalAddress',
|
|
...address.street ? {
|
|
streetAddress: address.street
|
|
} : {},
|
|
...address.city ? {
|
|
addressLocality: address.city
|
|
} : {},
|
|
...address.postalCode ? {
|
|
postalCode: address.postalCode
|
|
} : {},
|
|
...address.region ? {
|
|
addressRegion: address.region
|
|
} : {},
|
|
...address.country ? {
|
|
addressCountry: address.country
|
|
} : {}
|
|
}
|
|
} : {},
|
|
...geo ? {
|
|
geo: {
|
|
'@type': 'GeoCoordinates',
|
|
latitude: geo.latitude,
|
|
longitude: geo.longitude
|
|
}
|
|
} : {},
|
|
...openingHours && openingHours.length > 0 ? {
|
|
openingHours
|
|
} : {},
|
|
...priceRange ? {
|
|
priceRange
|
|
} : {},
|
|
...sameAs && sameAs.length > 0 ? {
|
|
sameAs
|
|
} : {}
|
|
};
|
|
}
|
|
|
|
//# sourceMappingURL=buildLocalBusinessJsonLd.js.map
|