feat: refonte complète landing page - tunnel de vente + SEO optimisé

- SEO technique: sitemap.ts, robots.ts, structured data JSON-LD (Organization, Course, FAQPage)
- Meta tags optimisés pour 12+ mots-clés TikTok Shop France
- Hero SEO-optimisé: H1 ciblant "formation TikTok Shop" + "créateur affilié France"
- Nouvelle section ResultsShowcase: stats marché TikTok Shop + timeline 8 semaines
- Tableau comparatif HookLab vs alternatives
- 6 témoignages avec disclaimer Google-compliant (pas de faux avis)
- Pricing avec prix barré, bonus inclus, garantie satisfait ou remboursé
- Badges de confiance (paiement sécurisé, RGPD, support, garantie)
- Pop-up exit-intent (desktop) avec stats marché
- Barre sticky CTA mobile
- Notifications social proof animées
- CTA final avant footer
- Barre d'annonce urgence en haut
- FAQ enrichie (10 questions) avec structured data FAQPage
- Smooth scroll + animations CSS ajoutées

https://claude.ai/code/session_01H2aRGDaKgarPvhay2HxN6Y
This commit is contained in:
Claude
2026-02-11 12:02:42 +00:00
parent fe0df7448f
commit ba1d24fa02
18 changed files with 1113 additions and 106 deletions

View File

@@ -0,0 +1,116 @@
import Link from "next/link";
import Button from "@/components/ui/Button";
const features = [
{ label: "Programme structur\u00e9 semaine par semaine", hooklab: true, seul: false, autre: "Varie" },
{ label: "Coaching personnalis\u00e9 et appels de groupe", hooklab: true, seul: false, autre: false },
{ label: "Communaut\u00e9 priv\u00e9e d\u2019entrepreneurs", hooklab: true, seul: false, autre: true },
{ label: "Templates et scripts de contenu", hooklab: true, seul: false, autre: "Parfois" },
{ label: "Support WhatsApp illimit\u00e9", hooklab: true, seul: false, autre: false },
{ label: "Sp\u00e9cialis\u00e9 TikTok Shop (pas du g\u00e9n\u00e9rique)", hooklab: true, seul: false, autre: false },
{ label: "Mises \u00e0 jour \u00e0 vie du contenu", hooklab: true, seul: false, autre: "Varie" },
{ label: "R\u00e9sultats d\u00e8s les premi\u00e8res semaines", hooklab: true, seul: "Hasard", autre: "Varie" },
{ label: "Prix accessible en 2 mensualit\u00e9s", hooklab: true, seul: "Gratuit*", autre: false },
];
function CellIcon({ value }: { value: boolean | string }) {
if (value === true) {
return (
<div className="w-6 h-6 rounded-full bg-success/10 flex items-center justify-center mx-auto">
<svg className="w-4 h-4 text-success" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2.5} d="M5 13l4 4L19 7" />
</svg>
</div>
);
}
if (value === false) {
return (
<div className="w-6 h-6 rounded-full bg-error/10 flex items-center justify-center mx-auto">
<svg className="w-4 h-4 text-error" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2.5} d="M6 18L18 6M6 6l12 12" />
</svg>
</div>
);
}
return <span className="text-warning text-xs font-medium">{value}</span>;
}
export default function ComparisonTable() {
return (
<section className="py-20 md:py-32 bg-dark-light/30">
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8">
{/* Header */}
<div className="text-center max-w-2xl mx-auto mb-12">
<span className="inline-block px-3 py-1.5 bg-primary/10 border border-primary/20 rounded-full text-primary text-xs font-medium mb-4">
Comparatif
</span>
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-[-0.02em] mb-4">
HookLab vs. les <span className="gradient-text">alternatives</span>
</h2>
<p className="text-white/60 text-lg">
Pourquoi choisir un accompagnement sp&eacute;cialis&eacute; plut&ocirc;t que de te lancer seul.
</p>
</div>
{/* Table */}
<div className="overflow-x-auto">
<table className="w-full">
<thead>
<tr>
<th className="text-left text-white/40 text-sm font-medium pb-4 pr-4" />
<th className="pb-4 px-4">
<div className="bg-primary/10 border border-primary/30 rounded-xl py-3 px-4">
<span className="text-primary font-bold text-sm">HookLab</span>
</div>
</th>
<th className="pb-4 px-4">
<div className="bg-dark-lighter border border-dark-border rounded-xl py-3 px-4">
<span className="text-white/50 font-medium text-sm">Se lancer seul</span>
</div>
</th>
<th className="pb-4 px-4">
<div className="bg-dark-lighter border border-dark-border rounded-xl py-3 px-4">
<span className="text-white/50 font-medium text-sm">Autre formation</span>
</div>
</th>
</tr>
</thead>
<tbody>
{features.map((f, i) => (
<tr
key={i}
className={i < features.length - 1 ? "border-b border-dark-border" : ""}
>
<td className="py-4 pr-4 text-white/70 text-sm">{f.label}</td>
<td className="py-4 px-4 text-center">
<CellIcon value={f.hooklab} />
</td>
<td className="py-4 px-4 text-center">
<CellIcon value={f.seul} />
</td>
<td className="py-4 px-4 text-center">
<CellIcon value={f.autre} />
</td>
</tr>
))}
</tbody>
</table>
</div>
{/* Footnote */}
<p className="text-white/30 text-xs mt-4 text-center">
* Se lancer seul est gratuit mais les erreurs co&ucirc;tent du temps (et souvent de l&apos;argent).
</p>
{/* CTA */}
<div className="text-center mt-10">
<Link href="/candidature">
<Button size="lg">
Choisir HookLab
</Button>
</Link>
</div>
</div>
</section>
);
}