Pages statiques et articles de blog
QuietCMS distingue deux types de contenus principaux : les pages (contenu statique, hiérarchique) et les articles (blog, horodatés, catégorisés). Les deux sont stockés au format JSON sur le disque, sans aucune base de données. La classe ContentManager gère l'ensemble des opérations CRUD pour ces deux types avec verrouillage de fichier (LOCK_EX) pour éviter les écritures concurrentes.
Gestion des pages
Chaque page est enregistrée dans content/pages/<slug>.json. Les pages offrent les fonctionnalités suivantes :
- Slug personnalisé — généré automatiquement depuis le titre (slugification ASCII), modifiable manuellement
- Override du H1 — le titre affiché sur la page peut différer du titre SEO
- Page parente — pour construire une hiérarchie (ex.
/services/consulting/) - Image à la une — sélectionnable depuis la bibliothèque médias
- Override robots meta —
noindex,nofollow,noarchiveconfigurables par page - head_extra / footer_extra — champs libres pour injecter des scripts ou styles spécifiques à une page
- JSON-LD personnalisé — bloc de données structurées supplémentaires
Gestion des articles de blog
Les articles résident dans content/posts/<slug>.json. En plus des fonctionnalités communes avec les pages, ils disposent de :
- Catégorie — une catégorie principale par article (slug de catégorie)
- Tags — liste libre de mots-clés (tableau JSON)
- Date de publication — contrôlable manuellement, au format ISO 8601
- Statut —
draft,publishedouscheduled - Image à la une — utilisée pour Open Graph, les listes et le JSON-LD Article
Système de statuts
Le cycle de vie d'un article suit trois états :
- draft — brouillon invisible du public ; seul l'admin peut prévisualiser
- published — en ligne immédiatement, indexable
- scheduled — mis en ligne automatiquement à la date définie via une vérification lors de chaque requête (pas de cron nécessaire si le trafic est régulier)
Éditeur de contenu
Le back-office propose un éditeur HTML enrichi. Selon la version déployée, il s'agit d'une intégration TinyMCE ou d'une zone <textarea> avec coloration syntaxique. L'éditeur insère du HTML propre et sémantique. Les pièces jointes (images, vidéos) sont insérables via la bibliothèque médias intégrée.
Slug et unicité
Lors de la création d'un contenu, le slug est généré automatiquement depuis le titre :
// Exemple de slugification
"Mon Article : Démo !" → "mon-article-demo"
Si le slug existe déjà, un suffixe numérique est ajouté (-2, -3...). Le slug est ensuite immuable pour préserver les URLs existantes, sauf modification manuelle explicite (accompagnée d'une redirection automatique proposée par le CMS).
SEO par page
Chaque contenu dispose de ses propres champs SEO :
- Titre SEO — balise
<title>distincte du titre affiché - Meta description — 120-160 caractères recommandés
- URL canonique — auto-générée, surchargeable
- JSON-LD custom — pour ajouter des schémas spécifiques (Product, Event, Recipe…)
Page d'accueil et page blog
N'importe quelle page peut être désignée comme page d'accueil depuis Admin → Réglages → Général. Le slug de la page blog est également configurable (défaut : blog), ce qui donne l'URL publique /blog/ pour le listing des articles.
Articles similaires
Bibliothèque médias et conversion WebP automatique
Gérez vos images et vidéos avec QuietCMS : conversion WebP automatique, dossiers, alt-text et sanitisation SVG.
Constructeur de formulaires et système de commentaires
Créez des formulaires personnalisés et gérez les commentaires de vos lecteurs avec QuietCMS.
URL admin randomisée : sécurité par l'obscurité
Comment QuietCMS génère une URL admin aléatoire à l'installation pour réduire la surface d'attaque.