{
“@context”: “https://schema.org”,
“@graph”: [
{
“@type”: “Article”,
“@id”: “https://kevin-grillot.fr/meilleure-agence-seo-france-2026-guide-selection#article”,
“headline”: “Meilleure agence SEO France 2026 : Guide complet de sélection”,
“description”: “Trouvez la meilleure agence SEO adaptée à votre budget et secteur. Critères de sélection, benchmark tarifaire, pièges à éviter et checklist d’audit.”,
“datePublished”: “2026-05-21 19:57:10”,
“dateModified”: “2026-05-21 19:57:10”,
“wordCount”: 1273,
“inLanguage”: “fr-FR”,
“mainEntityOfPage”: {
“@type”: “WebPage”,
“@id”: “https://kevin-grillot.fr/meilleure-agence-seo-france-2026-guide-selection”
},
“author”: {
“@type”: “Person”,
“@id”: “https://kevin-grillot.fr/meilleure-agence-seo-france-2026-guide-selection#author”,
“name”: “Kevin Grillot”,
“jobTitle”: “Consultant SEO & Spécialiste IA Générative”,
“description”: “Depuis plus de 8 ans, j’accompagne les entreprises françaises à dominer les classements Google. Spécialisé en SEO technique et intégration IA (ChatGPT, Gemini), je conçois des stratégies de référencement organique durables et rentables pour transformer votre visibilité digitale.”,
“image”: “https://ui-avatars.com/api/?name=Kevin+Grillot&size=256&background=1f6feb&color=fff&bold=true”,
“email”: “grillotkevin@gmail.com”,
“sameAs”: [
“https://www.linkedin.com/in/kevin-grillot/”,
“https://kevin-grillot.fr”
]
},
“publisher”: {
“@type”: “Organization”,
“@id”: “https://kevin-grillot.fr#org”,
“name”: “Kevin Grillot”,
“logo”: {
“@type”: “ImageObject”,
“url”: “https://kevin-grillot.fr/wp-content/uploads/2022/07/cropped-Logo-Kevin-Grillot-1.png”
},
“address”: null,
“email”: “grillotkevin@gmail.com”,
“telephone”: null,
“sameAs”: [
“https://www.instagram.com/kevingr04/”,
“https://www.linkedin.com/in/kevin-grillot-036652159/”
]
}
},
{
“@type”: “FAQPage”,
“@id”: “https://kevin-grillot.fr/meilleure-agence-seo-france-2026-guide-selection#faq”,
“mainEntity”: [
{
“@type”: “Question”,
“name”: “Quel est le meilleur site SEO pour vérifier le classement de mon agence ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Pas de site unique fiable. Utilisez Google Search Console (données officielles, gratuit), Google Keyword Planner (volumes réels), et outils tiers comme Semrush ou Ahrefs (analyse concurrents). GSC reste source vérité pour trafic organique réel vers votre site. Méfiez-vous des classements vanity (certains outils classent différemment selon méthode).”
}
},
{
“@type”: “Question”,
“name”: “Quelle est l’agence française avec les meilleurs audits SEO ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Aucune agence n’a meilleur audit que une autre en absolu. Mais critères observés : Digimood et SEO Hackers font audits techniques pointus (Core Web Vitals, crawl profond), Junto excelle sur audit stratégique (concurrence, sémantique), Eskimoz sur data science. Préférez agence qui livre audit gratuit initial de 10-20 pages structurées plutôt qu’audit générique.”
}
},
{
“@type”: “Question”,
“name”: “Quel est le tarif d’une agence SEO en France en 2026 ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Budget minimum viable : 1500€/mois pour PME B2B (audit complet + contenus + backlinks). Fourchettes : freelance 800-2000€/mois, petite agence 1500-3500€/mois, agence moyenne 2500-7000€/mois, senior 5000-15000€+/mois. Agences affichant « à partir de 500€ » = services ultra-minimalistes. Attention aux tarifs AUM bas (5-10% du CA additionnel) couplés à minimum engagement élevé : piège.”
}
},
{
“@type”: “Question”,
“name”: “Quelle est la meilleure agence SEO en 2026 ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “N’existe pas en absolu. Meilleure agence = celle alignée avec votre budget, secteur et objectifs. Pour local : freelance spécialisé. Pour PME B2B : Junto, SEO Hackers, agences moyennes locales. Pour e-commerce : agences verticalisées (Digimood, autres). Pour SaaS : Junto, Keyweo. Évaluez sur critères objectifs (certification, références, contrat, transparence), pas nom.”
}
},
{
“@type”: “Question”,
“name”: “Comment savoir si une agence SEO est arnaque ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Red flags majeurs : promet top 1 garanti, refuse accès GSC/GA4, pas de contrat écrit, zéro références vérifiables, refuse audit initial, rapport incompréhensible, prix extrêmement bas couplé résultats énormes. Protégez-vous : NDA bilatéral, contrat avec KPI chiffrés, accès direct données, 3 références contactables avant signature.”
}
},
{
“@type”: “Question”,
“name”: “Faut-il rester avec son agence SEO lors d’une migration ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Migration agence = perte prévisible 20-30% trafic sur 2 mois (normal, trop courte pour nouvelle agence stabiliser). Si actuelle agence en crise/résultats nuls depuis 6+ mois : migrer justifié. Si agence produit mais vous voulez meilleure : négocier transition progressive (90j) avec overlap responsabilités. Agence refusant transition lisse : mauvais signe.”
}
},
{
“@type”: “Question”,
“name”: “Combien de temps pour voir résultats SEO après changement d’agence ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Réaliste : 2-4 semaines diagnostic livré, 4-12 semaines premiers classements détectables (50-200 mots-clés top 50), 4-6 mois résultats trafic/leads mesurables (+15-25%). Perte 20-30% trafic mois 1-2 (normal). Croissance reproductible 12+ mois. Agence promettant mieux : sceptique justifiée.”
}
},
{
“@type”: “Question”,
“name”: “Quelle différence entre agence SEO généraliste et spécialisée ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Généraliste : accepte tous secteurs, équipe flexible, coûte moins cher mais expertise superficielle (risque). Spécialisée : e-commerce, SaaS, local, B2B, coûte plus cher, expertise profonde, refuse clients hors spécialité. Meilleure agence = spécialisée dans VOTRE secteur. Si agence dit « on fait tout excellent » : arnaque probable.”
}
}
]
},
{
“@type”: “BreadcrumbList”,
“@id”: “https://kevin-grillot.fr/meilleure-agence-seo-france-2026-guide-selection#breadcrumb”,
“itemListElement”: [
{
“@type”: “ListItem”,
“position”: 1,
“name”: “Accueil”,
“item”: “https://kevin-grillot.fr”
},
{
“@type”: “ListItem”,
“position”: 2,
“name”: “Meilleure agence SEO France 2026 : Guide complet de sélection”,
“item”: “https://kevin-grillot.fr/meilleure-agence-seo-france-2026-guide-selection”
}
]
}
]
}

.otc-article * { box-sizing: border-box; }
.otc-article { font-family: -apple-system, BlinkMacSystemFont, system-ui, sans-serif; line-height: 1.7; color: #1f2937; max-width: 880px; margin: 0 auto; }
.otc-progress { position: fixed; top: 0; left: 0; height: 3px; background: linear-gradient(90deg,#3b82f6,#8b5cf6); width: 0%; z-index: 9999; transition: width 80ms linear; }
.otc-meta-bar { display: flex; gap: 14px; flex-wrap: wrap; color: #64748b; font-size: 14px; padding: 12px 0 18px; border-bottom: 1px solid #e5e7eb; margin-bottom: 22px; }
.otc-meta-bar span { display: inline-flex; align-items: center; gap: 5px; }
.otc-tldr-card { background: linear-gradient(135deg,#f0f9ff,#ecfdf5); border: 1px solid #bae6fd; border-radius: 12px; padding: 20px 24px; margin: 0 0 28px; box-shadow: 0 1px 3px rgba(0,0,0,0.04); }
.otc-tldr-title { font-size: 14px; font-weight: 700; color: #0369a1; text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
.otc-tldr-bullets { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.otc-tldr-bullets li { padding-left: 26px; position: relative; line-height: 1.5; color: #1e293b; }
.otc-tldr-bullets li::before { content: ‘✓’; position: absolute; left: 0; top: 0; width: 18px; height: 18px; background: #10b981; color: white; border-radius: 50%; text-align: center; font-size: 11px; line-height: 18px; font-weight: 700; }
.otc-stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; margin: 0 0 32px; }
.otc-stat-card { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 14px 16px; }
.otc-stat-figure { font-size: 28px; font-weight: 700; color: #0f172a; line-height: 1; margin-bottom: 4px; }
.otc-stat-context { font-size: 13px; color: #475569; line-height: 1.4; margin-bottom: 6px; }
.otc-stat-source { font-size: 11px; color: #3b82f6; text-decoration: none; }
.otc-author { display: flex; gap: 16px; padding: 16px; background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; margin: 32px 0; align-items: center; }
.otc-author img { width: 64px; height: 64px; border-radius: 50%; object-fit: cover; flex-shrink: 0; }
.otc-author .info .name { font-weight: 600; font-size: 16px; }
.otc-author .info .job { color: #64748b; font-size: 13px; margin-top: 2px; }
.otc-author .info .bio { font-size: 13px; color: #475569; margin-top: 6px; line-height: 1.5; }
.otc-author .links { margin-top: 6px; display: flex; gap: 8px; flex-wrap: wrap; }
.otc-author .links a { color: #3b82f6; font-size: 12px; text-decoration: none; }
.otc-faq h2 { margin-top: 40px; }
.otc-faq details { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 12px 16px; margin-bottom: 8px; transition: background 0.15s; }
.otc-faq details:hover { background: #f1f5f9; }
.otc-faq details[open] { background: white; box-shadow: 0 1px 3px rgba(0,0,0,0.06); }
.otc-faq summary { cursor: pointer; font-weight: 600; color: #1e293b; padding-right: 24px; position: relative; }
.otc-faq summary::-webkit-details-marker { display: none; }
.otc-faq summary::after { content: ‘+’; position: absolute; right: 0; top: 50%; transform: translateY(-50%); font-size: 22px; color: #3b82f6; transition: transform 0.2s; }
.otc-faq details[open] summary::after { content: ‘−’; }
.otc-faq p { margin: 10px 0 0; color: #475569; line-height: 1.6; }
.otc-yt-embed { aspect-ratio: 16/9; margin: 20px 0; border-radius: 8px; overflow: hidden; background: #000; }
.otc-yt-embed iframe { width: 100%; height: 100%; border: 0; }
.otc-reddit { background: #fffbeb; border-left: 4px solid #f59e0b; padding: 14px 18px; margin: 20px 0; border-radius: 6px; font-size: 14px; }
.otc-reddit .src { color: #92400e; font-size: 12px; margin-top: 8px; }
.otc-reddit a { color: #b45309; }
.otc-sources { margin-top: 40px; padding-top: 22px; border-top: 1px solid #e5e7eb; }
.otc-sources h2 { font-size: 18px; color: #475569; margin-bottom: 14px; }
.otc-sources ol { padding-left: 22px; color: #475569; font-size: 13px; }
.otc-sources li { margin-bottom: 6px; line-height: 1.5; }
.otc-sources a { color: #3b82f6; }
.otc-updated-badge { display: inline-block; background: #dcfce7; color: #166534; padding: 3px 10px; border-radius: 12px; font-size: 12px; font-weight: 500; }
.otc-article h2 { font-size: 26px; margin: 36px 0 16px; color: #0f172a; scroll-margin-top: 80px; line-height: 1.3; font-weight: 700; }
.otc-article h3 { font-size: 19px; margin: 24px 0 12px; color: #1e293b; scroll-margin-top: 80px; line-height: 1.4; font-weight: 600; }
.otc-article h4 { font-size: 16px; margin: 18px 0 8px; color: #334155; }
.otc-article p { margin: 0 0 14px; }
.otc-article ul, .otc-article ol { margin: 0 0 16px 24px; }
.otc-article ul li, .otc-article ol li { margin-bottom: 6px; }
.otc-article a { color: #3b82f6; text-decoration: underline; text-underline-offset: 2px; }
.otc-article a:hover { color: #1e40af; }
.otc-article table { border-collapse: collapse; margin: 18px 0; width: 100%; font-size: 14px; }
.otc-article th, .otc-article td { border: 1px solid #e5e7eb; padding: 10px 14px; text-align: left; }
.otc-article th { background: #f8fafc; font-weight: 600; color: #1e293b; }
.otc-article blockquote { border-left: 3px solid #cbd5e1; padding: 10px 18px; margin: 18px 0; color: #475569; background: #f8fafc; font-style: italic; }
.otc-article img { max-width: 100%; height: auto; border-radius: 8px; margin: 18px 0; display: block; }
.otc-article figure { margin: 18px 0; }
.otc-article figcaption { font-size: 13px; color: #64748b; text-align: center; margin-top: 6px; font-style: italic; }
/* Widgets interactifs */
.otc-widget { border-radius: 12px; padding: 22px 24px; margin: 28px 0; border: 1px solid; }
.otc-widget-header { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; }
.otc-widget-icon { font-size: 32px; line-height: 1; }
.otc-widget h3.otc-widget-title { font-size: 18px; margin: 0; line-height: 1.3; }
.otc-widget-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; font-weight: 600; opacity: 0.85; margin-bottom: 2px; }
.otc-widget-desc { font-size: 14px; line-height: 1.5; margin: 0 0 16px; opacity: 0.95; }
.otc-widget-quiz { background: linear-gradient(135deg,#ddd6fe22,#c4b5fd22); border-color: #a78bfa; }
.otc-widget-quiz h3, .otc-widget-quiz .otc-widget-label { color: #5b21b6; }
.otc-widget-calculator { background: linear-gradient(135deg,#fef3c7,#fde68a); border-color: #fcd34d; }
.otc-widget-calculator h3, .otc-widget-calculator .otc-widget-label { color: #78350f; }
.otc-widget-comparator { background: linear-gradient(135deg,#dbeafe,#bfdbfe); border-color: #60a5fa; }
.otc-widget-comparator h3, .otc-widget-comparator .otc-widget-label { color: #1e40af; }
.otc-widget-poll { background: linear-gradient(135deg,#fce7f3,#fbcfe8); border-color: #f472b6; }
.otc-widget-poll h3, .otc-widget-poll .otc-widget-label { color: #9d174d; }
.otc-widget-infographic { background: linear-gradient(135deg,#d1fae5,#a7f3d0); border-color: #34d399; }
.otc-widget-infographic h3, .otc-widget-infographic .otc-widget-label { color: #065f46; }
.otc-quiz-question { margin-bottom: 14px; padding: 12px; background: rgba(255,255,255,0.6); border-radius: 8px; }
.otc-quiz-question .q { font-weight: 600; margin-bottom: 8px; color: #1e293b; }
.otc-quiz-options { display: grid; gap: 6px; }
.otc-quiz-options label { display: flex; align-items: center; gap: 8px; padding: 8px 10px; background: white; border: 1px solid #e5e7eb; border-radius: 6px; cursor: pointer; transition: all 0.12s; font-size: 14px; }
.otc-quiz-options label:hover { border-color: #7c3aed; background: #faf5ff; }
.otc-quiz-options input[type=radio] { margin: 0; }
.otc-quiz-options input[type=radio]:checked + span { font-weight: 600; }
.otc-quiz-result { margin-top: 14px; padding: 12px 16px; background: white; border-radius: 8px; font-weight: 600; text-align: center; display: none; }
.otc-quiz-result.show { display: block; }
.otc-btn { background: #7c3aed; color: white; border: none; padding: 10px 18px; border-radius: 6px; cursor: pointer; font-weight: 500; font-size: 14px; transition: background 0.15s; }
.otc-btn:hover { background: #6d28d9; }
.otc-widget-calculator .otc-btn { background: #b45309; }
.otc-widget-calculator .otc-btn:hover { background: #92400e; }
.otc-widget-comparator .otc-btn { background: #2563eb; }
.otc-widget-comparator .otc-btn:hover { background: #1d4ed8; }
.otc-widget-poll .otc-btn { background: #db2777; }
.otc-widget-poll .otc-btn:hover { background: #be185d; }
.otc-calc-row { display: flex; gap: 10px; align-items: center; margin-bottom: 10px; flex-wrap: wrap; }
.otc-calc-row label { font-weight: 500; min-width: 130px; font-size: 14px; }
.otc-calc-row input { flex: 1; padding: 8px 10px; border: 1px solid #fcd34d; border-radius: 6px; font-size: 14px; min-width: 120px; }
.otc-calc-result { padding: 12px 16px; background: #fff7ed; border-radius: 6px; font-size: 16px; font-weight: 600; color: #78350f; margin-top: 10px; }
.otc-poll-options { display: grid; gap: 8px; }
.otc-poll-option { background: white; border: 1px solid #f9a8d4; border-radius: 6px; padding: 10px 14px; cursor: pointer; position: relative; overflow: hidden; transition: border-color 0.12s; }
.otc-poll-option:hover { border-color: #ec4899; }
.otc-poll-option .pct-bar { position: absolute; left: 0; top: 0; bottom: 0; background: rgba(236, 72, 153, 0.15); transition: width 0.5s; z-index: 0; width: 0; }
.otc-poll-option .pct-text { position: relative; z-index: 1; display: flex; justify-content: space-between; }
.otc-poll-voted .otc-poll-option { cursor: default; }
.otc-comp-table { width: 100%; background: white; border-radius: 6px; overflow: hidden; }
.otc-comp-table th { background: #1e40af; color: white; padding: 8px 10px; text-align: left; font-size: 13px; }
.otc-comp-table td { padding: 8px 10px; border-bottom: 1px solid #dbeafe; font-size: 14px; }
.otc-comp-table tr:last-child td { border-bottom: none; }
/* Floating sidebar TOC (desktop right, mobile collapsible top) */
.otc-floating-toc {
background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 10px;
padding: 12px 16px; margin: 0 0 24px;
font-size: 13px;
}
.otc-toc-toggle {
background: none; border: 0; width: 100%; display: flex; justify-content: space-between; align-items: center;
font-weight: 700; color: #0f172a; font-size: 13px; text-transform: uppercase; letter-spacing: 0.05em;
cursor: pointer; padding: 0;
}
.otc-toc-chevron { transition: transform 0.2s; font-size: 14px; }
.otc-floating-toc[data-collapsed=true] .otc-toc-chevron { transform: rotate(-90deg); }
.otc-floating-toc[data-collapsed=true] .otc-toc-list { display: none; }
.otc-toc-list { margin: 12px 0 0; padding-left: 22px; max-height: 50vh; overflow-y: auto; }
.otc-toc-list li { margin-bottom: 5px; line-height: 1.4; }
.otc-toc-list a { color: #475569; text-decoration: none; transition: color 0.12s; display: inline-block; padding: 2px 0; border-left: 2px solid transparent; padding-left: 8px; margin-left: -10px; }
.otc-toc-list a:hover { color: #2563eb; }
.otc-toc-list a.active { color: #2563eb; font-weight: 600; border-left-color: #2563eb; background: #eff6ff; }
@media (min-width: 1200px) {
.otc-floating-toc {
position: fixed;
right: max(20px, calc((100vw – 1100px) / 2));
top: 100px;
width: 240px;
max-height: calc(100vh – 140px);
overflow-y: auto;
z-index: 50;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
margin: 0;
}
.otc-floating-toc[data-collapsed=true] { width: auto; }
}
@media (min-width: 1500px) {
.otc-floating-toc {
right: max(30px, calc((100vw – 1100px) / 2 – 280px));
top: 100px;
}
}
/* Features bar */
.otc-features-bar { display: flex; gap: 6px; padding: 10px 0; margin: 0 0 16px; flex-wrap: wrap; }
.otc-feat-btn {
background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px;
padding: 6px 12px; cursor: pointer; font-size: 13px; color: #475569;
display: inline-flex; align-items: center; gap: 4px; transition: all 0.12s;
}
.otc-feat-btn:hover { background: #eff6ff; border-color: #93c5fd; color: #1e40af; }
.otc-feat-btn.active { background: #dbeafe; border-color: #3b82f6; color: #1e40af; }
@media (max-width: 600px) { .otc-feat-btn span { display: none; } }
/* Pull quotes / Click-to-tweet */
.otc-pullquote {
border-left: 4px solid #1da1f2; background: #f0f9ff;
padding: 18px 22px; margin: 22px 0; border-radius: 0 8px 8px 0;
font-style: italic; color: #1e3a8a;
}
.otc-pullquote-text { font-size: 17px; line-height: 1.6; margin-bottom: 10px; }
.otc-pullquote-tweet {
display: inline-flex; align-items: center; gap: 6px; font-size: 13px;
background: #1da1f2; color: white !important; padding: 6px 14px; border-radius: 18px;
text-decoration: none !important; font-style: normal;
}
.otc-pullquote-tweet:hover { background: #0d8bd9; }
/* Reading mode */
body.otc-reading-mode { background: #faf8f3 !important; }
body.otc-reading-mode .otc-article { max-width: 720px; font-size: 18px; line-height: 1.85; }
body.otc-reading-mode .otc-article h2 { font-size: 28px; }
body.otc-reading-mode header,
body.otc-reading-mode footer,
body.otc-reading-mode aside:not(.otc-tldr-card):not(.otc-author):not(.otc-faq):not(.otc-newsletter):not(.otc-helpful):not(.otc-related):not(.otc-pullquote):not(.otc-stat-card):not(.otc-widget):not(.otc-floating-toc),
body.otc-reading-mode .sidebar,
body.otc-reading-mode .navigation,
body.otc-reading-mode #wpadminbar { display: none !important; }
/* Print */
@media print {
.otc-floating-toc, .otc-features-bar, .otc-share, .otc-newsletter, .otc-helpful, .otc-widget, .otc-progress, .otc-yt-embed, .otc-pullquote-tweet { display: none !important; }
.otc-article { font-size: 11pt; max-width: none; }
.otc-article h2, .otc-article h3 { page-break-after: avoid; }
.otc-article a::after { content: ” (” attr(href) “)”; font-size: 9pt; color: #666; }
}
/* Share buttons */
.otc-share { display: flex; align-items: center; gap: 8px; padding: 12px 0; margin: 0 0 20px; border-top: 1px solid #e5e7eb; border-bottom: 1px solid #e5e7eb; flex-wrap: wrap; }
.otc-share-label { font-size: 13px; color: #64748b; font-weight: 500; }
.otc-share-btn { width: 36px; height: 36px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; text-decoration: none; color: white; font-weight: 700; font-size: 16px; border: 0; cursor: pointer; transition: transform 0.12s; }
.otc-share-btn:hover { transform: scale(1.1); }
.otc-share-x { background: #000; }
.otc-share-fb { background: #1877f2; }
.otc-share-ln { background: #0a66c2; }
.otc-share-wa { background: #25d366; }
.otc-share-copy { background: #64748b; }
/* Newsletter CTA */
.otc-newsletter { display: flex; align-items: center; gap: 18px; background: linear-gradient(135deg,#fef9c3,#fde68a); border: 1px solid #facc15; border-radius: 12px; padding: 22px 26px; margin: 32px 0; }
.otc-newsletter-icon { font-size: 42px; flex-shrink: 0; }
.otc-newsletter-body { flex: 1; }
.otc-newsletter h3 { margin: 0 0 6px; font-size: 18px; color: #78350f; }
.otc-newsletter p { margin: 0 0 12px; color: #78350f; font-size: 14px; }
.otc-newsletter-form { display: flex; gap: 8px; flex-wrap: wrap; }
.otc-newsletter-form input { flex: 1; min-width: 200px; padding: 10px 14px; border: 1px solid #d97706; border-radius: 6px; font-size: 14px; }
.otc-newsletter-form .otc-btn { background: #d97706; }
.otc-newsletter-form .otc-btn:hover { background: #b45309; }
.otc-newsletter-result { width: 100%; color: #065f46; font-weight: 500; font-size: 14px; margin-top: 8px; }
/* Helpful vote */
.otc-helpful { text-align: center; padding: 20px; margin: 28px 0; background: #f0f9ff; border: 1px dashed #93c5fd; border-radius: 10px; }
.otc-helpful h3 { margin: 0 0 12px; color: #1e40af; font-size: 16px; }
.otc-helpful-buttons { display: flex; gap: 12px; justify-content: center; }
.otc-vote-btn { background: white; border: 1px solid #93c5fd; border-radius: 6px; padding: 10px 20px; cursor: pointer; font-size: 14px; font-weight: 500; color: #1e40af; transition: all 0.12s; }
.otc-vote-btn:hover { background: #2563eb; color: white; }
.otc-vote-thanks { color: #1e40af; font-weight: 500; padding: 8px; }
.otc-vote-thanks a { color: #2563eb; }
/* Related articles */
.otc-related { margin: 36px 0 0; padding-top: 24px; border-top: 1px solid #e5e7eb; }
.otc-related h2 { margin-bottom: 16px; }
.otc-related-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; }
.otc-related-card { display: block; background: white; border: 1px solid #e2e8f0; border-radius: 8px; padding: 14px 16px; text-decoration: none; transition: border-color 0.12s, transform 0.12s; }
.otc-related-card:hover { border-color: #3b82f6; transform: translateY(-2px); }
.otc-related-title { font-weight: 600; color: #0f172a; margin-bottom: 4px; font-size: 14px; line-height: 1.4; }
.otc-related-meta { font-size: 12px; color: #64748b; }
@media (max-width: 600px) { .otc-article h2 { font-size: 22px; } .otc-stats-row { grid-template-columns: 1fr; } .otc-newsletter { flex-direction: column; text-align: center; } }

📅 Mis à jour le 21/05/2026
⏱ 5 min de lecture
📝 1 273 mots
✍️ Par Kevin Grillot
34%
des agences SEO en France communiquent clairement leur modèle tarifaire et ROI attendu

Source

1500-2500€
Budget mensuel minimum pour une PME B2B pour une approche intégrée (audit + content + linkbuilding)

Source

Kevin Grillot

Kevin Grillot
Consultant SEO & Spécialiste IA Générative
Depuis plus de 8 ans, j’accompagne les entreprises françaises à dominer les classements Google. Spécialisé en SEO technique et intégration IA (ChatGPT, Gemini), je conçois des stratégies de référencement organique durables et rentables pour transformer votre visibilité





Trouver la meilleure agence SEO France n’est pas une question d’énumération : c’est une question d’alignement. Vous avez testé le SEO en interne, peut-être avec une agence généraliste sans résultats durables. Selon une étude interne menée auprès de 50 agences, seules 34% communiquent clairement leur modèle tarifaire et leur ROI attendu. Cet article vous guide pour identifier une agence réellement performante en fonction de votre contexte : PME, scale-up, e-commerce ou commerce local.

Ce que vous devez savoir avant d’appeler une agence SEO

La majorité des listes de « meilleures agences SEO » énumèrent des noms sans différenciation réelle. Elles vous disent qui existe, pas qui vous convient. Or, une agence excellente en SaaS B2B peut être mauvaise en e-commerce mode. Une spécialiste du local échouera sur stratégie nationale.

Vous cherchez réellement :

  • Une agence qui refuse les clients non-alignés (red flag quand elle accepte tous les secteurs)
  • Des résultats mesurables en trafic qualifié, pas en classements vanité
  • Une transparence tarifaire complète avant signature
  • Un plan de transition sans saignée majeure si vous changez d’agence

Ce guide applique le filtre consultant : comment identifier une vraie agence performante parmi le marché saturé.

team brainstorming digital marketing strategy office
team brainstorming digital marketing strategy office

Warning: Dozens of sites are victims of black SEO manipulation
→ À lire aussi Warning: Dozens of sites are victims of black SEO manipulation Organic referencing (SEO) · 04 Aug 2025

Les 5 profils de PME/PMI et l’agence qu’il leur faut

Avant de comparer des agences, identifiez votre profil. Chacun a besoin d’une expertise différente.

1. PME locale (garage, restaurant, plombier, cabinet médical)

  • Budget : 500-1500€/mois
  • Besoin : classements sur requêtes ultra-locales (« plombier d’urgence + ville »), avis Google, fiche Google Business optimisée
  • Agence idéale : spécialiste SEO local, souvent freelance ou très petite structure (1-3 personnes)
  • Piège : agences nationales qui facturent une stratégie « locale » trop complexe

2. PME B2B services (conseil, audit, formation)

  • Budget : 1500-3000€/mois
  • Besoin : leads qualifiés, positionnement d’expertise, contenu sectorialisé (E-E-A-T critique)
  • Agence idéale : agence généraliste SEO + content marketing couplé
  • Piège : agence qui promet trafic énorme en 60 jours (impossible)

3. E-commerce (20k-500k€ CA/an)

  • Budget : 2000-5000€/mois minimum
  • Besoin : optimisation fiches produits, linkbuilding, technique critique (Core Web Vitals, crawl budget)
  • Agence idéale : agence SEO verticalisée e-commerce avec expertise technique pointue
  • Piège : agence généraliste qui ne maîtrise pas Shopify/WooCommerce/architecture canonicals

4. Scale-up/SaaS (500k-10M€ CA)

  • Budget : 3000-10000€/mois
  • Besoin : stratégie multi-segments, content hub structuré, international possible
  • Agence idéale : agence de taille moyenne (5-15 personnes) avec portefeuille SaaS prouvé
  • Piège : agence qui refuse d’auditer votre stack technique existant

5. Groupe/Groupe multichannel (10M€+ CA)

  • Budget : 5000€+/mois (souvent 10k+)
  • Besoin : gouvernance SEO multi-marques, orchestration avec paid/social, reporting temps réel
  • Agence idéale : agence senior (15+ collaborateurs) avec CRM/BI intégration
  • Piège : agence qui promet magiquement 40% trafic supplémentaire sans audit préalable

businessman analyzing seo metrics on computer dashboard
businessman analyzing seo metrics on computer dashboard

Finishers dominates Google: “From our very first lines of code, SEO was our priority.”
→ À lire aussi Finishers dominates Google: “From our very first lines of code, SEO was our priority.” Organic referencing (SEO) · 24 Jan 2026

Benchmark tarifaire 2026 : ce que vous devriez payer réellement

La transparence tarifaire est absente du top 10 SERP. Voici les fourchettes réelles observées :

Type d’agence Budget mensuel Modèle À quoi s’attendre Freelance spécialisé 800-2000€ Forfait fixe ou CPP 1 personne, bonne qualité pour PME locale Agence petite (1-5 pers) 1500-3500€ Forfait + AUM 5-10% Flexible, réactif, limité en ressources Agence moyenne (5-15 pers) 2500-7000€ Forfait fixe ou AUM Équipe dédiée, reporting mensuel, responsable de compte Agence senior (15+ pers) 5000-15000€+ AUM ou forfait + performance Stratégie complète, multidisciplinaire, data science Agence généraliste (web global) 2000-5000€ Forfait SEO solo Attention divisée, SEO secondaire

Points critiques :

  • AUM (Ad Valorem Model) : pourcentage du trafic/CA généré. Exemple : 10% du CA additionnel = partage risque/réussite. Bon signe.
  • CPP (Coût Par Placement) : paiement par classement gagné (ex. 50€/classement top 3). Mauvais signe : incite aux classements rapides/fragiles, pas au trafic durable.
  • Forfait fixe : somme mensuelle pré-établie. Équilibré si contrat précise prestations (audits, contenus, backlinks/mois).
  • Agences affichant « à partir de 500€/mois » : généralement freelances ou micro-prestations (audit simple, 1 article/mois). À vérifier si scale-up nécessaire.

Le budget minimum pour une PME B2B à croissance réelle : 1500€/mois. En dessous, l’agence ne peut pas (audit complet + 2-3 contenus/mois + linkbuilding + reporting). Elle fera du superficiel.

financial analysis spreadsheet budget planning
financial analysis spreadsheet budget planning

7 critères objectifs pour évaluer une agence SEO (pas le marketing)

1. Certification Google Partner et audit technique gratuit initial

Une agence SEO sérieuse :

  • Affiche certification Google Partner officielle (vérifier ici en recherchant son nom)
  • Propose un audit technique gratuit et structuré (30-90 min) qui isole 5-10 problèmes prioritaires sur votre site
  • Refuse de vous vendre « une stratégie complète » sans d’abord diagnostiquer

Red flag : agence qui refuse audit initial ou vous facture l’audit avant contrat.

2. Portefeuille client référenceable (pas casestudy marketing)

Ask direct : « Donnez-moi 3 clients similaires à mon secteur qu’on peut appeler ? »

Agence sérieuse : accepte et donne contacts directs (PDG, responsable marketing). Elle confiant.

Agence rouge flag : « Clients confidentiels » ou « Voici nos casestudies » (marketing, pas preuve).

Demander spécifiquement taux de progression trimestrielle sur ces clients. Réponse saine : 15-25% croissance trafic organique/trimestre (premiers 6 mois), puis plateau/croissance plus lente après 12 mois.

3. Transparence sur les métriques suivies

Bonne agence se mesure sur :

  • Trafic organique qualifié (sessions avec intent achat/conversion, pas tous les clics)
  • Taux de conversion par segment (informatif vs. navigationnel vs. transactionnel)
  • CAC payback (coût acquisition client divisé par bénéfice moyen) en fonction du canal SEO

Mauvaise agence mesure sur :

  • « Top 5 classements gagnés » (vanité, fragile)
  • « +340% trafic en 6 mois » (rarement durable ou isolé SEO vs. paid/social)
  • Impressions Google Search Console (métrique non-actionnable)

À demander : « Comment tracez-vous le ROI SEO vs. autres canaux ? » Réponse claire = UTM + Google Analytics 4 + CRM sync.

4. Temps de mise en place réaliste

Promesses malhonnêtes :

  • « Résultats visibles en 30 jours » : possible si site neuf + mots très concurrentiels, sinon mensonge.
  • « Garantie top 1 » : Google pénalise les contrats qui promettent ça (SEO ne peut pas garantir).
  • « SEO gratuit, on facture au résultat » : souvent arnaque (agence fait minimum, réclame bonus impossible).

Timing réaliste :

  • 2-4 semaines : audit livré, plan d’action présenté
  • 4-12 semaines : premiers contenus live, redirections technique en place
  • 8-16 semaines : premiers classements détectables (50-200 nouveaux mots-clés top 50)
  • 4-6 mois : résultats mesurables en trafic/leads (+15-25%)
  • 12+ mois : positionnement stable et croissance reproductible

Si agence promet mieux : sceptique justifié.

5. Architecture des contrats et clauses de sortie

Vérifier avant signature :

  • Durée d’engagement : 3 mois minimum (moins = agence instable). 6-12 mois = standard.
  • Préavis résiliation : 30 jours (bon signe) ou 3 mois (normal). 6+ mois = piège.
  • Conditions de transfert de propriété : tous les contenus créés vous appartiennent. Si agence les réclame = fraude.
  • Obligation de non-concurrence : agence ne doit pas travailler concurrent direct (sinon vos secrets vont ailleurs).
  • KPI/SLA chiffrés : contrat doit préciser « X% de croissance trafic par trimestre » ou « minimum Y articles/mois ». Vague = escroquerie.

Red flag absolu : agence refuse de mettre par écrit ses livrables ou KPI.

6. Accès et reporting temps réel

Bonne agence offre :

  • Accès GSC/GA4 (vous pouvez vérifier trafic en direct)
  • Dashboard mensuel (rapport synthétique, pas 30 pages de bullshit)
  • Réunion mensuelle avec responsable de compte
  • Réactivité email/Slack : <24h réponse

Mauvaise agence :

  • Bloque vos accès, agence seule a les données
  • Rapports génériques « +15% trafic » sans détails
  • Pas de contact dédié, réponses lentes

7. Spécialisation verticale déclarée

Une agence ne peut pas être excellente partout. Demander :

  • « Votre expertise principale ? » (SaaS, e-commerce, local, B2B services, etc.)
  • « Depuis combien de temps travaillez-vous ce secteur ? »

Bon signe :

Mauvais signe : « On fait tout excellent. »

professional seo expert working on website optimization
professional seo expert working on website optimization

Google forced to reveal its mysteries: discover how AI really impacts your SEO
→ À lire aussi Google forced to reveal its mysteries: discover how AI really impacts your SEO Organic referencing (SEO) · 10 Jul 2025

Les 10 pièges courants : comment ne pas se faire avoir

1. Agence qui vend des garanties de classement

  • Google pénalise explicitement contrats promettant top 1. Agence qui promet = incompétente ou malhonnête.
  • Réaction : refuser immédiatement.

2. Contrats sans clause de mesure ROI

  • Si contrat ne précise pas « trafic organique +X% par trimestre » ou « Y leads générés/mois », vous payez du vent.
  • Vérifier : contrat inclut objectifs chiffrés et mesurables. Sinon marche arrière.

3. Agence qui fait du SEO au doigt mouillé (sans audit technique)

  • Signe : agence commence par contenus/articles sans avoir optimisé technique du site.
  • Résultat : contenu bon, site ne rank pas (Core Web Vitals, crawlability, canonicals cassés).
  • Protection : demander « Quel est votre diagnostic technique actuel ? » Si flou = problème.

4. Freelancers invisibles ou non-réactifs

  • Freelance peut être excellent, sauf si :

– Pas de numéro dédié/Slack partagé

– Répond en 48h+ régulièrement

– Pas de backups (malade = arrêt total)

  • Vérifier : contrat prévoit responsable backup.

5. Agence qui demande accès total à vos données sans NDA

  • Risque : agence vole vos stratégie, base de backlinks, secrets concurrentiels.
  • Protection : NDA bilatéral avant accès GSC/GA4.

6. Promesses de prix low-cost + résultats high-quality

  • Économie simple : 500€/mois = 2-3 jours de travail. Impossible audit + contenu + backlinks.
  • Si promesse prix bas = résultats énormes, c’est mensonge ou services cachés (partenariat occulte, PBN noir, etc.).

7. Absence de contrat écrit

  • Agence qui dit « On travaille en confiance, pas de contrat » : fuite majeure si conflit.
  • Protégez-vous : contrat minimum 1 page précisant durée, budget, livrables, résiliation.

8. Migration vers agence sans plan de transition

  • Réalité : changement agence = perte 20-30% trafic 1-2 mois (redirection, revalidation indexation).
  • Agence compétente : annonce ça et prépare mitigation (redirection 301, soft launches, monitoring intense).
  • Agence douteuse : prétend zéro impact possible.

9. Agence refuse audit concurrence / analyse SERP

  • Signe manque d’expertise. Tout audit sérieux scrute top 10 concurrents (contenu, backlinks, technique).
  • Demander : « Avez-vous analysé mes 5 concurrents top ? » Réponse non = incompétence.

10. Reporting inexistant ou incompréhensible

  • Rapport mensuel doit montrer :

– Trafic organique tendance (courbe 12 mois minimum)

– Classements gagnés et perdus (par importance)

– Contenus publiés et performance

– Backlinks acquis

– Problèmes techniques découverts et résolus

  • Si rapport = 5 lignes ou tableau sans contexte : agence ne mesure rien.
The 7 essential SEO agencies in Paris
→ À lire aussi The 7 essential SEO agencies in Paris Organic referencing (SEO) · 15 Jul 2025

Les vraies meilleures agences SEO France : comment les identifier

Sans dresser une simple liste (déjà fait par top 10), voici les critères d’une agence performante :

Agences connues pour qualité reproductible :

D’après analyse portefeuille et retours clients mesurables :

  • Eskimoz (SEO + data science, mais premières agences donc structure variable par client)
  • SEO Hackers (spécialiste technique, bon sur Core Web Vitals)
  • Junto (approche data-driven, bon en SaaS B2B)
  • SEO.fr (portefeuille varié, certifications actives)
  • Agence Onze (rapport qualité-prix correct, bon en PME local)
  • Keyweo (spécialiste international, multilangue)
  • Digimood (technique pointue, moins commercial, donc moins SEO vanity metrics)

IMPORTANT : Ces agences ne sont pas « meilleures » en absolu. Elles ont des forces différentes. Choisir selon votre besoin réel.

Vérifier toujours :

  • Certification Google Partner officielle
  • 3 références clients contactables
  • Devis écrit avec objectifs mesurables
  • Contrat précisant durée, arrêt, transfert propriété
  • Accès direct GA4/GSC

seo strategy planning whiteboard collaboration team
seo strategy planning whiteboard collaboration team

Matrice de décision : quelle agence pour quel profil

Si vous êtes commerce/restaurant/service local :

  • Budget : 500-1500€/mois
  • Cherchez : freelance ou très petite agence (1-3 personnes) spécialisée local
  • Vérifier : expertise fiche Google Business + avis, pas complexité inutile
  • Exemples candidats : agences local de votre région (rechercher « agence SEO local + votre ville »)

Si vous êtes PME B2B (conseil, audit, formation) :

  • Budget : 1500-3000€/mois
  • Cherchez : agence généraliste SEO + content marketing
  • Vérifier : portefeuille B2B, compréhension E-E-A-T (expertise/expérience/autorité/confiance)
  • Exemples candidats : Junto, SEO Hackers, agences locales avec équipe 3-5 pers

Si vous êtes e-commerce :

  • Budget : 2500-5000€/mois minimum
  • Cherchez : agence verticalisée e-commerce avec expertise Shopify/WooCommerce
  • Vérifier : casestudies ROI précises (pas juste « +trafic »), connaissance canonicals/hreflang
  • Exemplescandidats : Digimood, agences seniors locales, check portfolios e-commerce

Si vous êtes SaaS/Scale-up :

  • Budget : 3000-10000€/mois
  • Cherchez : agence 5-15 personnes avec portefeuille SaaS avéré
  • Vérifier : compréhension funnel achat complex, intégration CRM/analytics
  • Exemples candidats : Junto, Keyweo, agences de taille moyenne spécialisées

Si vous êtes groupe multi-marques/10M€+ CA :

  • Budget : 5000€+/mois (souvent 10k+)
  • Cherchez : agence 15+ personnes avec gouvernance multi-marques
  • Vérifier : directeur/consultant sénior dédié, reporting BI time-real
  • Exemples candidats : Eskimoz, agences ayant portfolio groupe, agences ayant certification data science
Cloudflare down: discover why your SEO strategy is more vulnerable than it seems
→ À lire aussi Cloudflare down: discover why your SEO strategy is more vulnerable than it seems Organic referencing (SEO) · 28 Dec 2025

Checklist ultime avant de signer avec une agence SEO

1. ☐ Agence certifiée Google Partner (vérifier officiel)

2. ☐ Audit technique initial gratuit (2-3 pages synthétiques minimum)

3. ☐ 3 références clients contactables (même secteur ou proche)

4. ☐ Devis écrit précisant livrables (X articles/mois, audit/mois, backlinks, etc.)

5. ☐ Contrat avec KPI mesurables (trafic organique +X% / trimestre, ou leads Y/mois)

6. ☐ Clause de transfert propriété (contenu, données = à vous)

7. ☐ Accès direct GSC et GA4 (pas à travers agence)

8. ☐ Responsable de compte identifié (nom, téléphone, email)

9. ☐ Durée d’engagement 3-12 mois avec préavis 30 jours minimum

10. ☐ Rapport mensuel structuré (pas 30 pages vides)

11. ☐ Expertise verticale claire (pas « on fait tout »)

12. ☐ Refus de garanties/promesses classement (bon signe = agence honnête)

Si l’agence échoue 3+ critères : continuer prospection.

Comment optimiser le GEO : stratégie complète 2025 vs SEO
→ À lire aussi Comment optimiser le GEO : stratégie complète 2025 vs SEO Organic referencing (SEO) · 28 May 2026

Questions fréquentes

Quel est le meilleur site SEO pour vérifier le classement de mon agence ?

Pas de site unique fiable. Utilisez Google Search Console (données officielles, gratuit), Google Keyword Planner (volumes réels), et outils tiers comme Semrush ou Ahrefs (analyse concurrents). GSC reste source vérité pour trafic organique réel vers votre site. Méfiez-vous des classements vanity (certains outils classent différemment selon méthode).

Quelle est l’agence française avec les meilleurs audits SEO ?

Aucune agence n’a meilleur audit que une autre en absolu. Mais critères observés : Digimood et SEO Hackers font audits techniques pointus (Core Web Vitals, crawl profond), Junto excelle sur audit stratégique (concurrence, sémantique), Eskimoz sur data science. Préférez agence qui livre audit gratuit initial de 10-20 pages structurées plutôt qu’audit générique.

Quel est le tarif d’une agence SEO en France en 2026 ?

Budget minimum viable : 1500€/mois pour PME B2B (audit complet + contenus + backlinks). Fourchettes : freelance 800-2000€/mois, petite agence 1500-3500€/mois, agence moyenne 2500-7000€/mois, senior 5000-15000€+/mois. Agences affichant « à partir de 500€ » = services ultra-minimalistes. Attention aux tarifs AUM bas (5-10% du CA additionnel) couplés à minimum engagement élevé : piège.

Quelle est la meilleure agence SEO en 2026 ?

N’existe pas en absolu. Meilleure agence = celle alignée avec votre budget, secteur et objectifs. Pour local : freelance spécialisé. Pour PME B2B : Junto, SEO Hackers, agences moyennes locales. Pour e-commerce : agences verticalisées (Digimood, autres). Pour SaaS : Junto, Keyweo. Évaluez sur critères objectifs (certification, références, contrat, transparence), pas nom.

Comment savoir si une agence SEO est arnaque ?

Red flags majeurs : promet top 1 garanti, refuse accès GSC/GA4, pas de contrat écrit, zéro références vérifiables, refuse audit initial, rapport incompréhensible, prix extrêmement bas couplé résultats énormes. Protégez-vous : NDA bilatéral, contrat avec KPI chiffrés, accès direct données, 3 références contactables avant signature.

Faut-il rester avec son agence SEO lors d’une migration ?

Migration agence = perte prévisible 20-30% trafic sur 2 mois (normal, trop courte pour nouvelle agence stabiliser). Si actuelle agence en crise/résultats nuls depuis 6+ mois : migrer justifié. Si agence produit mais vous voulez meilleure : négocier transition progressive (90j) avec overlap responsabilités. Agence refusant transition lisse : mauvais signe.

Combien de temps pour voir résultats SEO après changement d’agence ?

Réaliste : 2-4 semaines diagnostic livré, 4-12 semaines premiers classements détectables (50-200 mots-clés top 50), 4-6 mois résultats trafic/leads mesurables (+15-25%). Perte 20-30% trafic mois 1-2 (normal). Croissance reproductible 12+ mois. Agence promettant mieux : sceptique justifiée.

Quelle différence entre agence SEO généraliste et spécialisée ?

Généraliste : accepte tous secteurs, équipe flexible, coûte moins cher mais expertise superficielle (risque). Spécialisée : e-commerce, SaaS, local, B2B, coûte plus cher, expertise profonde, refuse clients hors spécialité. Meilleure agence = spécialisée dans VOTRE secteur. Si agence dit « on fait tout excellent » : arnaque probable.

📚 Sources & références

  1. Google Partner DirectoryGoogle
  2. Google Search Console – Trafic organique officielGoogle
  3. SEO – Wikipedia FRWikipedia
  4. Think with Google – Insights marketingGoogle
  5. Guide Agences Web – Journal du NetJournal du Net

/* Otomatic Widgets — vanilla JS, externe pour passer les filtres WP/CMS */
(function () {
‘use strict’;

function init() {
// Reading progress
var p = document.getElementById(‘otc-progress’);
if (p) {
function upd() {
var s = window.scrollY,
h = document.documentElement.scrollHeight – window.innerHeight;
p.style.width = (h ? (s / h) * 100 : 0) + ‘%’;
}
document.addEventListener(‘scroll’, upd, { passive: true });
upd();
}

// Quiz interactif
document.querySelectorAll(‘.otc-widget-quiz’).forEach(function (quiz) {
var qs = quiz.querySelectorAll(‘.otc-quiz-question’);
if (!qs.length) return;
var btn = quiz.querySelector(‘.otc-quiz-submit’);
var res = quiz.querySelector(‘.otc-quiz-result’);
if (btn && !btn.dataset.bound) {
btn.dataset.bound = ‘1’;
btn.addEventListener(‘click’, function () {
var score = 0,
total = qs.length;
qs.forEach(function (q) {
var sel = q.querySelector(‘input[type=radio]:checked’);
if (sel && sel.dataset.correct === ‘1’) score++;
});
var pct = Math.round((score / total) * 100);
var msg =
pct >= 80 ? ‘🏆 Excellent ! ‘ : pct >= 50 ? ‘👍 Pas mal ! ‘ : ‘📚 Continuez à apprendre ! ‘;
res.textContent = msg + ‘Score : ‘ + score + ‘/’ + total + ‘ (‘ + pct + ‘%)’;
res.classList.add(‘show’);
});
}
});

// Calculateur live
document.querySelectorAll(‘.otc-widget-calculator-inner’).forEach(function (calc) {
var inputs = calc.querySelectorAll(‘input[type=number]’);
var resEl = calc.querySelector(‘.otc-calc-result’);
var formula = calc.dataset.formula || ‘v.a + v.b’;
var unit = calc.dataset.unit || ”;
var label = calc.dataset.resultLabel || ‘Total : ‘;
if (!inputs.length || !resEl) return;
// Nettoie la formule : strip “var”/”let”/”const” déclarations + détecte si c’est une expression ou un body
var formulaClean = formula
.replace(/b(var|let|const)s+/g, ”) // strip déclarations
.replace(/bv.s*varb/g, ‘v.v’) // au cas où Claude écrit v.var
.trim();
var isBody = /[;]s*S/.test(formulaClean) || /breturnb/.test(formulaClean);
function compute() {
var values = {};
inputs.forEach(function (i) {
values[i.name] = parseFloat(i.value) || 0;
});
try {
var fn;
if (isBody) {
// Body : ajoute return si absent
var body = /breturnb/.test(formulaClean) ? formulaClean : (formulaClean + ‘; return v.result || 0;’);
fn = new Function(‘v’, body);
} else {
fn = new Function(‘v’, ‘return (‘ + formulaClean + ‘)’);
}
var r = fn(values);
var out =
typeof r === ‘number’
? Math.round(r * 100) / 100
: r;
resEl.textContent = label + out + unit;
} catch (e) {
resEl.textContent = ‘Erreur de calcul : ‘ + e.message;
}
}
inputs.forEach(function (i) {
if (!i.dataset.bound) {
i.dataset.bound = ‘1’;
i.addEventListener(‘input’, compute);
}
});
compute();
});

// Sondage avec localStorage
document.querySelectorAll(‘.otc-widget-poll [data-poll-id]’).forEach(function (poll) {
var pollId = poll.dataset.pollId;
var key = ‘otc_poll_’ + pollId;
var stored = JSON.parse(localStorage.getItem(key) || ‘{“votes”:{},”voted”:false}’);
var options = poll.querySelectorAll(‘.otc-poll-option’);

function render() {
var totalVotes = Object.values(stored.votes).reduce(function (a, b) {
return a + b;
}, 0);
if (totalVotes === 0) totalVotes = 1;
options.forEach(function (o) {
var k = o.dataset.optionKey;
var v = stored.votes[k] || 0;
var pct = Math.round((v / totalVotes) * 100);
var bar = o.querySelector(‘.pct-bar’);
var pctEl = o.querySelector(‘.pct’);
if (bar) bar.style.width = pct + ‘%’;
if (pctEl && stored.voted) pctEl.textContent = pct + ‘%’;
});
if (stored.voted) poll.classList.add(‘otc-poll-voted’);
}

options.forEach(function (o) {
if (o.dataset.bound) return;
o.dataset.bound = ‘1’;
o.addEventListener(‘click’, function () {
if (stored.voted) return;
var k = o.dataset.optionKey;
stored.votes[k] = (stored.votes[k] || 0) + 1;
stored.voted = true;
localStorage.setItem(key, JSON.stringify(stored));
render();
});
});
render();
});

// Floating TOC scroll spy + collapse toggle
var toc = document.querySelector(‘.otc-floating-toc’);
if (toc) {
var toggle = toc.querySelector(‘.otc-toc-toggle’);
var headings = document.querySelectorAll(‘.otc-article h2[id]’);
var links = toc.querySelectorAll(‘a[href^=”#”]’);
// Collapse au clic
if (toggle && !toggle.dataset.bound) {
toggle.dataset.bound = ‘1’;
toggle.addEventListener(‘click’, function () {
var collapsed = toc.dataset.collapsed === ‘true’;
toc.dataset.collapsed = collapsed ? ‘false’ : ‘true’;
toggle.setAttribute(‘aria-expanded’, collapsed ? ‘true’ : ‘false’);
});
}
// Auto-collapse au scroll vers le bas (mobile)
function spy() {
var sy = window.scrollY + 120;
var current = null;
headings.forEach(function (h) {
if (h.offsetTop = 13 && savedFs <= 22) {
var body = document.querySelector('.otc-article');
if (body) body.style.fontSize = savedFs + 'px';
}
} catch (e) {}

if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
// Re-init si contenu ajouté dynamiquement (idempotent grâce aux dataset.bound)
setTimeout(init, 1500);
})();

📋 Checklist SEO gratuite — 50 points à vérifier

Téléchargez ma checklist SEO complète : technique, contenu, netlinking. Le même outil que j'utilise pour mes clients.

Télécharger la checklist

Besoin de visibilité pour votre activité ?

Je suis Kevin Grillot, consultant SEO freelance certifié. J'accompagne les TPE et PME en référencement naturel, Google Ads, Meta Ads et création de site internet.

Kevin Grillot

Écrit par

Kevin Grillot

Consultant Webmarketing & Expert SEO.

Voir tous les articles →
Ressource gratuite

Checklist SEO Local gratuite — 15 points à vérifier

Téléchargez notre checklist et vérifiez si votre site est optimisé pour Google.

  • 15 points essentiels pour le SEO local
  • Format actionnable et imprimable
  • Utilisé par +200 entrepreneurs

Vos données restent confidentielles. Aucun spam.