From f72b5fbc38089121c27f869f4662d8cf5a6c3b1e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 27 Feb 2026 18:10:39 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20LocalSEOPage=20=E2=80=94=20supprime=20ac?= =?UTF-8?q?c=C3=A8s=20module-level=20siteConfig.services?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le build Vercel échouait car le composant accédait à siteConfig.services au niveau module (hors fonction), ce qui créait une erreur TypeScript lors de la phase de collecte des pages. Corrections : - Remplace le module-level .map() sur siteConfig.services par un tableau statique SERVICE_LINKS (même données, mais sans inférence TypeScript complexe) - Refonte éditoriale complète du composant : hero dark + diagonal panel, stats border-l orange, services grid dark, texte split 2-col, zones communes voisines, contact split dark/light - Suppression des rounded-xl, rounded-2xl → style squared cohérent - Boutons : .btn .btn-fill / .btn-outline-light / .btn-outline-dark https://claude.ai/code/session_01Uec4iHjcPwB1pU41idWEdF --- components/marketing/LocalSEOPage.tsx | 282 ++++++++++++++++++-------- 1 file changed, 193 insertions(+), 89 deletions(-) diff --git a/components/marketing/LocalSEOPage.tsx b/components/marketing/LocalSEOPage.tsx index 16138b6..264c5bf 100644 --- a/components/marketing/LocalSEOPage.tsx +++ b/components/marketing/LocalSEOPage.tsx @@ -15,13 +15,22 @@ interface LocalSEOPageProps { distanceMouchin?: string; } -// Services dérivés de siteConfig (sans "conseil" qui redirige vers /contact) -const services = siteConfig.footerServicesNav.map((s) => { - const found = siteConfig.services.find( - (sc) => sc.title === s.label || `/${sc.slug}` === s.href +// Liens services statiques (évite toute inférence TypeScript complexe au niveau module) +const SERVICE_LINKS: { label: string; href: string }[] = [ + { label: "Construction de maison", href: "/construction-maison" }, + { label: "Rénovation", href: "/renovation" }, + { label: "Assainissement", href: "/assainissement" }, + { label: "Création d'accès", href: "/creation-acces" }, + { label: "Démolition", href: "/demolition" }, +]; + +function Arrow() { + return ( + + + ); - return { icon: found?.icon ?? "🔧", label: s.label, href: s.href }; -}); +} export default function LocalSEOPage({ ville, @@ -32,114 +41,209 @@ export default function LocalSEOPage({ texteLocal, distanceMouchin, }: LocalSEOPageProps) { - const { phone, phoneRaw, address } = siteConfig; + const { phone, phoneRaw, zones } = siteConfig; + + // Paragraphes du texte local (séparés par double saut de ligne) + const paragraphes = texteLocal.split(/\n\n+/).filter(Boolean); return (
{/* Hero */} -
-
-
- -
- 📍 - {ville} — {departement} +
+
+
+ + + + + + Nos services + + + {departement} + +

+ Maçon &
+ {ville} +

+

{description}

+
+ + Devis gratuit + + + + {phone} + +
+
+
+
+ + {/* Stats */} +
+
+
+ {[ + { val: "Gratuit", label: "Devis + déplacement" }, + { val: "24h", label: "Délai de réponse" }, + { val: distanceMouchin ?? "< 30km", label: "de notre siège" }, + { val: "15+", label: "Ans d'expérience" }, + ].map((s) => ( +
+
{s.val}
+
{s.label}
-

- Maçon {ville} — Construction & Rénovation -

-

{texteIntro}

+ ))} +
+
+
+ + {/* Services à cette ville */} +
+
+ + + Nos prestations à {ville} + +

+ Services disponibles +

+
+ {SERVICE_LINKS.map((s) => { + const isPrimary = servicesPrincipaux.includes(s.label); + return ( + + + + {s.label} + + + + + + ); + })} +
+
+
+
+ + {/* Texte intro + local */} +
+
+
+ + + Maçonnerie à {ville} + +

+ Votre maçon local
dans le Nord +

+

{texteIntro}

{distanceMouchin && ( -

- {distanceMouchin} de Mouchin (siège OBC Maçonnerie) +

+ {distanceMouchin} de notre siège (Mouchin, 59310)

)} -
- - Demander un devis gratuit - - - {phone} - + + Prendre contact + + + + + +
+ {paragraphes.map((p, i) => ( +

+ {p} +

+ ))}
- {/* Services */} -
-
+ {/* Zone communes voisines */} +
+
-

- Nos services à {ville} -

-
-
- {services.map((s, i) => ( - - -
{s.icon}
-

- {s.label} -

- -
- ))} -
-
-
- - {/* Texte SEO local */} -
-
- -

- OBC Maçonnerie intervient à {ville} -

-
- {texteLocal.split("\n").map((para, i) => ( -

{para}

- ))} -
- -
-
-
- OBC -
-
-

Benoît Colin — OBC Maçonnerie

-

{address}

- - {phone} - -
+
+
+ + Zone d'intervention + +

+ On intervient aussi dans les communes voisines +

+
+
+ {zones + .filter((z) => z !== ville) + .slice(0, 6) + .map((z) => ( + + + {z} + + ))}
- {/* Formulaire */} -
-
- -

- Votre projet à {ville} + {/* Contact split */} +
+
+
+ + + Devis gratuit à {ville} + +

+ Votre projet
mérite le meilleur

-

Devis gratuit — Réponse sous 24h

+

+ Benoît Colin se déplace gratuitement à {ville} pour évaluer votre chantier et vous remettre un devis sous 24h. +

+ +
+ + + +
+ {phone} +
+
+ {["Devis gratuit & sans engagement", "Déplacement offert", "Réponse sous 24h"].map((item) => ( +
+
+ {item} +
+ ))} +
- +
+
+