FolioDesign vs WordPress + Elementor : lequel choisir pour votre site web ?
WordPress représente aujourd'hui environ 43 % de l'ensemble des sites web — un chiffre impressionnant, mais qui ne signifie pas que c'est le bon choix pour tous les projets. Elementor, l'un des constructeurs de pages les plus utilisés dans l'univers WordPress, est souvent présenté comme une solution complète pour les entreprises. Mais face à une offre comme FolioDesign, ses limites deviennent rapidement apparentes. Voici un comparatif factuel, point par point.
Deux philosophies très différentes
Avant d'entrer dans le détail, il est utile de comprendre la philosophie qui distingue ces deux approches du web.
FolioDesign
FolioDesign est une plateforme de création de sites web conçue pour offrir aux clients une expérience complète, cohérente et maîtrisée. Chaque site est hébergé sur AWS, livré avec un CDN mondial, optimisé d'emblée pour les Core Web Vitals de Google, et enrichi d'outils pensés pour faciliter la collaboration entre l'agence et le client.
Ce qui distingue FolioDesign, c'est l'écosystème qui entoure chaque site : l'assistant IA Folia pour la rédaction et le SEO, l'éditeur MyFolio pour gérer le contenu en autonomie, FolioMarket pour accéder à des services additionnels, et les Crédits de services pour entretenir une relation durable et transparente avec l'agence.
WordPress + Elementor
Elementor est l'un des constructeurs de pages les plus utilisés dans l'univers WordPress. Il s'adresse à un large public : débutants, freelances, agences. Sa force est sa popularité — une vaste communauté, des milliers de thèmes et de plugins disponibles. Sa faiblesse est structurelle : il reste un plugin posé sur un CMS, avec tout ce que cela implique en termes de maintenance, de sécurité et de cohérence à long terme.
1. Capacités de design
L'éditeur FolioDesign a été conçu avec deux objectifs : accélérer la production de sites et permettre la création de sites complexes sans recours à des extensions tierces. En pratique, cela se traduit par une bibliothèque de templates optimisés SEO et AEO dès le départ, des sections prédéfinies personnalisables, des points de rupture responsive pour tous les supports, et des options avancées de navigation et d'arrière-plans.
Elementor propose des fonctionnalités similaires en surface, mais s'appuie souvent sur des plugins tiers pour les effets avancés. Ces plugins ne sont pas conçus pour fonctionner ensemble, ce qui peut engendrer des comportements incohérents selon les appareils et les environnements.
Verdict : Le comportement de mise en page de FolioDesign est plus prévisible et cohérent sur l'ensemble des supports. Pour des sites qui doivent être irréprochables sur mobile comme sur desktop, c'est un avantage concret.
2. Relation client et gestion du contenu
FolioDesign intègre nativement des outils pensés pour fluidifier la collaboration entre l'agence et ses clients. MyFolio permet au client de gérer son contenu en autonomie — textes, images, produits, articles de blog — avec un niveau d'accès calibré selon le forfait souscrit.
Les échanges avec l'agence s'organisent autour des Crédits de services : chaque demande de modification ou de création est consommée depuis le Carnet du client, de façon transparente et traçable. Le client sait exactement ce qu'il utilise, et l'agence conserve la maîtrise des interventions.
Elementor permet de restreindre les accès en s'appuyant sur le système de rôles WordPress, mais cela reste limité sans plugins supplémentaires. Il n'existe pas d'équivalent aux Crédits de services, ni de tableau de bord client unifié comparable.
Verdict : La gestion de la relation client est structurellement plus simple avec FolioDesign. Le client dispose d'un espace clair, l'agence garde la main sur les accès, et les échanges sont organisés de façon lisible.
3. Intelligence artificielle : Folia vs les options IA d'Elementor
L'intégration de l'IA dans les outils web est devenue un critère de choix à part entière. FolioDesign propose Folia , un assistant IA intégré qui couvre un large périmètre d'usages : rédaction et révision de textes pour les pages du site, optimisation SEO et génération de métadonnées, génération d'articles de blog (forfait Premium), et audit SEO/AEO avec corrections guidées (forfait Premium).
Folia est inclus dans les forfaits Confort et Premium, sans abonnement supplémentaire. Elementor propose lui aussi un assistant IA, mais son périmètre est plus restreint : génération de texte et d'images, aide à la maquette. Il est proposé en option payante, en dehors de l'abonnement de base.
Verdict : Folia est plus profondément intégré au cycle de vie du site — de la rédaction initiale à l'optimisation continue — et il est inclus dans le forfait. C'est un avantage concret pour les clients qui souhaitent produire du contenu de qualité sans outil externe supplémentaire.
4. Tarification : le vrai coût total
FolioDesign propose trois forfaits mensuels tout compris — hébergement AWS, SSL, sauvegardes, éditeur MyFolio, Crédits de services et accès à FolioMarket sont inclus dans chacun d'eux :
- Essentiel — 38,90 €/mois : 3 pages personnalisées, 8 Crédits de services par an, blog inclus, rapport email mensuel.
- Confort — 54,90 €/mois : 5 pages, 15 Crédits de services par an, Folia (textes et SEO), 1 collection dynamique, dashboard statistiques, adresse email professionnelle.
- Premium — 71,90 €/mois : 7 pages, 24 Crédits de services par an, Folia complet (génération articles, audit SEO/AEO), e-boutique native, Web App installable, rapport hebdomadaire.
WordPress + Elementor fonctionne sur un modèle différent : le CMS est gratuit, mais l'hébergement de qualité, le thème premium, Elementor Pro, les plugins de sécurité, de SEO, de cache et de sauvegarde s'ajoutent rapidement. Sans compter le temps de maintenance nécessaire pour maintenir l'ensemble à jour et cohérent.
Verdict : Le coût total de possession d'un site WordPress + Elementor est difficile à anticiper. FolioDesign offre une tarification prévisible, avec un périmètre clairement défini dès le départ — sans mauvaises surprises en cours d'année.
5. SEO et visibilité : un avantage natif
FolioDesign intègre nativement les bonnes pratiques SEO dès la création du site : schema.org structuré, sitemap automatique, fichier llms.txt pour les moteurs IA (AEO), et IndexNow pour une indexation rapide. Les forfaits Confort et Premium ajoutent le pilotage SEO/AEO avancé, la synchronisation Google Business et l'accès à Folia pour la génération de métadonnées optimisées.
Sur WordPress, le SEO repose principalement sur des plugins comme Yoast ou Rank Math. Ces outils sont efficaces, mais leur configuration correcte demande du temps et des compétences techniques. L'optimisation AEO — pour les moteurs de recherche intégrant l'IA comme Google AI Overview ou Bing Copilot — n'est pas encore traitée nativement.
Verdict : FolioDesign offre une base SEO et AEO solide sans configuration manuelle. À l'heure où les moteurs de recherche intégrant l'IA gagnent rapidement du terrain, c'est un avantage réel et durable.
6. E-commerce : natif vs WooCommerce
Le forfait Premium FolioDesign inclut une boutique e-commerce native : pages produits personnalisables, gestion des stocks, zones de livraison et de taxe automatisées, paiements via Stripe, PayPal et Square, vente de produits numériques et abonnements — le tout sans plugin tiers à maintenir.
WordPress + Elementor s'appuie sur WooCommerce, l'un des plugins e-commerce les plus utilisés au monde. La solution est puissante, mais elle nécessite une veille régulière sur les mises à jour, des plugins de compatibilité supplémentaires, et une maintenance active pour garantir la stabilité de l'ensemble sur la durée.
Verdict : Pour une boutique en ligne sans friction de maintenance, la solution native de FolioDesign est plus simple à gérer. WooCommerce reste pertinent pour des projets très spécifiques nécessitant une personnalisation profonde et une équipe technique dédiée.
7. Support et accompagnement
Chaque client FolioDesign bénéficie d'un support humain de l'agence, avec des délais de réponse garantis selon le forfait : 48h en Essentiel, 24h prioritaire en Confort, VIP en Premium. FolioMarket constitue également un point d'accès direct aux services de l'agence pour toute demande spécifique, consultable et commandable en ligne à tout moment.
Le support Elementor s'appuie principalement sur sa communauté d'utilisateurs pour le plan de base. Des options de support professionnel existent sur les abonnements payants, mais restent distinctes du support des plugins tiers — qui disposent chacun de leurs propres canaux, avec des délais et une qualité variables.
Verdict : Avec FolioDesign, le client a un interlocuteur unique pour l'ensemble de son site. Avec WordPress + Elementor, les problèmes peuvent impliquer plusieurs prestataires selon leur origine — hébergeur, thème, plugin — ce qui complexifie et ralentit la résolution.
En résumé
WordPress + Elementor est une option viable pour des projets web très spécifiques, notamment lorsqu'une personnalisation technique profonde est requise ou que l'équipe cliente dispose de compétences en administration WordPress.
Pour la grande majorité des entreprises — TPE, PME, commerçants, professions libérales — FolioDesign offre un équilibre plus favorable : un site performant et maintenu, des outils IA intégrés, une relation claire avec l'agence, et un coût réel plus prévisible sur la durée.
Les Crédits de services, FolioMarket et l'assistant Folia forment un écosystème conçu pour que le site web reste un actif vivant — pas un projet livré et oublié. C'est ce qui distingue fondamentalement l'approche FolioDesign d'une solution WordPress assemblée à la pièce.
๐ Guide de configuration (3 étapes simples)
๐ Étape 1 : Créer le Google Sheet
- Créez un nouveau Google Sheet
- Nommez-le :
Commentaires Blog - Créez ces colonnes dans la première ligne :
- โ A1: name
- โ B1: email
- โ C1: comment
- โ D1: page_url
- โ E1: page_title
- โ F1: timestamp
- โ G1: status
- โ H1: Logs
- โ I1: custom_fields
- โ J1: moderation_flags
- โ K1: reports_count
- โ L1: reports_details
- โ M1: reports_last_date
- โ N1: comment_id (unique)
โ๏ธ Étape 2 : Configurer Google Apps Script (Code v4 FINAL — signalement corrigé)
- Dans votre Google Sheet, allez dans Extensions → Apps Script
- Supprimez le code par défaut
- Copiez-collez le code ci-dessous ๐
// ============================================================
// WIDGET BLOG COMMENTS — Google Apps Script v4
// CORRECTIONS v4 :
// - handleReport ne crée JAMAIS de nouvelle ligne
// - Recherche du commentaire par comment_id (col N)
// ET par timestamp (col F) en fallback
// - Email envoyé même si comment_id introuvable
// (signalement orphelin stocké dans feuille "Signalements")
// - Logs ultra-détaillés pour diagnostic
// ============================================================
function doPost(e) {
try {
// Compatible avec Content-Type: text/plain ET application/json
// (le widget envoie text/plain pour contourner la restriction no-cors)
const rawBody = e.postData ? e.postData.contents : '';
Logger.log('๐จ Body brut reçu: ' + rawBody.substring(0, 200));
if (!rawBody || rawBody.trim() === '') {
Logger.log('โ Body vide reçu');
return jsonResponse({ status: 'error', message: 'Body vide' });
}
const data = JSON.parse(rawBody);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if (!data || typeof data !== 'object') {
return jsonResponse({ status: 'error', message: 'Données invalides' });
}
Logger.log('โ
Action reçue: ' + (data.action || 'new_comment'));
if (data.action === 'report') {
return handleReport(data, sheet);
}
return handleNewComment(data, sheet);
} catch (error) {
Logger.log('โ Erreur doPost: ' + error.toString());
return jsonResponse({ status: 'error', message: error.toString() });
}
}
// ------------------------------------------------------------
// NOUVEAU COMMENTAIRE
// ------------------------------------------------------------
function handleNewComment(data, sheet) {
const customFieldsJson = data.custom_fields || '';
const moderationFlags = data.moderation_flags || '';
const commentId = Utilities.getUuid();
const row = [
data.name || '',
data.email || '',
data.comment || '',
data.page_url || '',
data.page_title || '',
data.timestamp || new Date().toISOString(),
data.status || 'pending',
'', // Logs
customFieldsJson,
moderationFlags,
0, // reports_count (col K)
'', // reports_details (col L)
'', // reports_last_date (col M)
commentId // comment_id (col N)
];
sheet.appendRow(row);
Logger.log('โ
Nouveau commentaire ajouté | id=' + commentId);
if (data.enable_notification && data.admin_email) {
sendAdminNotification(data, moderationFlags);
}
return jsonResponse({
status: 'success',
message: 'Commentaire enregistré',
comment_id: commentId
});
}
// ------------------------------------------------------------
// SIGNALEMENT — NE CRÉE JAMAIS DE NOUVELLE LIGNE
// ------------------------------------------------------------
function handleReport(data, sheet) {
Logger.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
Logger.log('๐ฉ handleReport v4 — début');
Logger.log('๐ฆ Données reçues: ' + JSON.stringify(data));
Logger.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
const reporterName = data.reporter_name || 'Anonyme';
const reporterEmail = data.reporter_email || 'Non fourni';
const reportReason = data.report_reason || 'Non spécifié';
const reportDetails = data.report_details || 'Aucun détail';
const reportDate = new Date().toISOString();
const commentId = (data.comment_id || '').toString().trim();
const adminEmail = (data.admin_email || '').toString().trim();
Logger.log('๐ comment_id reçu: "' + commentId + '"');
Logger.log('๐ง admin_email reçu: "' + adminEmail + '"');
// โโ Chercher la ligne du commentaire โโโโโโโโโโโโโโโโโโโโโโ
const allValues = sheet.getDataRange().getValues();
let commentRow = -1;
if (commentId !== '') {
// Priorité : recherche par comment_id (col N = index 13)
Logger.log('๐ Recherche par comment_id dans colonne N (' + allValues.length + ' lignes)...');
for (let i = 1; i < allValues.length; i++) {
const cellId = (allValues[i][13] || '').toString().trim();
Logger.log(' Ligne ' + (i+1) + ': "' + cellId + '"');
if (cellId === commentId) {
commentRow = i + 1;
Logger.log('โ
Trouvé par comment_id à la ligne ' + commentRow);
break;
}
}
}
// Fallback : recherche par timestamp (col F = index 5)
if (commentRow === -1 && data.comment_timestamp) {
Logger.log('๐ Fallback: recherche par timestamp...');
const ts = (data.comment_timestamp || '').toString().trim();
for (let i = 1; i < allValues.length; i++) {
if ((allValues[i][5] || '').toString().trim() === ts) {
commentRow = i + 1;
Logger.log('โ
Trouvé par timestamp à la ligne ' + commentRow);
break;
}
}
}
// โโ Mettre à jour la ligne (si trouvée) โโโโโโโโโโโโโโโโโโโ
let newCount = 1;
if (commentRow !== -1) {
const currentCount = parseInt(sheet.getRange(commentRow, 11).getValue()) || 0;
const currentDetails = sheet.getRange(commentRow, 12).getValue() || '';
newCount = currentCount + 1;
sheet.getRange(commentRow, 11).setValue(newCount);
Logger.log('โ
reports_count mis à jour: ' + currentCount + ' → ' + newCount);
const detailLine = '[' + reportDate + '] Par: ' + reporterName +
' (' + reporterEmail + ') | Raison: ' + reportReason +
' | Détails: ' + reportDetails;
const newDetails = currentDetails ? currentDetails + '\n\n' + detailLine : detailLine;
sheet.getRange(commentRow, 12).setValue(newDetails);
sheet.getRange(commentRow, 13).setValue(reportDate);
Logger.log('โ
Détails et date mis à jour');
} else {
// Commentaire introuvable — on NE crée PAS de nouvelle ligne
Logger.log('โ ๏ธ Commentaire introuvable. Enregistrement dans feuille "Signalements".');
enregistrerSignalementOrphelin(data, reporterName, reporterEmail, reportReason, reportDetails, reportDate);
}
// โโ Envoyer l'email admin โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
if (adminEmail !== '') {
Logger.log('๐ง Envoi email signalement à: ' + adminEmail);
try {
sendReportNotification(data, newCount, reporterName, reporterEmail, reportReason, reportDetails, commentRow);
Logger.log('โ
Email signalement envoyé');
} catch (emailError) {
Logger.log('โ Erreur envoi email: ' + emailError.toString());
}
} else {
Logger.log('โ ๏ธ Aucun email admin configuré.');
Logger.log(' → Vérifiez le champ "Email admin pour signalements" dans le content editor du widget.');
Logger.log(' → Ou remplissez le champ "Email de l\'administrateur" (notifications générales).');
}
Logger.log('๐ฉ handleReport v4 — fin');
Logger.log('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
return jsonResponse({
status: 'success',
message: 'Signalement traité',
reports_count: newCount,
row_updated: commentRow
});
}
// Sauvegarde orpheline si le commentaire est introuvable dans le Sheet
function enregistrerSignalementOrphelin(data, reporterName, reporterEmail, reportReason, reportDetails, reportDate) {
try {
const ss = SpreadsheetApp.getActiveSpreadsheet();
let feuille = ss.getSheetByName('Signalements');
if (!feuille) {
feuille = ss.insertSheet('Signalements');
feuille.appendRow(['date', 'comment_id', 'comment_text', 'reporter_name', 'reporter_email', 'reason', 'details']);
}
feuille.appendRow([
reportDate,
data.comment_id || '',
data.comment_text || '',
reporterName,
reporterEmail,
reportReason,
reportDetails
]);
Logger.log('โ
Signalement orphelin enregistré dans "Signalements"');
} catch (err) {
Logger.log('โ Erreur enregistrement orphelin: ' + err.toString());
}
}
// ------------------------------------------------------------
// EMAILS
// ------------------------------------------------------------
function sendAdminNotification(data, moderationFlags) {
try {
const subject = '๐ง Nouveau commentaire sur "' + data.page_title + '"';
const body =
'Un nouveau commentaire a été posté sur votre site :\n\n' +
'๐ค Nom : ' + (data.name || '') + '\n' +
'๐ง Email : ' + (data.email || 'Non fourni') + '\n' +
'๐ Page : ' + (data.page_title || '') + '\n' +
'๐ URL : ' + (data.page_url || '') + '\n' +
'๐
Date : ' + (data.timestamp || '') + '\n' +
'โ
Statut : ' + (data.status || '') + '\n\n' +
'๐ฌ Commentaire :\n' + (data.comment || '') + '\n\n' +
(moderationFlags ? '๐จ Modération : ' + moderationFlags + '\n\n' : '') +
'---\nAccédez à votre Google Sheet pour gérer ce commentaire.';
MailApp.sendEmail(data.admin_email, subject, body);
Logger.log('โ
Email nouveau commentaire envoyé');
} catch (error) {
Logger.log('โ Erreur envoi email commentaire: ' + error.toString());
}
}
function sendReportNotification(data, reportsCount, reporterName, reporterEmail, reportReason, reportDetails, rowUpdated) {
const subject = '๐ฉ SIGNALEMENT — "' + (data.page_title || 'Page inconnue') + '"';
const rowInfo = rowUpdated !== -1
? 'Ligne mise à jour dans le Sheet : ' + rowUpdated
: 'โ ๏ธ Commentaire introuvable dans le Sheet (voir feuille "Signalements")';
const body =
'๐จ ALERTE SIGNALEMENT ๐จ\n\n' +
'โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n' +
'๐ Total signalements : ' + reportsCount + '\n' +
rowInfo + '\n' +
'โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n' +
'๐ฌ COMMENTAIRE SIGNALÉ\n' +
'๐ Page : ' + (data.page_title || 'N/A') + '\n' +
'๐ URL : ' + (data.comment_page_url || 'N/A') + '\n' +
'๐ค Auteur : ' + (data.comment_name || 'N/A') + '\n' +
'๐ง Email auteur : ' + (data.comment_email || 'Non fourni') + '\n' +
'๐ comment_id : ' + (data.comment_id || 'Non fourni') + '\n\n' +
'๐ Texte :\n"' + (data.comment_text || '') + '"\n\n' +
'โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n\n' +
'๐ฉ SIGNALÉ PAR\n' +
'๐ค Nom : ' + reporterName + '\n' +
'๐ง Email : ' + reporterEmail + '\n' +
'๐ซ Raison : ' + reportReason + '\n' +
'๐ Détails : ' + reportDetails + '\n\n' +
'โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ\n' +
'โ ๏ธ Veuillez vérifier ce commentaire dans votre Google Sheet.';
MailApp.sendEmail(data.admin_email, subject, body);
Logger.log('โ
Email signalement envoyé à ' + data.admin_email);
}
// ------------------------------------------------------------
// HELPER
// ------------------------------------------------------------
function jsonResponse(obj) {
return ContentService
.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
- Cliquez sur ๐พ Enregistrer
- โ ๏ธ IMPORTANT : Cliquez sur "Déployer" → "Gérer les déploiements"
- Cliquez sur โ๏ธ (Modifier) à côté du déploiement existant
- Changez "Version" → "Nouvelle version"
- Cliquez sur "Déployer"
- โ Votre webhook est maintenant mis à jour !
๐ Pour voir les logs de débogage :
- Dans Google Apps Script, cliquez sur "Exécutions"(icône horloge)
- Cliquez sur la dernière exécution
- Vous verrez tous les logs détaillés du traitement du signalement
๐ Étape 3 : Connecter à vos Collections
- Dans votre site, allez dans Collections
- Cliquez sur "Connect to Google Sheets"
- Autorisez et sélectionnez votre Google Sheet
- Configurez le mapping des colonnes
- Activez la synchronisation bidirectionnelle automatique
- Notez le nom de la collection créée
- Mettez à jour le champ "Nom de la collection" ci-dessous โฌ๏ธ
Laisser un commentaire
emoji
๐ฌ Ceci est un exemple de commentaire pour prévisualiser les styles.
0 sur 0 commentaires affichés
โ Erreur de chargement
Signaler un commentaire
We got it.
Thank you for contacting us.
We’ll get back to you as soon as possible.









Partagez votre avis sur cet article ( 0 )