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

 


Configuration PrestaShop

 

  1. Activer le fresh content : Optimisation GEO avancée > Configuration > Activer la génération du fresh content
  2. Enregistrez votre clé API OpenAI : Configuration de l'IA > OpenAI
  3. 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 :

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

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

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)

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)

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
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

 

  1. Toujours rediriger les logs :
    >> /var/log/fichier.log 2>&1
  2. Utiliser cd avant la commande : Charge le bon contexte PrestaShop
  3. Éviter les chevauchements : Ne lancez pas 2 crons en même temps
  4. 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 :

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 :

  1. Connectez-vous au BO PrestaShop
  2. Allez dans Modules > Module Manager
  3. Cherchez "GEO Suite"
  4. Cliquez sur Configurer
  5. 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 :

  1. BO > GEO Suite > AI Configuration
  2. Entrez votre clé OpenAI (commence par sk-)
  3. 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 :

  1. Réduire le batch size : Utilisez --batch=20 au lieu de --batch=100
  2. Espacer les crons : Au lieu de toutes les heures, toutes les 6 heures
  3. 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" ?

 


2. Combien de temps prend le traitement d'un produit ?


En moyenne : 3-5 secondes par produit (2 langues)

Cela dépend de :


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 :


5. Que se passe-t-il si j'interromps le CLI (Ctrl+C) ?


Le CLI s'arrête proprement :


6. Comment voir les produits traités récemment ?


Via le BO :

  1. Catalogue > Produits
  2. Cherchez un produit
  3. Ouvrez la fiche produit
  4. Onglet GEO Content
  5. 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 :


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