1.2.0: local SEO structured data (LocalBusiness, Service, FAQPage), noindex per page
This commit is contained in:
+71
@@ -0,0 +1,71 @@
|
||||
type MediaLike = {
|
||||
url?: null | string;
|
||||
} | null | undefined;
|
||||
type Address = {
|
||||
city?: string;
|
||||
country?: string;
|
||||
postalCode?: string;
|
||||
region?: string;
|
||||
street?: string;
|
||||
};
|
||||
type LocalBusinessJsonLdArgs = {
|
||||
address?: Address;
|
||||
/** Geo coordinates for maps/local search. */
|
||||
geo?: {
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
};
|
||||
image?: MediaLike;
|
||||
logo?: MediaLike;
|
||||
name: string;
|
||||
/** Opening hours, e.g. ['Mo-Fr 08:00-18:00', 'Sa 09:00-14:00']. */
|
||||
openingHours?: string[];
|
||||
priceRange?: string;
|
||||
sameAs?: string[];
|
||||
/** Business phone, e.g. '+48 123 456 789'. */
|
||||
telephone?: string;
|
||||
url: string;
|
||||
};
|
||||
/**
|
||||
* 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 declare function buildLocalBusinessJsonLd({ name, address, geo, image, logo, openingHours, priceRange, sameAs, telephone, url, }: LocalBusinessJsonLdArgs): {
|
||||
sameAs?: string[] | undefined;
|
||||
priceRange?: string | undefined;
|
||||
openingHours?: string[] | undefined;
|
||||
geo?: {
|
||||
'@type': string;
|
||||
latitude: number;
|
||||
longitude: number;
|
||||
} | undefined;
|
||||
address?: {
|
||||
addressCountry?: string | undefined;
|
||||
addressRegion?: string | undefined;
|
||||
postalCode?: string | undefined;
|
||||
addressLocality?: string | undefined;
|
||||
streetAddress?: string | undefined;
|
||||
'@type': string;
|
||||
} | undefined;
|
||||
logo?: string | undefined;
|
||||
image?: string | undefined;
|
||||
telephone?: string | undefined;
|
||||
name: string;
|
||||
'@context': string;
|
||||
'@type': string;
|
||||
url: string;
|
||||
};
|
||||
export {};
|
||||
Reference in New Issue
Block a user