1.2.0: local SEO structured data (LocalBusiness, Service, FAQPage), noindex per page
This commit is contained in:
+73
@@ -0,0 +1,73 @@
|
||||
/**
|
||||
* 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
|
||||
Reference in New Issue
Block a user