Méthode CLI : comment éviter les timeouts lors de la génération des fresh contents
Le CLI GEO Content Processor est un script en ligne de commande qui permet de générer du contenu GEO (Generative Engine Optimization) pour vos produits PrestaShop sans limitation de temps d'exécution.
Pourquoi utiliser le CLI plutôt que le cron HTTP ?

💡 Recommandation : Utilisez le CLI pour les catalogues de plus de 100 produits ou si vous rencontrez des timeouts HTTP.
Prérequis
Système
- ✅ PHP 7.4+ (8.0+ recommandé)
- ✅ PrestaShop 8.x ou 9.x
- ✅ Module GEO Suite installé et activé
- ✅ Accès SSH au serveur
- ✅ Extension PHP curl activée
Configuration PrestaShop
- Activer le fresh content : Optimisation GEO avancée > Configuration > Activer la génération du fresh content
- Enregistrez votre clé API OpenAI : Configuration de l'IA > OpenAI
- Vérifier que le module est bien actif
Installation
Le CLI est déjà inclus dans le module GEO Suite. Aucune installation supplémentaire nécessaire.
Vérification
✅ Connectez-vous en SSH et vérifiez que le script est accessible :
cd /var/www/html # Remplacez par le chemin de votre PrestaShop ls -la modules/llmseo/bin/geo-content-cli.php
✅ Sortie attendue :
-rwxr-xr-x 1 user user 8854 oct 2 16:17 modules/llmseo/bin/geo-content-cli.php
✅ Le fichier doit être exécutable (droit x).
Configuration de base
1. Vérifier l'accès CLI
✅ Affichez l'aide pour vérifier que tout fonctionne :
php modules/llmseo/bin/geo-content-cli.php --help
✅ Sortie attendue :
╔═══════════════════════════════════════════════════════════════╗ ║ GEO Suite - CLI GEO Content Processor ║ ╚═══════════════════════════════════════════════════════════════╝ DESCRIPTION: Process GEO content generation for products without HTTP timeout restrictions. Ideal for large catalogs or when HTTP cron fails.
2. Vérifier la configuration PrestaShop
Le CLI utilise la configuration PrestaShop existante :
- ✅ LLMSEO_GEO_CONTENT_ENABLED : Doit être activé
- ✅ LLMSEO_FAQ_OPENAI_API_KEY : Doit être configuré
- ✅ LLMSEO_GEO_CONTENT_AI_MODEL : Modèle IA (défaut : gpt-4o)
Aucune configuration supplémentaire n'est nécessaire.
Utilisation
Syntaxe de base
php modules/llmseo/bin/geo-content-cli.php [OPTIONS]
Premier test (mode interactif)
Lancez un test sur 1 produit pour vérifier que tout fonctionne :
php modules/llmseo/bin/geo-content-cli.php --batch=1
Sortie attendue :
╔═══════════════════════════════════════════════════════════════╗ ║ GEO Suite - CLI GEO Content Processor ║ ╚═══════════════════════════════════════════════════════════════╝ Configuration: • Shop ID: 1 • Batch Size: 1 products • Language: All languages ✓ GEO Content system enabled ✓ OpenAI API key configured (sk-k0Bl*********************) Languages to process: 2 ─────────────────────────────────────────────────────────────── 🌍 Processing language: English (English) (en) ✓ Initialized: 1 ✓ Refreshed: 0 ⏱ Duration: 4.23s 🌍 Processing language: Français (French) (fr) ✓ Initialized: 1 ✓ Refreshed: 0 ⏱ Duration: 3.87s ═══════════════════════════════════════════════════════════════ Summary: • Total initialized: 2 • Total refreshed: 0 • Total errors: 0 • Languages: 2 • Total duration: 8.1s ═══════════════════════════════════════════════════════════════ ✅ Processing completed successfully!
✅ Succès ! Le CLI fonctionne correctement.
Options disponibles
--batch=N
Nombre de produits à traiter par batch
- Valeur par défaut : 100
- Plage valide : 1 à 500
- Recommandé : 100-200 pour la plupart des serveurs
Exemples :
# Petit batch (test) php modules/llmseo/bin/geo-content-cli.php --batch=10 # Batch moyen (recommandé) php modules/llmseo/bin/geo-content-cli.php --batch=100 # Gros batch (serveur puissant) php modules/llmseo/bin/geo-content-cli.php --batch=200
💡 Conseil : Commencez avec un petit batch (10-20) pour tester, puis augmentez progressivement.
--lang=N
Traiter une langue spécifique uniquement
- Valeur par défaut : Toutes les langues actives
- Format : ID de la langue (entier)
Exemples :
# Traiter uniquement le français (ID 2) php modules/llmseo/bin/geo-content-cli.php --lang=2 # Traiter uniquement l'anglais (ID 1) php modules/llmseo/bin/geo-content-cli.php --lang=1
Comment trouver l'ID d'une langue ?
Via SQL :
SELECT id_lang, name, iso_code FROM ps_lang WHERE active = 1;
Ou dans le BO : International > Localisation > Langues
--shop=N
Traiter une boutique spécifique (multishop)
- Valeur par défaut : Boutique par défaut
- Format : ID de la boutique (entier)
Exemple :
# Traiter la boutique ID 2 php modules/llmseo/bin/geo-content-cli.php --shop=2
💡 Utile uniquement si vous avez plusieurs boutiques configurées.
--token=XXX
Token de sécurité (optionnel)
- Mode par défaut : Token non requis
- Mode sécurisé : Token obligatoire si configuré dans PrestaShop
Voir la section suivante "Sécurité (Token optionnel)" pour plus de détails.
--help
Afficher l'aide complète
php modules/llmseo/bin/geo-content-cli.php --help
Sécurité (Token optionnel)
Mode par défaut (sans token)
Par défaut, aucun token n'est requis. Le CLI fonctionne directement :
php modules/llmseo/bin/geo-content-cli.php --batch=100 # ✅ Fonctionne sans token
Mode sécurisé (avec token)
Si vous souhaitez restreindre l'accès au CLI (serveurs partagés, multiples utilisateurs), vous pouvez activer un token de sécurité.
Étape 1 : Générer un token sécurisé
Linux/Mac :
openssl rand -hex 32
Ou via PHP :
php -r "echo bin2hex(random_bytes(32)) . PHP_EOL;"
Exemple de token généré :
a3f2c8d9e1b4567890abcdef12345678901234567890abcdef1234567890abcd
Étape 2 : Configurer le token dans PrestaShop
Via SQL :
INSERT INTO ps_configuration (name, value, date_add, date_upd)
VALUES ('LLMSEO_CLI_TOKEN', 'VOTRE_TOKEN_ICI', NOW(), NOW())
ON DUPLICATE KEY UPDATE value = 'VOTRE_TOKEN_ICI', date_upd = NOW();
Ou via PHP :
php -r "
require 'config/config.inc.php';
Configuration::updateValue('LLMSEO_CLI_TOKEN', 'VOTRE_TOKEN_ICI');
echo 'Token configuré avec succès';
"
Étape 3 : Utiliser le CLI avec le token
Une fois le token configuré, il devient obligatoire :
# Sans token (échoue) php modules/llmseo/bin/geo-content-cli.php --batch=100 # ❌ ERROR: Invalid or missing security token # Avec token (fonctionne) php modules/llmseo/bin/geo-content-cli.php --batch=100 --token=VOTRE_TOKEN_ICI # ✅ Processing starts
Désactiver le token
Pour revenir au mode sans token :
UPDATE ps_configuration SET value = '' WHERE name = 'LLMSEO_CLI_TOKEN';
Sécurité des logs
- ✅ Tous les accès non autorisés sont loggés dans PrestaShop
- ✅ Le token utilise hash_equals() pour éviter les timing attacks
- ✅ Les clés API sont masquées dans la sortie CLI
Consulter les logs de sécurité :
SELECT * FROM ps_log WHERE message LIKE '%LLMSEO SECURITY%' ORDER BY date_add DESC LIMIT 20;
Automatisation avec Cron
Configuration Crontab
Éditez votre crontab :
crontab -e
Exemples de configurations
Tous les jours à 2h du matin (batch 100)
0 2 * * * cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --batch=100 >> /var/log/geo-content.log 2>&1
Toutes les 6 heures (batch 50)
0 */6 * * * cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --batch=50 >> /var/log/geo-content.log 2>&1
Tous les lundis à 3h (batch 200, avec token)
0 3 * * 1 cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --batch=200 --token=VOTRE_TOKEN_ICI >> /var/log/geo-content.log 2>&1
Par langue (anglais le lundi, français le mardi)
0 2 * * 1 cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --lang=1 --batch=100 >> /var/log/geo-content-en.log 2>&1 0 2 * * 2 cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --lang=2 --batch=100 >> /var/log/geo-content-fr.log 2>&1
Bonnes pratiques Cron
- Toujours rediriger les logs :
>> /var/log/fichier.log 2>&1
- Utiliser cd avant la commande : Charge le bon contexte PrestaShop
- Éviter les chevauchements : Ne lancez pas 2 crons en même temps
- Tester manuellement avant : Vérifiez que la commande fonctionne
Vérifier les logs Cron
# Voir les dernières lignes du log tail -f /var/log/geo-content.log # Voir les 100 dernières lignes tail -100 /var/log/geo-content.log # Chercher des erreurs grep -i "error\|fatal" /var/log/geo-content.log
Exemples pratiques
Petit catalogue (< 500 produits)
Traitement complet en une fois :
php modules/llmseo/bin/geo-content-cli.php --batch=200
Durée estimée : 5-10 minutes (selon API)
Catalogue moyen (500-2000 produits)
Traitement quotidien par batch :
# Cron : tous les jours à 2h 0 2 * * * cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --batch=100
Durée estimée : Le système traite automatiquement tous les produits sur plusieurs jours.
Gros catalogue (> 2000 produits)
Traitement intensif :
# Lundi : Initialisation (nouveaux produits) 0 1 * * 1 cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --batch=200 # Jeudi : Rafraîchissement (mise à jour) 0 1 * * 4 cd /var/www/html && php modules/llmseo/bin/geo-content-cli.php --batch=150
Durée estimée : Couverture complète du catalogue en 1-2 semaines.
Traitement par langue (multishop/multilingue)
Séparer les langues pour un meilleur contrôle :
# Lundi : Anglais php modules/llmseo/bin/geo-content-cli.php --lang=1 --batch=100 # Mardi : Français php modules/llmseo/bin/geo-content-cli.php --lang=2 --batch=100 # Mercredi : Allemand php modules/llmseo/bin/geo-content-cli.php --lang=3 --batch=100
Mode debug (test sur 5 produits)
Pour tester une modification ou déboguer :
php modules/llmseo/bin/geo-content-cli.php --batch=5
Monitoring et logs
Sortie CLI en temps réel
Le CLI affiche une progression détaillée :
🌍 Processing language: English (English) (en) ✓ Initialized: 15 ← Nouveaux produits ✓ Refreshed: 8 ← Produits mis à jour ⏱ Duration: 42.5s
Logs PrestaShop
Tous les événements sont loggés dans PrestaShop Admin > Avancé > Logs :
Filtres utiles :
-
Object type : GeoContentCLI
-
Object type : GeoContentAiGenerator
Exemples de logs :
[GEO CITATION] Starting generation for product 123 with id_lang 1 [GEO AI ERROR] Failed to generate citation phrase: Rate limit exceeded [LLMSEO SECURITY] Unauthorized CLI access attempt
Monitoring SQL
Vérifier les produits traités aujourd'hui :
SELECT COUNT(*) as total, id_lang FROM ps_llmseo_product_geo_content WHERE DATE(date_add) = CURDATE() GROUP BY id_lang;
Vérifier les produits sans contenu GEO :
SELECT COUNT(DISTINCT p.id_product) as products_without_geo
FROM ps_product p
WHERE p.active = 1
AND NOT EXISTS (
SELECT 1 FROM ps_llmseo_product_geo_content pgc
WHERE pgc.id_product = p.id_product
AND pgc.id_lang = 1
);
Dépannage
❌ "PrestaShop not loaded properly"
Cause : Chemin incorrect vers PrestaShop
Solution :
# Vérifiez que vous êtes dans le bon répertoire pwd # Doit afficher : /var/www/html (ou votre chemin PrestaShop) # Lancez depuis la racine PrestaShop cd /var/www/html php modules/llmseo/bin/geo-content-cli.php --batch=10
❌ "GEO Content system is disabled"
Cause : Module non activé dans le BO
Solution :
- Connectez-vous au BO PrestaShop
- Allez dans Modules > Module Manager
- Cherchez "GEO Suite"
- Cliquez sur Configurer
- Activez GEO Content
Ou via SQL :
UPDATE ps_configuration SET value = '1' WHERE name = 'LLMSEO_GEO_CONTENT_ENABLED';
❌ "OpenAI API key not configured"
Cause : Clé API manquante ou vide
Solution :
- BO > GEO Suite > AI Configuration
- Entrez votre clé OpenAI (commence par sk-)
- Cliquez sur Enregistrer
❌ "Fatal error: Class not found"
Cause : Fichiers du module corrompus ou version obsolète
Solution :
# Vérifiez les fichiers du module ls -la modules/llmseo/src/Service/ # Réinstallez le module si nécessaire # Via BO : Modules > Module Manager > GEO Suite > Réinstaller
❌ "Rate limit exceeded"
strong>Cause : Trop de requêtes vers l'API OpenAI
Solution :
- Réduire le batch size : Utilisez --batch=20 au lieu de --batch=100
- Espacer les crons : Au lieu de toutes les heures, toutes les 6 heures
- Vérifier votre plan OpenAI : Augmentez votre limite de taux
❌ Timeout ou "Memory exhausted"
Cause : Batch trop important pour le serveur
Solution :
# Réduire le batch size php modules/llmseo/bin/geo-content-cli.php --batch=50 # Ou augmenter la mémoire PHP (si root) php -d memory_limit=512M modules/llmseo/bin/geo-content-cli.php --batch=100
❌ "Invalid or missing security token"
Cause : Token configuré mais non fourni
Solution :
# Vérifier si un token est configuré
php -r "
require 'config/config.inc.php';
echo Configuration::get('LLMSEO_CLI_TOKEN') ?: 'Pas de token';
"
# Utiliser le token
php modules/llmseo/bin/geo-content-cli.php --batch=100 --token=VOTRE_TOKEN
# Ou désactiver le token
php -r "
require 'config/config.inc.php';
Configuration::updateValue('LLMSEO_CLI_TOKEN', '');
echo 'Token désactivé';
"
FAQ
1. Quelle est la différence entre "Initialized" et "Refreshed" ?
- Initialized : Nouveaux produits qui n'avaient pas encore de contenu GEO
- Refreshed : Produits existants dont le contenu GEO a été mis à jour
2. Combien de temps prend le traitement d'un produit ?
En moyenne : 3-5 secondes par produit (2 langues)
Cela dépend de :
- La latence de l'API OpenAI (~2-3s par appel)
- Le nombre de langues configurées
- La complexité du produit
3. Puis-je lancer le CLI pendant que la boutique est ouverte ?
Oui, le CLI n'impacte pas les performances de la boutique. Il utilise l'API en arrière-plan sans affecter le front-office.
4. Le contenu GEO est-il visible immédiatement ?
Oui, dès que le CLI a traité un produit, le contenu est disponible :
- Dans le BO : Fiche produit > Onglet Optimisation GEO
- En front : Métadonnées et rich snippets
5. Que se passe-t-il si j'interromps le CLI (Ctrl+C) ?
Le CLI s'arrête proprement :
- Les produits déjà traités sont sauvegardés
- La progression est mémorisée (système de pagination)
- Vous pouvez relancer le CLI sans perdre le travail effectué
6. Comment voir les produits traités récemment ?
Via le BO :
- Catalogue > Produits
- Cherchez un produit
- Ouvrez la fiche produit
- Onglet GEO Content
- Vérifiez la date de mise à jour
Via SQL :
SELECT p.id_product, pl.name, pgc.date_add, pgc.date_upd FROM ps_llmseo_product_geo_content pgc JOIN ps_product p ON p.id_product = pgc.id_product JOIN ps_product_lang pl ON pl.id_product = p.id_product AND pl.id_lang = pgc.id_lang WHERE DATE(pgc.date_upd) >= CURDATE() - INTERVAL 7 DAY ORDER BY pgc.date_upd DESC LIMIT 50;
7. Puis-je traiter uniquement les nouveaux produits ?
Oui, le CLI le fait automatiquement :
- Les produits sans contenu GEO sont initialisés en priorité
- Les produits existants sont rafraîchis selon la fréquence configurée
8. Le CLI fonctionne-t-il avec Windows ?
Oui, mais avec quelques adaptations :
# PowerShell cd C:\wamp64\www\prestashop php modules\llmseo\bin\geo-content-cli.php --batch=10 # CMD cd C:\wamp64\www\prestashop php modules/llmseo/bin/geo-content-cli.php --batch=10
💡 Pour le cron sous Windows, utilisez le Planificateur de tâches.
Autres FAQ dans la même catégorie
- Comment configurer l'outil d'analyse du trafic des bots IA ?
- Comment configurer l'optimisation avancée GEO (fresh content, aiCitationPhrase, UsageContextTags) ?
- Comment configurer l'outil Textes alternatifs ?
- Comment configurer l'outil FAQ ?
- Comment configurer l'outil IndexNow ?
- Comment configurer l'outil LLMS.txt ?
- Comment configurer l'outil JSON-LD GEO ?
- Comment configurer l'outil Sitemaps XML ?
- Comment configurer le module GEO Suite ?