spb/phi-conseil
Public
1import type { Metadata } from "next";2import { site } from "./content";3import { siteUrl } from "./env";45export function baseUrl() {6 return siteUrl(site.seo.siteUrl).replace(/\/$/, "");7}89export function pageMetadata(opts: {10 title: string;11 description: string;12 path: string;13 noIndex?: boolean;14}): Metadata {15 const url = `${baseUrl()}${opts.path}`;16 return {17 title: opts.title,18 description: opts.description,19 alternates: { canonical: url },20 openGraph: { title: opts.title, description: opts.description, url, type: "website" },21 robots: opts.noIndex ? { index: false, follow: false } : undefined,22 };23}2425/** Données structurées minimales : aucune adresse/avis inventé (champs vides omis). */26export function organizationJsonLd() {27 const data: Record<string, unknown> = {28 "@context": "https://schema.org",29 "@type": "ProfessionalService",30 name: site.brand.name,31 url: baseUrl(),32 description: site.seo.defaultDescription,33 areaServed: site.contact.region || undefined,34 email: site.contact.email || undefined,35 telephone: site.contact.phone || undefined,36 sameAs: site.social.linkedin ? [site.social.linkedin] : undefined,37 };38 return Object.fromEntries(Object.entries(data).filter(([, v]) => v !== undefined));39}40