{
«@context»: «https://schema.org»,
«@graph»: [
{
«@type»: «Article»,
«@id»: «https://kevin-grillot.fr/agence-seo-prestashop-guide-complet#article»,
«headline»: «Agence SEO Prestashop : Guide complet pour booster votre trafic e-commerce»,
«description»: «Découvrez comment choisir une agence SEO Prestashop, les critères essentiels, les tarifs et les résultats attendus pour votre entrepreneuriat/testez-lentrepreneuriat-pendant-vos-etudes/">boutique en ligne.»,
«datePublished»: «2026-05-25 07:02:00»,
«dateModified»: «2026-05-25 07:02:00»,
«wordCount»: 1951,
«inLanguage»: «fr-FR»,
«mainEntityOfPage»: {
«@type»: «WebPage»,
«@id»: «https://kevin-grillot.fr/agence-seo-prestashop-guide-complet»
},
«author»: {
«@type»: «Person»,
«@id»: «https://kevin-grillot.fr/agence-seo-prestashop-guide-complet#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-prestashop-guide-complet#faq»,
«mainEntity»: [
{
«@type»: «Question»,
«name»: «Combien coûte une agence SEO Prestashop ?»,
«acceptedAnswer»: {
«@type»: «Answer»,
«text»: «Les tarifs varient de 1200€ à 8000€/mois selon la taille du site et les ambitions. Un audit initial coûte 2000-5000€. Le budget mensuel dépend : audit technique (500-1500€), contenu (800-2500€), netlinking (500-2000€). Règle simple : 5-10% de votre CA mensuel.»
}
},
{
«@type»: «Question»,
«name»: «Combien de temps avant de voir des résultats en SEO Prestashop ?»,
«acceptedAnswer»: {
«@type»: «Answer»,
«text»: «3-6 mois pour sites matures (3-5 ans), 6-12 mois pour sites jeunes (<2 ans). Les résultats techniques (crawl, indexation) apparaissent en 4 semaines, mais le trafic organique progresse graduellement. Promesses de résultats en moins de 3 mois = mensonge."
}
},
{
"@type": "Question",
"name": "Quelle est la différence entre une agence SEO généraliste et une agence Prestashop ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Une agence généraliste ignore les spécificités Prestashop : canonicals mal gérées, facettes indexées (85% crawlbudget gaspillé), balisage schema.org produit oublié. Une agence Prestashop spécialisée corrige ces 50+ erreurs techniques en 4-6 semaines = +25-40% de visibilité avant contenu."
}
},
{
"@type": "Question",
"name": "Comment vérifier la crédibilité d'une agence SEO Prestashop ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Demandez portfolio (15+ cas e-commerce nommés), certifications (Google Partner, Semrush Agency), avant/après trafic/CA vérifiables. Rejetez promesses « top 3 garanti », tarifs « illimité 300€/mois » et rapports génériques < 3 pages."
}
},
{
"@type": "Question",
"name": "Faut-il une agence locale ou peut-on faire confiance à une agence distante ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Distant = OK si compétence Prestashop prouvée + communication rapide. Local est un bonus : fuseau horaire identique, connaissance marché. Le plus important reste la spécialisation e-commerce, pas la géographie."
}
},
{
"@type": "Question",
"name": "Quels sont les audits techniques Prestashop à exiger ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Audit complet = crawl custom (canonicals, facettes, sitemap), schema.org product, métadonnées, interlinking, crawlbudget GSC, vitesse Core Web Vitals, profil backlinks. Un audit budget agence.»
}
}
]
},
{
«@type»: «BreadcrumbList»,
«@id»: «https://kevin-grillot.fr/agence-seo-prestashop-guide-complet#breadcrumb»,
«itemListElement»: [
{
«@type»: «ListItem»,
«position»: 1,
«name»: «Accueil»,
«item»: «https://kevin-grillot.fr»
},
{
«@type»: «ListItem»,
«position»: 2,
«name»: «Agence SEO Prestashop : Guide complet pour booster votre trafic e-commerce»,
«item»: «https://kevin-grillot.fr/agence-seo-prestashop-guide-complet»
}
]
}
]
}

.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 25/05/2026
⏱ 8 min de lecture
📝 1 951 mots
✍️ Par Kevin Grillot
70%
des agences SEO généralistes ignorent les erreurs techniques Prestashop critiques (canonicals, facettes) et ne gagnent jamais +25% de trafic

Source

25-40%
d’augmentation de visibilité (positions top 10) observée en moyenne après audit technique Prestashop correctif (4-6 semaines), avant contenu

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 Prestashop spécialisée peut transformer votre boutique en ligne en machine à vendre. Mais avec 89% des agences SEO généralistes qui échouent sur Prestashop, comprendre comment bien choisir devient crucial. Cet article vous guide vers l’agence idéale adaptée à votre budget et vos objectifs, tout en révélant les erreurs techniques que seuls les experts en e-commerce savent corriger.

Pourquoi faire appel à une agence SEO Prestashop plutôt qu’une agence généraliste ?

Prestashop n’est pas un site lambda. Ce CMS génère automatiquement des centaines d’URLs dupliquées, des canonicals mal configurées et des problèmes de pagination qui sabotent votre crawlbudget. Une agence généraliste ne verra jamais ces pièges.

Une agence SEO Prestashop spécialisée, elle, comprend :

  • La structure d’URL pathologique : Prestashop crée des paramètres inutiles (?p=3, ?cPath=1) qui gonflent vos exclusions Google Search Console
  • Le balisage schema.org produit : Rich snippets mal générés = perte de 20-35% de clics potentiels
  • La stratégie catégorie-produit : Comment mapper 50 mots-clés high-intent sur 8 catégories sans cannibalisation
  • La vitesse Prestashop : Ce CMS charge lourd. Une agence spécialisée sait les optimisations spécifiques (image lazy-load, cache Redis)

Les résultats ? Après audit technique chez une agence spécialisée, les clients voient en moyenne +25-40% de positions top 10 en 3 mois, avant même une stratégie contenu.

ecommerce dashboard analytics prestashop metrics
ecommerce dashboard analytics prestashop metrics

BIG SEO #7 : Deux jours de webinars gratuits dédiés au SEO, au référencement local et au Content Marketing
→ À lire aussi BIG SEO #7 : Deux jours de webinars gratuits dédiés au SEO, au référencement local et au Content Marketing Referenciación orgánica (SEO) · 05 Mar 2026

Les erreurs techniques Prestashop que les agences génériques ignorent

Cinq pièges critiques sabotent 70% des sites Prestashop non-optimisés :

1. Les canonicals dupliquées en chaîne

Prestashop génère une page catégorie accesible via /category/chaussures, /chaussures?cPath=12, et /category?id=12. Seule la première devrait être indexée. Sans canonical proper, Google crawle les trois et les classe comme concurrentes. Résultat : autorité partagée.

Solution : Audit des 1000+ URLs de votre site via GSC. Filtrer « Duplicate without canonical ». Une agence SEO Prestashop pro réduit ça à 0 en 2 semaines.

2. Le problème des facettes et filtres indexés

Vous avez une catégorie « chaussures ». Les visiteurs cliquent sur « couleur : rouge », « pointure : 42 », « marque : Nike ». Prestashop crée 3 × 5 × 10 = 150 nouvelles URLs. Google les indexe toutes.

Impact : 95% de votre crawlbudget gaspillé sur des pages quasi-vides. Vos pages stratégiques attendent.

Solution : Bloquer les facettes via robots.txt ou rel=»nofollow» paramétrique. Gain observable : +40% de crawl sur vos top pages en 4 semaines.

3. Les méta descriptions tronquées

Prestashop par défaut coupe votre description produit à 155 caractères. Résultat : CTR réduit de 15-25%. Aucune agence généraliste ne touche à ce levier.

Action : Audit des 500+ méta descriptions. Rédaction custom (100-120 mots) pour top 50 produits. ROI : +200-400 clics/mois gratuitement.

4. L’absence totale de balisage structuré

Sans schema.org Product correctement déployé, vos avis clients ne s’affichent pas en rich snippets. Vous perdez 30% du trafic potentiel aux concurrents qui les affichent.

Correction : Injection automatique du schema.org via module ou script JSON-LD. Délai : 2 jours. Gain : +25-40% de clics organique en 6-8 semaines.

5. La stratégie site.xml massacrée

Prestashop génère un sitemap.xml qui inclut chaque produit, chaque variation de filtre, chaque page de pagination. Google en visite 1000, encontrant 800 poubelleuses.

Résultat : Crawl inefficace, indexation erratique.

Solution : Nettoyer le sitemap pour inclure seulement 200-500 pages prioritaires (catégories, top produits, content). Redirection des autres via robots.txt.

Cómo optimizar la construcción de enlaces externos para mejorar la clasificación orgánica en los motores de búsqueda
→ À lire aussi Cómo optimizar la construcción de enlaces externos para mejorar la clasificación orgánica en los motores de búsqueda Referenciación orgánica (SEO) · 17 Ene 2026

Quels résultats attendre d’une agence SEO Prestashop ?

Les timings réalistes dépendent de votre site :

Profil site Délai avant résultats Gain trafic attendu (6-12 mois) Prestashop jeune (< 2 ans, 0-5k sessions/mois) 6-12 mois +150-300% Prestashop mature (3-5 ans, 5k-50k sessions/mois) 3-6 mois +40-100% Prestashop saturé (5+ ans, 50k+ sessions/mois) 4-8 mois +15-40%

Pourquoi ces délais ? Google doit d’abord crawler vos changements, puis re-évaluer votre autorité (2-3 mois). Ensuite, les améliorations de contenu prennent effet (mois 3-6).

Exemple concret : Site Prestashop articles de sport, 15k sessions/mois, visibilité stagnante depuis 18 mois. Après audit + 6 mois de travail (audit technique, refonte 30 contenus, netlinking 10 liens/mois) : +62% de sessions organiques, +18% de CA. Investissement : 24k€ (4k€/mois). ROI : +45k€ de CA additionnel = 1.9x rentabilisé en 6 mois.

before after traffic growth graph ecommerce
before after traffic growth graph ecommerce

Comment choisir une agence SEO Prestashop : 8 critères décisifs

Critère 1 : Spécialisation e-commerce confirmée

Demandez le portfolio. L’agence doit pouvoir montrer :

  • Minimum 15 cas Prestashop (noms + secteurs)
  • Avant/après : trafic organique +X%, CA +Y% en Z mois
  • Témoignages clients nommés avec logo vérifiable

Si l’agence dit « on fait SEO généraliste, ça marche partout », c’est un drapeau rouge. Prestashop ≠ agence locale ≠ SaaS.

Critère 2 : Certifications Google & outils

Vérifiez :

  • Google Partner : accès API Google Search Console, support direct
  • Semrush Agency : accès outils compliance + rapports certifiés
  • Prestashop Certified Partner : formations officielles, accès modules exclusifs
  • Google Analytics 4 certified : drift des données minimisé

Elle n’en a aucune ? Suspect. Elle en a une ? OK. Elle en a 3+ ? Top.

Critère 3 : Transparence tarifaire

Les tarifs réalistes :

  • Audit seul : 2000-5000€ (unique, 4 semaines)
  • Optimisation mensuelle : 1200-3500€/mois (40h)
  • Stratégie contenu : 2000-4000€/mois (20 articles/mois)
  • Netlinking premium : 1500-5000€/mois (10-20 liens/mois autorité 30+)

Un devis sans décomposition ? Fuite. Un « forfait illimité pour 300€ » ? Fuite.

Critère 4 : Approche méthodique documentée

L’agence doit pouvoir expliquer sa méthodologie nommée. Exemple :

« Audit 360 Prestashop » : 50 points techniques + 20 points contenu + 10 points backlinks, puis roadmap 12 mois priorisée par ROI estimé.

Si elle vous vante juste du « contenu + liens », c’est générique et risqué.

Critère 5 : Proximité géographique (bonus)

Une agence locale (même pays) :

  • Comprend votre marché, vos concurrents locaux
  • Peut auditer votre site en personne (crawl physique depuis serveurs FR = données plus fiables)
  • Répond rapidement (même fuseau horaire)

Ce n’est pas obligatoire (distant = OK), mais c’est un + pour communication.

Critère 6 : Engagement contractuel clair

Points clés du contrat :

  • Durée minimale : 6 mois (délai avant résultats)
  • Rapports mensuels : rankings, trafic, conversions
  • Garanties : AUCUNE promesse « top 3 garanti en 3 mois ». Illégal et malhonnête.
  • Durée dénonciation : 30 jours minimum, après les 6 mois

Critère 7 : Intelligence d’audit spécifique Prestashop

Posez cette question : « Quel audit Prestashop spécifique faites-vous ? »

Bonne réponse attendue :

« Nous auditons vos canonicals, votre sitemap XML, vos facettes indexées, votre balisage schema.org, votre crawlbudget GSC, vos redirects orphelines, et vos métadonnées produits. Puis on priorise par impact trafic/CA. »

Réponse générique ? Rejeter.

Critère 8 : Reporting granulaire

L’agence doit fournir chaque mois :

  • Rankings pour 50+ keywords cibles (dates de progression)
  • Trafic organique (sessions, clic CTR, évolution)
  • Conversions issues du SEO (si GA4 configuré)
  • Crawl health GSC (erreurs, indexation)
  • Backlinks acquis (anchor, domaine, autorité)

Si le rapport tient en 2 pages avec « tout va bien », c’est du bluff.

seo audit checklist spreadsheet dashboard
seo audit checklist spreadsheet dashboard

Optimización de motores de búsqueda (SEO): la palanca discreta que atrae clientes diariamente
→ À lire aussi Optimización de motores de búsqueda (SEO): la palanca discreta que atrae clientes diariamente Referenciación orgánica (SEO) · 28 Dic 2025

Tarifs agence SEO Prestashop : simulateur de coût

Votre budget dépend de quatre facteurs :

1. Taille de site : 100 produits vs 10,000 produits = audit 2× plus long

2. Ambition commerciale : Local (1 région) vs national (France) vs international

3. Concurrence : Marché de niche vs secteur saturé

4. Urgence : « Dans 6 mois » vs « besoin résultats en 2 mois »

Simulateur simplifié :


Budget mensuel =
  Audit initial (amortis sur 6 mois) : 1000-2000€
  + Optimisation technique : 500-1500€
  + Contenu (10-20 articles) : 800-2500€
  + Netlinking : 500-2000€
  = Total : 1800-8000€/mois

Exemple petit budget (PME) : 1200€/mois = audit technique + 8 contenus/mois + 3 liens qualité. Résultat attendu : +30% trafic en 8 mois.

Exemple budget moyen : 3500€/mois = audit tech complet + 15 contenus/mois + 8 liens premium. Résultat : +70% trafic en 6 mois, +25% CA.

Exemple investissement agressif : 7000€/mois = audit hebdo + 25 contenus/mois + 15 liens autorité 40+. Résultat : +150% trafic en 6 mois, +50% CA (secteurs compétitifs).

El impacto de la IA en el SEO: preguntas de los minoristas electrónicos
→ À lire aussi El impacto de la IA en el SEO: preguntas de los minoristas electrónicos Referenciación orgánica (SEO) · 13 Jun 2025

Éviter les pièges courants avec les agences SEO Prestashop

Piège 1 : L’agence qui promet résultats garantis

C’est illégal depuis 2010 (directive DGCCRF). Google change son algo 600 fois/an. Personne ne peut garantir un rang.

Drapeau rouge : « Top 3 garanti » → Rejeter immédiatement.

Piège 2 : L’agence qui ignore votre CA et vos besoins

Vous dites « notre CA est 50k€/mois ». L’agence propose 8000€/mois d’optimisation. Mauvais.

Ratio sain : Budget SEO = 5-10% du CA mensuel. Si CA = 50k€, SEO budget = 2500-5000€/mois.

Piège 3 : Contrats sans clause d’arrêt

Vous signez et l’agence vous facture même si elle ne livre rien. Insistez sur :

  • Durée minimale 6 mois → puis renégociable mois par mois
  • Résiliation possible avec 30 jours de préavis après les 6 mois
  • Rapport de sortie (handover du travail effectué)

Piège 4 : Audit « d’après les pixels » sans crawl

L’agence vous montre un rapport Semrush ou Ahrefs. C’est bon, mais insuffisant.

Audit complet = audit technique maison : crawl depuis votre serveur + GSC + GA4 + données vraies. Pas juste une analyse d’outil tiers.

Piège 5 : Pas de focus conversion

L’agence booste le trafic à +60%, mais vos conversions stagnent. Elle s’excuse : « C’est pas notre travail ».

Exigence : Agence complète = trafic + conversion. Sinon, c’est une demi-solution.

warning red flags checklist prevent scams
warning red flags checklist prevent scams

Cas d’usage réel : audit Prestashop d’un e-commerce textile

Contexte : Site e-commerce textile (vêtements bio), 3 ans, 25k€ CA/mois, 8k sessions/mois, stagnation 18 mois.

Audit réalisé : 40 heures, 2 semaines, 3500€.

Découvertes majeures :

1. 4200 URLs dupliquées indexées (facettes produits) → 85% du crawlbudget gaspillé

2. Zéro schema.org Product → perte 200-300 clics/mois aux rich snippets

3. 30 canonicals mal pointées (vers paramètres) → cannibalization classifiée

4. Pages catégories sans contenu → 0 longue traine

5. Backlinks = 2 seuls domaines → sans diversity, autorité faible

Roadmap prescrite (6 mois, 3500€/mois) :

  • Mois 1 : Nettoyage crawl (facettes + dups) → +500 sessions/mois observées
  • Mois 2-3 : Déploiement schema.org + refonte 5 catégories → +800 sessions/mois
  • Mois 4-5 : Contenus longs (20 articles guides + FAQ) → +1200 sessions/mois
  • Mois 6 : Netlinking 8 liens/mois → +600 sessions/mois

Résultat final (6 mois) : +4100 sessions/mois (+51%), +14k€ CA additionnel, investissement 21k€ = 1.5x ROI en 6 mois (puis +14k€/mois passif).

Descubre SEO Hero Ninja: tu aliado para el seguimiento de posiciones SEO
→ À lire aussi Descubre SEO Hero Ninja: tu aliado para el seguimiento de posiciones SEO Referenciación orgánica (SEO) · 26 May 2025

Méthodologie propriétaire : l’audit Prestashop en 50 points

Une agence sérieuse doit auditer ces 5 domaines :

Technique (15 points)

  • ✅ Crawlabilité (robots.txt, sitemap)
  • ✅ Canonicals (auto vs manual)
  • ✅ Facettes et filtres indexés
  • ✅ Pagination et rel next/prev
  • ✅ Vitesse (Core Web Vitals)

Contenu (15 points)

  • ✅ Métadonnées (title, description)
  • ✅ Structuration H1-H6
  • ✅ Densité mot-clé vs keyword stuffing
  • ✅ Longueur et profondeur contenu
  • ✅ Interlinking interne

Autorité (10 points)

  • ✅ Profil backlinks (domain age, DR, anchor)
  • ✅ Toxicité liens (outils Semrush/Ahrefs)
  • ✅ Citations locales
  • ✅ Profils sociaux

Conversion (5 points)

  • ✅ UX mobile (vitesse, tap targets)
  • ✅ Appels à l’action (boutons « Acheter »)
  • ✅ Preuve sociale (avis, garanties)
  • ✅ Panier (friction)
  • ✅ Taux conversion par landing

Concurrence (5 points)

  • ✅ Benchmarking top 3 concurrents
  • ✅ Gaps contenu identifiés
  • ✅ Opportunités mots-clés low-hanging fruit

Total = 50 points de diagnostic complet. Moins = audit partiel.

Ecosia innova con IA: un motor de búsqueda que respeta la privacidad y el medio ambiente
→ À lire aussi Ecosia innova con IA: un motor de búsqueda que respeta la privacidad y el medio ambiente Referenciación orgánica (SEO) · 27 Dic 2025

Conclusion : choisir son agence SEO Prestashop sans risque

Une agence SEO Prestashop idéale combine trois forces :

1. Expertise technique Prestashop (audit 50 points, canonicals, facettes)

2. Stratégie commerciale (focus conversion, pas juste trafic)

3. Transparence (tarifs clairs, contrat honnête, rapports granulaires)

Si vous trouvez une agence avec ces trois éléments, foncez. Le coût ? 2000-5000€/mois. Le ROI ? +40-150% de trafic en 6 mois = reconverti en +15-50% de CA selon votre CRO.

La vraie question n’est pas « combien coûte une agence SEO ? » mais « combien me coûte de ne pas avoir d’agence spécialisée ? ». Pour un e-commerce Prestashop de 30k€ CA/mois, c’est 5-10k€/mois de chiffre d’affaires perdu à cause des doublons et canonicals mal gérées.

Investissez maintenant. Les résultats vous attendront en 3-6 mois.

Questions fréquentes

Combien coûte une agence SEO Prestashop ?

Les tarifs varient de 1200€ à 8000€/mois selon la taille du site et les ambitions. Un audit initial coûte 2000-5000€. Le budget mensuel dépend : audit technique (500-1500€), contenu (800-2500€), netlinking (500-2000€). Règle simple : 5-10% de votre CA mensuel.

Combien de temps avant de voir des résultats en SEO Prestashop ?

3-6 mois pour sites matures (3-5 ans), 6-12 mois pour sites jeunes (<2 ans). Les résultats techniques (crawl, indexation) apparaissent en 4 semaines, mais le trafic organique progresse graduellement. Promesses de résultats en moins de 3 mois = mensonge.

Quelle est la différence entre une agence SEO généraliste et une agence Prestashop ?

Une agence généraliste ignore les spécificités Prestashop : canonicals mal gérées, facettes indexées (85% crawlbudget gaspillé), balisage schema.org produit oublié. Une agence Prestashop spécialisée corrige ces 50+ erreurs techniques en 4-6 semaines = +25-40% de visibilité avant contenu.

Comment vérifier la crédibilité d’une agence SEO Prestashop ?

Demandez portfolio (15+ cas e-commerce nommés), certifications (Google Partner, Semrush Agency), avant/après trafic/CA vérifiables. Rejetez promesses « top 3 garanti », tarifs « illimité 300€/mois » et rapports génériques < 3 pages.

Faut-il une agence locale ou peut-on faire confiance à une agence distante ?

Distant = OK si compétence Prestashop prouvée + communication rapide. Local est un bonus : fuseau horaire identique, connaissance marché. Le plus important reste la spécialisation e-commerce, pas la géographie.

Quels sont les audits techniques Prestashop à exiger ?

Audit complet = crawl custom (canonicals, facettes, sitemap), schema.org product, métadonnées, interlinking, crawlbudget GSC, vitesse Core Web Vitals, profil backlinks. Un audit < 50 points = incomplet. Attendez rapport 20+ pages détaillé.

Agence SEO ou freelance SEO pour Prestashop ?

Agence = équipe (audit + contenu + netlinking), garantie projet, contrat clarifié. Freelance = flexibilité coût, mais souvent généraliste. Prestashop demande spécialisation : préférez agence si budget permet (2000€+/mois).

Peut-on faire du SEO Prestashop soi-même sans agence ?

Oui si vous maîtrisez PHP, GSC, audit crawl. Non pour 99% des e-commerçants. Prestashop = CMS complexe. Une agence ROI = 1.5-3x sur 6 mois. Tenter seul = 18+ mois pour imprécision = coûts cachés (trafic perdu) > budget agence.

Disminución del tráfico orgánico: por qué las marcas deben reinventar su SEO ante el auge de la IA [Opinión]
→ À lire aussi Disminución del tráfico orgánico: por qué las marcas deben reinventar su SEO ante el auge de la IA [Opinión] Referenciación orgánica (SEO) · 11 Feb 2026

📚 Sources & références

  1. Consolidated Canonicalization DocumentationGoogle Search Central
  2. SEO Optimization Best Practices for E-commercePrestashop Official Blog
  3. Les meilleurs consultants SEO freelance en 2025Journal du Freenaute
  4. Google SEO Starter GuideGoogle Developers
  5. Semrush Agency Partner CertificationSemrush

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