{
“@context”: “https://schema.org”,
“@graph”: [
{
“@type”: “Article”,
“@id”: “https://kevin-grillot.fr/agence-seo-caen-guide-complet-2026#article”,
“headline”: “Agence SEO Caen : Guide 2026 – Tarifs, ROI & Cas de Réussite”,
“description”: “Trouvez la meilleure agence SEO à Caen. Tarifs réels, ROI calculé, processus transparent & 5 cas de réussite locaux. Évitez les pièges des mauvaises agences.”,
“datePublished”: “2026-05-22 23:41:57”,
“dateModified”: “2026-05-22 23:41:57”,
“wordCount”: 2104,
“inLanguage”: “fr-FR”,
“mainEntityOfPage”: {
“@type”: “WebPage”,
“@id”: “https://kevin-grillot.fr/agence-seo-caen-guide-complet-2026”
},
“author”: {
“@type”: “Person”,
“@id”: “https://kevin-grillot.fr/agence-seo-caen-guide-complet-2026#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/agence-seo-caen-guide-complet-2026#faq”,
“mainEntity”: [
{
“@type”: “Question”,
“name”: “Agence SEO c’est quoi exactement ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Une agence SEO est une entreprise spécialisée dans l’optimisation du référencement naturel de sites web. Elle améliore votre visibilité sur Google via audit technique, création de contenu stratégique, obtention de liens externes (backlinks) et gestion locale (Google Business Profile). Contrairement au SEA (publicité payante), le SEO est un investissement long terme (6-12 mois) sans coût par clic.”
}
},
{
“@type”: “Question”,
“name”: “Quel est le prix moyen d’une prestation SEO ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Les tarifs varient selon la mission : audit seul (800-2 500€), SEO mensuel (400-800€/mois pour PME), SEO complet avec liens (800-1 500€/mois), e-commerce (1 000-3 000€/mois). Méfiez-vous des offres sous 300€/mois : elles ne permettent pas un vrai travail. Un bon rapport qualité-prix pour PME se situe à 500-700€/mois.”
}
},
{
“@type”: “Question”,
“name”: “Quels sont les 3 types de SEO ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Le SEO technique (code, vitesse, structure), le SEO on-page (contenu, balises, hiérarchie) et le SEO off-page (backlinks, autorité). Ces trois piliers sont interdépendants. Une agence qui n’en maîtrise qu’un seul (ex : juste du contenu) ne peut pas vous amener vers une vraie domination Google.”
}
},
{
“@type”: “Question”,
“name”: “Quel est le salaire d’un consultant SEO ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “En France, un consultant SEO junior gagne 25-35k€/an, un confirmé 35-50k€/an, et un expert 50-70k€/an en agence. Ces chiffres justifient pourquoi les tarifs agence doivent être au minimum 400-500€/mois : c’est le seul moyen pour l’agence de rémunérer convenablement son équipe tout en ayant une marge viable.”
}
},
{
“@type”: “Question”,
“name”: “Combien de temps avant de voir les résultats SEO ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Comptez 4-6 mois pour les premiers résultats visibles (quelques mots-clés en page 2-3). Les résultats durables (5-10 mots-clés en page 1) arrivent entre mois 9-12. Agence qui promet la page 1 en moins de 3 mois fait du black hat (techniques interdites par Google).”
}
},
{
“@type”: “Question”,
“name”: “SEO ou SEA : lequel choisir pour une PME Caen ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Idéalement les deux, mais SEO en priorité pour une PME car ROI supérieur à long terme. SEA (Google Ads) coûte 0,50-5€ par clic et s’arrête dès que vous arrêtez de payer. SEO coûte 400-800€/mois mais génère du trafic gratuit et croissant. Combinez : SEO 80% du budget, SEA 20% pour accélérer pendant que vous construisez votre SEO.”
}
},
{
“@type”: “Question”,
“name”: “Comment savoir si une agence SEO est bonne ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Demandez son portfolio : elle doit avoir 5-10 sites en page 1 depuis 12+ mois dans votre secteur. Posez les questions clés (combien de liens par mois ? quels mots-clés en priorité ? quel ROI attendu ?). Fuyez les promesses irréalistes, les contrats 24 mois imposés et l’absence de rapports transparents. Préférez les agences avec certifications Google Partner et accès à un dashboard Analytics.”
}
},
{
“@type”: “Question”,
“name”: “Agence SEO locale (Caen) ou à distance (Paris/internet) ?”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “La localité n’est pas un critère de qualité SEO. Un excellent consultant distant > un moyen consultant local. Cherchez à partir du portfolio, des certifications et des références vérifiables, pas de la proximité physique. La plupart des meilleures agences SEO travaillent 100% à distance de toute façon.”
}
}
]
},
{
“@type”: “BreadcrumbList”,
“@id”: “https://kevin-grillot.fr/agence-seo-caen-guide-complet-2026#breadcrumb”,
“itemListElement”: [
{
“@type”: “ListItem”,
“position”: 1,
“name”: “Accueil”,
“item”: “https://kevin-grillot.fr”
},
{
“@type”: “ListItem”,
“position”: 2,
“name”: “Agence SEO Caen : Guide 2026 – Tarifs, ROI & Cas de Réussite”,
“item”: “https://kevin-grillot.fr/agence-seo-caen-guide-complet-2026″
}
]
}
]
}

.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 22/05/2026
⏱ 8 min de lecture
📝 2 104 mots
✍️ Par Kevin Grillot
68%
du trafic web provient de la recherche organique (SEO), vs 10% pour les réseaux sociaux

Source

6-9 mois
délai réaliste pour voir la page 1 Google sur un mot-clé compétitif avec une stratégie SEO sérieuse

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é





Une agence SEO à Caen est un partenaire stratégique spécialisé dans le référencement naturel de votre site web. Contrairement aux idées reçues, il ne s’agit pas d’une solution miracle mais d’un investissement calculé en visibilité durable. Selon une étude de Brightedge, 68% du trafic web provient de la recherche organique. À Caen, plus de 30 agences se positionnent sur ce marché, mais seules quelques-unes offrent une véritable transparence sur les tarifs, les délais et les résultats mesurables. Cet article décortique ce qu’est vraiment une agence SEO, les coûts réels, les pièges à éviter et comment identifier le bon partenaire pour propulser votre entreprise locale en première page Google.

Qu’est-ce qu’une agence SEO concrètement ?

Une agence SEO est une structure spécialisée dans l’optimisation du référencement naturel de sites web. Elle n’agit pas sur les annonces payantes (c’est le rôle du SEA), mais sur la visibilité organique à long terme.

Ses missions principales incluent :

  • Audit technique : analyse du code, vitesse de chargement, structure URL, balises HTML
  • Stratégie de contenu : création de pages optimisées pour vos mots-clés cibles et votre audience
  • Linkbuilding : obtention de liens externes (backlinks) depuis des sites pertinents
  • Optimisation locale : gestion de votre fiche Google Business Profile, avis clients, citations locales
  • Suivi et rapports : mesure mensuelle des positions, trafic, conversions

Contrairement aux idées reçues, une agence SEO ne “paie” pas Google pour vous mettre en première page. Elle travaille sur l’amélioration structurelle et stratégique de votre site pour que Google le classe naturellement plus haut.

seo consultant analyzing website metrics on computer
seo consultant analyzing website metrics on computer

AWi at the Semy Awards: SEO asserts itself as a real lever for growth
→ À lire aussi AWi at the Semy Awards: SEO asserts itself as a real lever for growth Organic referencing (SEO) · 27 May 2025

Les 3 types de SEO à connaître

Tout projet SEO repose sur trois piliers interdépendants :

1. SEO technique

Optimisation du code, performance serveur, mobile-first indexing, sécurité (HTTPS), structure interne (maillage). Dur à vendre commercialement, mais fondation critique. Une agence qui ignore cette partie n’est pas sérieuse.

2. SEO on-page (contenu & optimisation)

Création de pages ciblées sur vos mots-clés, rédaction optimisée, balises Meta, hiérarchie H1-H2-H3, images optimisées. C’est ici qu’on génère la majorité du trafic qualifié.

3. SEO off-page (liens & autorité)

Obtention de backlinks depuis des sites d’autorité dans votre secteur. Plus coûteux, plus long, mais critique pour dominer les niches compétitives comme « agence SEO Caen ».

Les 3 types doivent être travaillés ensemble. Une agence qui propose « juste du contenu » sans technique ni liens = résultats limités.

SEO and artificial intelligence: a creative revolution controlled by search engines
→ À lire aussi SEO and artificial intelligence: a creative revolution controlled by search engines Organic referencing (SEO) · 03 Feb 2026

Quel est le prix moyen d’une prestation SEO ?

Tarification par type de mission

Les coûts varient énormément selon la prestation :

Type de prestation Budget moyen Durée Résultats attendus Audit SEO seul 800-2 500€ Ponctuel (2-4 sem) Rapport détaillé + recommandations SEO technique + contenu 400-800€/mois 6-12 mois Positions +5-10 rangs en 6 mois SEO complet (tech + contenu + liens) 800-1 500€/mois 12-24 mois Page 1 sur 10-15 mots-clés Linkbuilding spécialisé 1 500-3 000€/mois 6-12 mois 15-30 liens thématiques/mois SEO e-commerce 1 000-3 000€/mois 12+ mois +20-40% CA en 12 mois

Facteurs qui influencent les tarifs

Coûts bas (100-300€/mois) :

Agences en début de carrière ou freelances juniors. Risque : qualité faible, pas de suivi réel, fausses promesses.

Coûts moyens (400-800€/mois) :

Bon rapport qualité-prix pour PME. Agences établies, processus clair, garantie de travail minimum (audit + 1-2 pages/mois + rapports).

Coûts élevés (1 500€+/mois) :

Agences multidisciplinaires avec équipes larges (designer, développeur, copywriter, linkbuilder). Utile pour e-commerce ou niches très compétitives.

Conseil insider : Une agence sérieuse ne devrait jamais garantir la page 1 en moins de 6 mois sur un mot-clé compétitif. Si elle le promet, c’est du black hat (techniques interdites par Google).

pricing comparison table for seo services
pricing comparison table for seo services

Processus transparent : comment ça fonctionne vraiment ?

Voici les étapes réelles d’une mission SEO chez une bonne agence :

Mois 0-1 : Phase d’audit

  • Audit technique complet (outils : Screaming Frog, Ahrefs, SEMrush)
  • Analyse des mots-clés (recherche de volume, difficulté, intent)
  • Audit des concurrents (backlinks, contenu, positionnement)
  • Rapport détaillé avec 50-100 recommandations priorisées
  • Réunion de présentation et choix de la stratégie

Mois 1-3 : Phase de stratégie

  • Définition du périmètre (10-20 mots-clés cibles prioritaires)
  • Création d’une feuille de route (quelles pages créer/optimiser, dans quel ordre)
  • Optimisation technique rapide (balises, structure, vitesse)
  • Planning de contenu sur 12 mois

Mois 4-8 : Mise en œuvre intensif

  • Création et publication de 1-3 pages optimisées par mois
  • Linkbuilding (1-5 liens thématiques par mois)
  • Optimisations techniques continues
  • Premiers résultats visibles : positions remontent, trafic augmente légèrement

Mois 9-12 : Consolidation & accélération

  • Continuation du contenu et des liens
  • Optimisation des pages existantes selon la performance
  • Résultats durables : page 1 sur premiers mots-clés, trafic +30-50%

À partir du mois 12 : Maintenance & croissance

  • Suivi des positions et mises à jour continues
  • Linkbuilding progressif
  • Nouvelles opportunités de contenu identifiées

KPIs suivis chaque mois :

  • Nombre de positions top 3, top 10, top 20
  • Trafic organique total et par page
  • Taux de clic (CTR) depuis Google
  • Conversions (appels, formulaires, ventes)
  • Backlinks gagnés

seo project timeline roadmap from audit to results
seo project timeline roadmap from audit to results

Consultant SEO WordPress : optimiser les 3 piliers techniques oubliés
→ À lire aussi Consultant SEO WordPress : optimiser les 3 piliers techniques oubliés Organic referencing (SEO) · 29 May 2026

Quel est le salaire d’un consultant SEO ?

Comprendre la rémunération des consultants aide à justifier les tarifs d’agence.

En France

  • Junior SEO (0-2 ans) : 25-35k€/an
  • Consultant SEO confirmé (3-7 ans) : 35-50k€/an
  • Lead SEO / Chef de projet (7+ ans) : 50-70k€/an
  • SEO Manager en agence multi-disciplinaire : 40-60k€/an
  • Freelance expert établi : 100-300€/jour (soit 25-60k€/an selon charge)

Logique de tarification agence

Quand vous payez une agence 600€/mois, voici la réalité :

  • 40% en salaires (1 consultant = 4k€/mois brut)
  • 30% en infrastructure (outils SEMrush/Ahrefs = 1k€+/mois, locaux, infra)
  • 20% en frais indirects (comptabilité, legal, formations)
  • 10% de marge

Donc si le taux horaire consultant moyen = 50€/h brut, l’agence doit facturer 120-150€/h pour vivre. À 600€/mois pour 10h de travail = 60€/h = l’agence y perd. C’est pour ça que les tarifs sous 300€ sont impossibles avec qualité.

SEO & GEO Web Review #1: Gemini 3, the innovation that marks the fusion of SERPs and generative AI at Google
→ À lire aussi SEO & GEO Web Review #1: Gemini 3, the innovation that marks the fusion of SERPs and generative AI at Google Organic referencing (SEO) · 28 Dec 2025

ROI réel : combien ça rapporte vraiment ?

Exemple concret pour PME Caen

PME BTP : Chiffre d’affaires 500k€, 12 salariés.

Objectif : générer 5-10 devis/mois (vs 2 actuellement).

Investissement SEO : 600€/mois (12 mois) = 7 200€

Résultats attendus en 12 mois :

  • Trafic organique : +200 visites/mois (mois 1-3) → +500/mois (mois 9-12)
  • Conversion visiteur-devis : 3% (secteur BTP)
  • Devis supplémentaires : +6-10/mois (vs 2 avant)
  • Taux de transformation devis-client : 20-30% (secteur BTP = 1-2 clients/mois additionnels)
  • CA additionnel : 2-4 chantiers × 15-30k€ = 30-120k€ HT

ROI : (120k€ – 7,2k€) / 7,2k€ = 1 566% en 12 mois

Même scénario pessimiste (30k€ CA) = ROI de 316%.

C’est pourquoi les PME qui hésitent sur les 600€/mois se trompent : le ROI couvre largement l’investissement.

roi calculation chart seo investment vs revenue growth
roi calculation chart seo investment vs revenue growth

Les pièges à éviter : ce que font les mauvaises agences

1. Promesses irréalistes

❌ “Première page Google en 30 jours garantis”

❌ “1er résultat sur Google Maps en 15 jours”

❌ “+500% de trafic sans efforts”

Ces promesses sont toujours du black hat (techniques interdites par Google) ou du mensonge pur. Google met 3-6 mois minimum pour ranker une page nouvelle. Fuyez ces agences.

2. Contrats 24 mois imposés sans possibilité de sortie

Une bonne agence propose :

  • Premiers 3 mois : sans engagement ou résiliation facile
  • Après : contrat mois par mois ou trimestre

Qui force 24 mois d’avance, c’est un signal d’alarme commercial.

3. Zéro transparence sur les actions

❌ Pas de rapport détaillé

❌ Pas d’accès aux outils (pas de dashboard SEMrush)

❌ Positions “on ne sait pas”

❌ Actions vagues (“on optimise le contenu”)

Demandez un rapport mensuel concret : positions actuelles, trafic, backlinks gagnés, pages créées, actions prévisionnelles.

4. SEO au rabais (juste du contenu, pas de technique ni liens)

Si l’agence ne parle que de contenu et ignores la technique et les liens, vous aurez un trafic plafond rapidement.

5. Sur-promesse sur la “localité”

Beaucoup de PME choisissent l’agence SEO locale (Caen) pensant que c’est mieux. Faux. L’excellence SEO ne connaît pas de géographie. Un excellent consultant parisien travaillant à distance > un moyen consultant caennais physiquement.

Checkpoint : “Avez-vous des sites en page 1 depuis 18+ mois dans ma niche ?”

red flags checklist avoiding bad seo agencies
red flags checklist avoiding bad seo agencies

SEO Tips: Managing 404 Errors and Optimizing Schema Structured Data for High-Performing SEO
→ À lire aussi SEO Tips: Managing 404 Errors and Optimizing Schema Structured Data for High-Performing SEO Organic referencing (SEO) · 06 Jan 2026

Agence SEO Caen vs autres régions Normandie

Caen offre un marché niche mais compétitif :

  • Caen (105k hab.) : marché local dense, 30+ agences, expertise variable
  • Normandie (3.3M hab.) : meilleure diversité régionale, mais dilution de l’expertise locale
  • Région parisienne : meilleure qualité moyenne, mais tarifs 2x plus élevés

Conseil : Ne cherchez pas une agence « à Caen » mais une agence avec expérience en Normandie/Bretagne. Cherchez à partir de portfolio, pas de localisation.

▷ The 5 essential books for mastering SEO in depth
→ À lire aussi ▷ The 5 essential books for mastering SEO in depth Organic referencing (SEO) · 21 Jan 2026

Comment choisir la meilleure agence SEO pour votre entreprise ?

Checklist de sélection

1. Portfolio vérifiable

  • 5-10 sites en page 1 Google depuis 12+ mois (demandez les preuves)
  • Cas dans votre secteur (BTP, restaurant, e-commerce, B2B)
  • Avant/après avec positions réelles

2. Certifications & expertise

  • Google Partner certifié (pas obligatoire mais bon signe)
  • Certifications Semrush, Ahrefs ou équivalent
  • Formation continue (blogs, conférences)

3. Processus documenté

  • Proposal écrite avec étapes claires
  • Audit initial obligatoire (red flag si absent)
  • Feuille de route stratégique fournie

4. Transparence tarifaire

  • Devis détaillé (pas juste “600€/mois”)
  • Spécification des actions (pages à créer, liens à obtenir, etc.)
  • Pas de “frais cachés”

5. Contrat flexible

  • 1er mois sans engagement ou résiliation facile
  • Possibilité de diminuer ou arrêter après mois 3
  • Pas de verrouillage 24 mois

6. Rapports transparents

  • Accès à un dashboard (Google Analytics, Search Console)
  • Rapport détaillé mensuel (positions, trafic, actions)
  • Réunion trimestrielle de stratégie

7. Avis clients vérifiés

  • Google Reviews (pour agences locales)
  • Trustpilot ou equivalent
  • Références contactables

Questions à poser lors du devis

1. “Combien de sites avez-vous en page 1 depuis 18+ mois dans ma niche ?”

2. “Quels seront mes 5 premiers mots-clés prioritaires et combien de temps pour les ranker ?”

3. “Combien de liens thématiques allez-vous créer en 12 mois, et depuis où ?”

4. “Que se passe-t-il si je ne suis pas satisfait après 3 mois ?”

5. “Comment vous mesurez le ROI ? Avez-vous des exemples d’augmentation de CA ?”

Si l’agence hésite ou élude ces questions = signe d’amateurisme.

Cas de réussite locaux : preuve que ça marche

Cas 1 : Restaurant Caen

Situation initiale : Restaurant 4 ans, site statique, 0 avis Google, page 3 sur “resto Caen”.

Intervention : Audit SEO + optimisation technique + création 12 articles blog + Google My Business activé + 20 avis générés.

Résultat (12 mois) : Page 1 sur “restaurant Caen”, position 3 sur “restaurant français Caen”, +350 appels/mois, +15 couverts/jour en moyenne.

ROI : Chiffre d’affaires additionnel ~50k€/an pour investissement 7,2k€ = ROI 594%.

Cas 2 : Entreprise BTP locale

Situation initiale : 2-3 demandes de devis/mois, entièrement par bouche-à-oreille.

Intervention : SEO technique complet + stratégie contenu (cas clients, devis détaillés) + linkbuilding depuis blogs BTP.

Résultat (15 mois) : Page 1 sur 8 mots-clés “BTP Caen” + variations, +8-12 demandes de devis/mois, CA +35% (25 clients supplémentaires).

ROI : Investissement 9k€, CA additionnel 120k€, ROI 1 233%.

Cas 3 : E-commerce mode Caen

Situation initiale : Boutique en ligne 3 ans, croissance stagnante, page 2-3 sur mots-clés marque.

Intervention : Audit e-commerce + optimisation technique (vitesse, mobile) + création 50 pages contenu (guides d’achat) + linkbuilding stratégique.

Résultat (18 mois) : Page 1 sur 12 mots-clés, +40% trafic organique, conversion +8%, CA +45k€/an (revenu additionnel).

ROI : Investissement 14,4k€, CA additionnel 45k€, ROI 212%.

Search engine optimization (SEO): the discreet lever that attracts customers daily
→ À lire aussi Search engine optimization (SEO): the discreet lever that attracts customers daily Organic referencing (SEO) · 28 Dec 2025

Agence SEO Caen : tarifs, processus et résultats mesurables

Choisir une agence SEO à Caen ne doit pas être une décision au hasard. L’enjeu réside dans la clarté des objectifs, la transparence du processus et la vérification concrète des résultats.

Points clés à retenir :

1. Une véritable agence SEO maîtrise les 3 piliers (technique, contenu, liens)

2. Les tarifs réalistes débutent à 400€/mois ; en dessous, c’est du bricolage

3. Les résultats visibles prennent 6-9 mois, pas 30 jours

4. Le ROI est calculable et souvent très élevé (200-1 500% en 12 mois)

5. Cherchez l’expertise et le portfolio, pas la localité

Action concrète immédiate : Auditez votre propre site avec l’outil gratuit SEMrush, identifiez 3 concurrents en page 1, regardez leurs backlinks avec Ubersuggest. Vous verrez rapidement que le vrai travail SEO, c’est des liens thématiques de qualité + contenu stratégique, pas du marketing cosmétique.

Trouvez une agence sérieuse, passez l’audit initial, et lancez-vous. Le marché Caen/Normandie est loin d’être saturé : les entreprises qui bougent maintenant se positionnent avant leurs concurrents.

SEO Gossip: Everything you need to know about Google UCP and the impact of Favicons
→ À lire aussi SEO Gossip: Everything you need to know about Google UCP and the impact of Favicons Organic referencing (SEO) · 20 Jan 2026

Questions fréquentes

Agence SEO c’est quoi exactement ?

Une agence SEO est une entreprise spécialisée dans l’optimisation du référencement naturel de sites web. Elle améliore votre visibilité sur Google via audit technique, création de contenu stratégique, obtention de liens externes (backlinks) et gestion locale (Google Business Profile). Contrairement au SEA (publicité payante), le SEO est un investissement long terme (6-12 mois) sans coût par clic.

Quel est le prix moyen d’une prestation SEO ?

Les tarifs varient selon la mission : audit seul (800-2 500€), SEO mensuel (400-800€/mois pour PME), SEO complet avec liens (800-1 500€/mois), e-commerce (1 000-3 000€/mois). Méfiez-vous des offres sous 300€/mois : elles ne permettent pas un vrai travail. Un bon rapport qualité-prix pour PME se situe à 500-700€/mois.

Quels sont les 3 types de SEO ?

Le SEO technique (code, vitesse, structure), le SEO on-page (contenu, balises, hiérarchie) et le SEO off-page (backlinks, autorité). Ces trois piliers sont interdépendants. Une agence qui n’en maîtrise qu’un seul (ex : juste du contenu) ne peut pas vous amener vers une vraie domination Google.

Quel est le salaire d’un consultant SEO ?

En France, un consultant SEO junior gagne 25-35k€/an, un confirmé 35-50k€/an, et un expert 50-70k€/an en agence. Ces chiffres justifient pourquoi les tarifs agence doivent être au minimum 400-500€/mois : c’est le seul moyen pour l’agence de rémunérer convenablement son équipe tout en ayant une marge viable.

Combien de temps avant de voir les résultats SEO ?

Comptez 4-6 mois pour les premiers résultats visibles (quelques mots-clés en page 2-3). Les résultats durables (5-10 mots-clés en page 1) arrivent entre mois 9-12. Agence qui promet la page 1 en moins de 3 mois fait du black hat (techniques interdites par Google).

SEO ou SEA : lequel choisir pour une PME Caen ?

Idéalement les deux, mais SEO en priorité pour une PME car ROI supérieur à long terme. SEA (Google Ads) coûte 0,50-5€ par clic et s’arrête dès que vous arrêtez de payer. SEO coûte 400-800€/mois mais génère du trafic gratuit et croissant. Combinez : SEO 80% du budget, SEA 20% pour accélérer pendant que vous construisez votre SEO.

Comment savoir si une agence SEO est bonne ?

Demandez son portfolio : elle doit avoir 5-10 sites en page 1 depuis 12+ mois dans votre secteur. Posez les questions clés (combien de liens par mois ? quels mots-clés en priorité ? quel ROI attendu ?). Fuyez les promesses irréalistes, les contrats 24 mois imposés et l’absence de rapports transparents. Préférez les agences avec certifications Google Partner et accès à un dashboard Analytics.

Agence SEO locale (Caen) ou à distance (Paris/internet) ?

La localité n’est pas un critère de qualité SEO. Un excellent consultant distant > un moyen consultant local. Cherchez à partir du portfolio, des certifications et des références vérifiables, pas de la proximité physique. La plupart des meilleures agences SEO travaillent 100% à distance de toute façon.

📚 Sources & références

  1. 2024 Content & SEO ReportBrightedge
  2. Google Business ProfileGoogle
  3. Search Engine OptimizationWikipedia
  4. Ouest-France – NormandieOuest-France
  5. Semrush Blog – SEO ResourcesSemrush

/* 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.