Files
obc-terrassement/app/layout.tsx
Claude 15c60a274c feat: préparation Payload CMS — couche d'abstraction contenu
Sépare données et affichage pour basculer vers Payload CMS sans réécrire les composants.

Nouveaux fichiers :
- lib/site-config.ts : source unique de vérité pour toutes les données du site (as const)
- lib/content.ts : couche async entre données et composants (static aujourd'hui, Payload demain)
- types/content.ts : types TypeScript partagés (Service, Realisation, Partner, BlogPost, etc.)
- payload/ : schémas CollectionConfig et GlobalConfig commentés prêts à activer

Données enrichies dans siteConfig :
- partners : ajout du champ desc pour chaque partenaire
- realisations : 6 entrées complètes avec categorie et color
- blogPosts : 6 articles avec slug, titre, extrait, cat, date, readTime

Refactorisations (composants → content layer) :
- Navbar, Footer : importent siteConfig directement (client component)
- app/page.tsx : async, Promise.all sur getServices/getTestimonials/getFAQ/getValues/getPartners/getRealisations
- app/services/page.tsx : getServices() + getSiteConfig()
- app/contact/page.tsx : getSiteConfig() pour phone, email, address, zones
- app/realisations/page.tsx : getRealisations() + getSiteConfig()
- app/partenaires/page.tsx : getPartners()
- app/blog/page.tsx : getBlogPosts()
- app/blog/[slug]/page.tsx : getBlogPost() + getBlogPosts() pour generateStaticParams
- LocalSEOPage.tsx : siteConfig pour services list, phone, address
- 5 pages service (construction-maison, renovation, assainissement, creation-acces, demolition) : getSiteConfig() pour phone
- Pages légales et SEO locales : siteConfig importé pour données dynamiques

Corrections URL :
- Toutes les URLs canoniques obc-maconnerie.fr → obc-terrassement.fr (30+ fichiers)
- layout.tsx : BASE_URL depuis siteConfig.url
- robots.ts, sitemap.ts : BASE_URL depuis siteConfig.url
- api/contact/route.ts : email fallback → obc-terrassement.fr

https://claude.ai/code/session_01Uec4iHjcPwB1pU41idWEdF
2026-02-27 13:05:19 +00:00

196 lines
5.8 KiB
TypeScript

import type { Metadata } from "next";
import CookieBanner from "@/components/CookieBanner";
import { siteConfig } from "@/lib/site-config";
import "./globals.css";
const BASE_URL = process.env.NEXT_PUBLIC_APP_URL || siteConfig.url;
export const metadata: Metadata = {
metadataBase: new URL(BASE_URL),
title: {
default: "OBC Maçonnerie | Constructeur & Maçon à Orchies (Nord 59)",
template: "%s | OBC Maçonnerie",
},
description:
"Benoît Colin, maçon expert à Mouchin. Construction de maison, rénovation, assainissement et gros œuvre dans un rayon de 30km autour d'Orchies. Devis gratuit.",
keywords: [
"construction maison Nord",
"maçon construction maison Orchies",
"rénovation maison Nord 59",
"entreprise maçonnerie Mouchin",
"fondation ossature bois Nord",
"assainissement maison Nord",
"création accès maison Nord",
"démolition maison Nord 59",
"maçon rénovation Douai",
"maçon rénovation Valenciennes",
"gros œuvre Nord",
"entrepreneur maçon Nord 59",
"OBC Maçonnerie",
"Benoît Colin maçon",
"maçon Mouchin",
"construction maison Orchies",
],
authors: [{ name: "OBC Maçonnerie - Benoît Colin" }],
creator: "OBC Maçonnerie",
publisher: "OBC Maçonnerie",
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-video-preview": -1,
"max-image-preview": "large",
"max-snippet": -1,
},
},
icons: {
icon: [{ url: "/favicon.svg", type: "image/svg+xml" }],
apple: [
{ url: "/apple-touch-icon.svg", type: "image/svg+xml", sizes: "180x180" },
],
},
manifest: "/site.webmanifest",
openGraph: {
type: "website",
locale: "fr_FR",
url: BASE_URL,
siteName: "OBC Maçonnerie",
title: "OBC Maçonnerie | Constructeur & Maçon dans le Nord (59)",
description:
"Construction de maison, rénovation, assainissement et gros œuvre autour d'Orchies, Douai, Valenciennes. Benoît Colin vous accompagne de A à Z.",
images: [
{
url: "/og-image.jpg",
width: 1200,
height: 630,
alt: "OBC Maçonnerie - Construction et rénovation dans le Nord",
},
],
},
twitter: {
card: "summary_large_image",
title: "OBC Maçonnerie | Maçon constructeur dans le Nord (59)",
description:
"Construction de maison, rénovation, assainissement. Orchies, Douai, Valenciennes.",
images: ["/og-image.jpg"],
},
alternates: {
canonical: BASE_URL,
},
verification: {
google: process.env.GOOGLE_SITE_VERIFICATION || undefined,
},
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
const jsonLdBusiness = {
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": `${BASE_URL}/#business`,
name: "OBC Maçonnerie",
description:
"Construction de maison, rénovation, assainissement et gros œuvre dans le Nord",
telephone: siteConfig.phone,
email: siteConfig.email,
url: BASE_URL,
logo: `${BASE_URL}/icon-512.svg`,
image: `${BASE_URL}/og-image.jpg`,
priceRange: "$$",
address: {
"@type": "PostalAddress",
streetAddress: "221 Route de Saint-Amand",
addressLocality: "Mouchin",
postalCode: "59310",
addressRegion: "Hauts-de-France",
addressCountry: "FR",
},
geo: {
"@type": "GeoCoordinates",
latitude: 50.4817,
longitude: 3.3342,
},
areaServed: [
{ "@type": "City", name: "Orchies" },
{ "@type": "City", name: "Mouchin" },
{ "@type": "City", name: "Douai" },
{ "@type": "City", name: "Valenciennes" },
{ "@type": "City", name: "Flines-lès-Raches" },
{ "@type": "City", name: "Saint-Amand-les-Eaux" },
{ "@type": "City", name: "Château-l'Abbaye" },
{ "@type": "City", name: "Mérignies" },
],
hasOfferCatalog: {
"@type": "OfferCatalog",
name: "Services de maçonnerie",
itemListElement: [
{ "@type": "Offer", "name": "Construction de maison" },
{ "@type": "Offer", "name": "Rénovation" },
{ "@type": "Offer", "name": "Assainissement" },
{ "@type": "Offer", "name": "Création d'accès" },
{ "@type": "Offer", "name": "Démolition" },
],
},
openingHoursSpecification: {
"@type": "OpeningHoursSpecification",
dayOfWeek: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
opens: "07:00",
closes: "19:00",
},
contactPoint: {
"@type": "ContactPoint",
telephone: siteConfig.phone,
contactType: "customer service",
availableLanguage: "French",
},
founder: {
"@type": "Person",
name: "Benoît Colin",
jobTitle: "Maçon - Gérant OBC Maçonnerie",
},
sameAs: [],
};
const jsonLdWebSite = {
"@context": "https://schema.org",
"@type": "WebSite",
"@id": `${BASE_URL}/#website`,
name: "OBC Maçonnerie",
url: BASE_URL,
description:
"Site officiel d'OBC Maçonnerie, entreprise de construction et rénovation dans le Nord (59).",
publisher: {
"@id": `${BASE_URL}/#business`,
},
inLanguage: "fr-FR",
};
return (
<html lang="fr">
<head>
<meta name="theme-color" content="#1B2A4A" />
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
<link rel="apple-touch-icon" href="/apple-touch-icon.svg" />
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify([jsonLdBusiness, jsonLdWebSite]),
}}
/>
</head>
<body className="antialiased">
<a href="#main-content" className="skip-to-content">
Aller au contenu principal
</a>
{children}
<CookieBanner />
</body>
</html>
);
}