36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
type NavItem = {
|
|
/** Visible label (e.g. 'Usługi'). */
|
|
name: string;
|
|
/** Absolute URL (e.g. 'https://example.com/pl/uslugi'). */
|
|
url: string;
|
|
};
|
|
/**
|
|
* Builds SiteNavigationElement JSON-LD (schema.org) from the main navigation —
|
|
* declares the site's primary nav as structured data. A weaker sitelinks signal
|
|
* than WebSite/breadcrumbs, but cheap: it tells Google which pages are the main
|
|
* navigation targets.
|
|
*
|
|
* Feed it the SAME nav items the header renders (from the panel/nav global), so
|
|
* the structured data matches the visible menu — not a separate hardcoded list.
|
|
*
|
|
* import { buildSiteNavigationJsonLd } from '@intecion/ipal-kit'
|
|
* const jsonLd = buildSiteNavigationJsonLd(
|
|
* navItems.map(i => ({ name: i.label, url: `${base}${i.href}` }))
|
|
* )
|
|
* <script type="application/ld+json" ... />
|
|
*
|
|
* Emit once (site-wide, root layout). Data from the nav source, never hardcoded.
|
|
* Returns null for empty nav.
|
|
*/
|
|
export declare function buildSiteNavigationJsonLd(items: NavItem[]): {
|
|
'@context': string;
|
|
'@type': string;
|
|
itemListElement: {
|
|
name: string;
|
|
'@type': string;
|
|
position: number;
|
|
url: string;
|
|
}[];
|
|
} | null;
|
|
export {};
|