Des features pour le SEO ?

Avatar
Posts 8

Hello,
à chaque fois que je participe à un projet tel que Flatboard, je ne peux m'empêcher de faire des recommandations SEO (déformation professionnelle).
C'est souvent le parent pauvre de nombreux CMS, alors voilà ce que je préconise généralement :

Balise title
Idéalement, il faudrait avoir la main sur la construction des titres puisque d'un projet à l'autre, on n'a pas toujours les mêmes besoins. Cela pourrait passer par des variables que l'on pourrait personnaliser. Typiquement, par défaut :
Accueil : {SLOGAN} - {NOM DU SITE}
Catégorie : {CATEGORIE} - {NOM DU SITE}
Topic : {TITRE TOPIC} - {NOM DU SITE}
...

Cela permet aussi de faire des choses du type "Toutes les discussions sur {CATEGORIE}", pour ceux qui le souhaitent.

Meta description
Le fonctionnement pourrait être le même que les balises title, avec des variables. Dans ce cas, on pourrait avoir besoin d'un {DESCRIPTION} qui reprend les 150-160 premiers caractères du premier message.
Cela permettrait, par exemple, pour les catégories de produire une meta du genre "Venez discuter de {CATEGORIE} avec la communauté de {NOM DU SITE}" ou utiliser la description de la catégorie. Ce n'est pas parfait, mais ça permet de gérer tout cela dynamiquement.

Balise canonical sur toutes les pages
Cette balise permet de spécifier l'URL de la page aux moteurs :
<link rel="canonical" href="https://fatboard.org" />
C'est optionnel, mais ça permet d'éviter des soucis d'indexation lorsqu'un site ajoute des paramètres sur ses liens (typiquement des utm_source, utm_campaign, etc). J'ai également eu le cas d'une campagne de NSEO qui visait à créer des milliers de liens de ce type pour flinguer le budget crawl d'un site (l'exploration de Google Bot est limitée et ça peut ralentir l'indexation des nouvelles pages).

Sitemap XML
Là aussi, ça reste optionnel, mais pour des forums de grande envergure, ça me semble intéressant. La mise en œuvre pourrait se faire via un /feed/sitemap, je pense. Je n'ai pas encore regardé, mais j'imagine qu'il y a tout ce qu'il faut dans le fichier qui génère le RSS.

Performances
Flatboard s'en sort pas mal en terme de performances, mais, à l'avenir, cela pourrait être un sujet. PageSpeed Insights donne d'excellentes indications pour améliorer tout cela.
Pour les images, j'aurais tendance à recommander webp ou jpg avec une bonne compression. Idéalement, l'utilisateur envoie un fichier dans n'importe quel format, mais celui affiché dans le message doit être au bon format (webp/jpg). Je sais que le hotlink est une pratique commune sur les forums, mais appeler des images de différents serveurs peut ralentir l'affichage, je ne sais pas si ce serait possible de les rapatrier localement pour les afficher dans le message.

Voilà pour les essentiels. Ce n'est pas une liste de course, mais dans un monde parfait, les CMS proposeraient ces options de base. On doit souvent faire avec des plugins, pour moi, ce n'est pas idéal pour les basiques du SEO. Il y a probablement d'autres priorités, mais si j'ai semé une petite graine quelque part, j'ai fait mon job. Ha ! Ha !

Edited on Jan 25, 2026 By Fred .

  • seo french
Avatar
Posts 344

Merci pour ces recommandations très complètes @Jiti ! Bonne nouvelle : tu vas être agréablement surpris parce que Flatboard a déjà mis en place une bonne partie de ce que tu suggères.

Balises title et meta descriptions

C'est exactement comme tu le préconises ! Flatboard utilise un système de variables personnalisables via SeoHelper. Tu peux construire tes titres et descriptions avec des variables comme {NOM_SITE}, {CATEGORIE}, {TITRE_SUJET}, etc. Les exemples que tu donnes (Accueil, Catégorie, Sujet) correspondent pile à ce qui est implémenté par défaut. Pour les descriptions de sujets, le système extrait bien les 150-160 premiers caractères du premier message, ce qui est nickel pour le SEO.

Balises canonical

Elles sont présentes sur toutes les pages et générées automatiquement. Flatboard utilise UrlHelper::full() pour construire les URL canoniques proprement, donc pas de risque de duplicate content ou de problèmes avec les paramètres UTM. Ta graine était déjà plantée ! 😄

Sitemap XML

Il y a un SitemapService qui génère le sitemap dynamiquement, accessible via /sitemap.xml. Il inclut l'accueil, les catégories publiques, les sujets publics et les tags. C'est du XML standard, exactement ce qu'il faut pour les moteurs de recherche.

Performances et images

Là aussi, c'est plutôt bien géré. Flatboard supporte déjà le WebP (ainsi que JPG, JPEG, PNG, GIF). Les images uploadées sont optimisées et redimensionnées côté serveur, et il y a du lazy loading implémenté pour améliorer le chargement initial.

Pour le hotlink d'images externes par contre, elles restent chargées depuis leur serveur d'origine - c'est effectivement un point qui pourrait être amélioré si on voulait les rapatrier localement, mais ça implique d'autres considérations (stockage, droits, etc.).

En résumé

Flatboard a fait ses devoirs sur le SEO de base ! Les fichiers clés sont SeoHelper.php et SitemapService.php si tu veux jeter un œil. Ta graine était déjà un arbre bien enraciné ! 🌳😉*

ps: j'ai édité tes 2 discussions juste pour rajouter le tag "french"

Edited on Jan 25, 2026 By Fred .

Avatar
Posts 8

Hello, petit retour après indexation du forum, Google Search Console ne me renvoie aucune erreur, vous avez fait un bon job !

Concernant les titres et meta, je pensais davantage des options dans l'admin permettant d'avoir la main dessus.
Notamment le title de l'accueil qui pourrait être autre chose que la tagline, ou les catégories qui pourraient être accompagnées de mots clés selon les niches.

J'imagine un title pour l'accueil qui pourrait être "Forum des passionnés de trucs et choses en Bretagne" alors que la tagline pourrait être "Le forum de l'association Machin".
Idem pour les catégories où on pourrait avoir besoin d'ajouter "Forum %categorie%" ou "Discussions entre Bretons autour de %categorie%", etc.

En tout cas, de ce que j'en vois, on a des bases solides sur ce sujet. Pour le business plan, c'est peut être une feature/plugin à intégrer dans la version premium ? Ce sont peut être des options qui s'adressent davantage aux professionnels ?

Edit : Les liens sur le profil et les messages dans le forum devraient être marqués avec un rel="ugc" (contenu généré par l'utilisateur) ou carrément un rel="nofollow" (non suivi par les moteurs de recherche).

Edited on Feb 21, 2026 By Jiti .

Avatar
Posts 344

Salut Jiti,
Merci pour le retour GSC, c'est rassurant ! 😄
Concernant le rel="ugc"/"nofollow", c'est déjà acté et sera intégré dans la prochaine version. La correction couvre les trois points d'entrée où un utilisateur peut insérer un lien externe : le champ site web du profil, le parser Markdown natif, et le plugins EasyMDE. Les liens internes (profils, discussions, catégories) ne sont pas touchés, ce qui est volontaire — ils doivent rester suivis pour le SEO interne.

Pour les titles/meta personnalisés par page, c'est une excellente idée et le cas d'usage que tu décris (title ≠ tagline, préfixe par catégorie…) est exactement ce que des admins de forums de niche attendent. Je note ça pour une future évolution / plugin — effectivement ça pourrait s'intégrer dans la version Pro, c'est le genre d'option qui s'adresse à des utilisateurs qui ont une vraie stratégie SEO.

Edited on Feb 21, 2026 By Fred .

Avatar
Posts 344

Bonsoir Jiti,

J'ai réalisé un plugin qui permet d'affiner le SEO pour Flatboard Pro (en cours de dev) et voilà ce q'u'il fait pour le moment :

Présentation

FlatSEO remplace la couche SEO native de Flatboard par une boîte à outils complète, pilotable entièrement depuis l'administration. Il fonctionne exclusivement via le système de hooks de Flatboard — aucun fichier template ni fichier cœur n'est modifié.

En un coup d'œil :

DomaineCe que FlatSEO fait
TitresFormat global, surcharge accueil, gabarit par catégorie, surcharge par page
MetaContrôle de la description à chaque niveau
Réseaux sociauxOpen Graph, Twitter/X Cards, Facebook App ID
Données structuréesJSON-LD : WebSite, Organization, BreadcrumbList, DiscussionForumPosting, QAPage, ProfilePage
SitemapSitemap XML multi-fichiers, invalidation automatique sur changement de contenu
Robots.txtÉditeur complet en texte libre
Redirections301/302/307/308, support regex, compteur de clics
AnalyticsGoogle Analytics 4, Google Tag Manager
VérificationGoogle, Bing, Yandex, Pinterest
IndexationRègles noindex pour recherche, profils, pages de tags
AuditScore SEO automatisé sur toutes les discussions
Suivi positionsHistorique manuel des positions par mot-clé avec graphique

Référence des fonctionnalités

1. Gestion des titres

Admin → FlatSEO → Onglet Général

Contrôle la construction de la balise <title> pour les pages de discussion et les autres pages standard.

Formats disponibles :

FormatExemple de résultat
{title} {sep} {site_name}Ma Discussion \| Mon Forum
{site_name} {sep} {title}Mon Forum \| Ma Discussion
{title}Ma Discussion

Séparateur — caractère(s) entre les deux parties. Courants : | - ·

Ce format s'applique aux pages de discussion et à toute page qui ne dispose pas d'une surcharge plus spécifique (voir ci-dessous).


2. SEO de la page d'accueil

Admin → FlatSEO → Onglet Général → Section Page d'accueil

Permet de définir un titre et une description pour la page d'accueil qui sont totalement indépendants de la tagline du forum configurée dans les paramètres généraux.

ChampRôle
Titre SEO de l'accueilTexte libre. Remplace la tagline du forum dans la balise <title>. Optimal : 30–60 caractères.
Meta description de l'accueilTexte libre. Apparaît dans les résultats Google. Optimal : 120–160 caractères.

Exemple concret :

Tagline du forum (dans les paramètres) : "Le forum de l'association Machin"
Titre SEO de l'accueil : "Forum des passionnés de trucs et choses en Bretagne"
→ Google voit le second ; la tagline reste inchangée partout ailleurs.

Laissez les deux champs vides pour conserver le comportement par défaut (tagline comme titre, description du forum comme meta description).


3. Gabarits pour les catégories

Admin → FlatSEO → Onglet Général → Section Catégories

Applique un gabarit global à toutes les pages de catégorie automatiquement, sans qu'il soit nécessaire de configurer chaque catégorie individuellement.

Token disponible : {category} — remplacé au moment de l'affichage par le nom lisible de la catégorie.

ChampValeur exempleRésultat pour la catégorie "Photographie"
Gabarit de titreForum {category} — Discussions en BretagneForum Photographie — Discussions en Bretagne
Gabarit de descriptionRejoignez les passionnés bretons autour de {category}. Partagez et progressez.Rejoignez les passionnés bretons autour de Photographie. Partagez et progressez.

Priorité : Une surcharge par page (voir ci-dessous) est toujours prioritaire sur le gabarit global. Utilisez les gabarits pour le cas général, les surcharges pour les exceptions.

Laissez les deux champs vides pour utiliser le format de titre global (section 1) et la description native de la catégorie.


4. Surcharges par page

Admin → FlatSEO → Onglet Surcharges par page

Contrôle SEO complet pour n'importe quelle page individuelle : titre, description, URL canonique, image OG, titre/description sociaux, directive robots et mot-clé principal.

Mode d'emploi

  1. Saisissez la clé de page dans le champ de saisie et cliquez sur Charger.
  2. Modifiez les champs qui apparaissent.
  3. Cliquez sur Enregistrer la surcharge.

Format des clés de page

Type de pageFormat de cléExemple
Discussiondiscussion:{id}discussion:42
Catégoriecategory:{slug}category:photographie
Page EasyPageseasypages:{slug}easypages:a-propos
Page d'accueilhomepagehomepage
Profil utilisateuruser:{username}user:alice
Résultats de recherchesearchsearch
Page de tagtag:{slug}tag:php

Champs disponibles par page

ChampDescription
Titre SEO<title> personnalisé. Laissez vide pour utiliser le gabarit/défaut. Max 120 caractères.
Meta descriptionBalise description personnalisée. Optimal : 120–160 caractères.
URL canoniqueSurcharge le lien canonique (utile pour le contenu dupliqué).
URL de l'image OGImage personnalisée pour les aperçus Facebook/Twitter sur cette page.
Titre OGTitre social, différent du titre SEO si nécessaire.
Description OGDescription sociale, différente de la meta description.
Robotsnoindex, follow / index, nofollow / noindex, nofollow — surcharge par page.
Mot-clé principalMots-clés séparés par des virgules. Utilisés par l'analyseur de score SEO.

Score SEO en direct

Cliquez sur Analyser le SEO après avoir renseigné les champs pour obtenir un score instantané (0–100) avec une note (A–F) et une liste de contrôles détaillée :

  • Longueur du titre (optimal : 30–60 caractères)
  • Longueur de la description (optimal : 120–160 caractères)
  • Nombre de mots dans le contenu (optimal : 300+ mots)
  • Mot-clé principal dans le titre
  • Mot-clé principal dans la description
  • Densité du mot-clé (optimal : 1–3 %)
  • Attributs alt des images

5. Open Graph & cartes sociales

Admin → FlatSEO → Onglet Réseaux sociaux & OG

Contrôle l'affichage des pages lors d'un partage sur les réseaux sociaux.

Twitter / X Cards

ParamètreOptions
Type de cartesummary_large_image (grande bannière, recommandé) / summary (miniature)
Pseudo TwitterPseudo Twitter/X de votre forum (sans @)

Facebook

ParamètreDescription
App ID FacebookActive Facebook Insights pour votre domaine. À récupérer dans Meta for Developers.

Profils sociaux

URLs enregistrées comme propriétés sameAs dans le schéma JSON-LD Organization. Réseaux supportés : Facebook, Twitter/X, LinkedIn, GitHub, YouTube, Instagram, Mastodon.

Image OG par défaut

Admin → FlatSEO → Onglet Général

Image de repli utilisée quand une page n'a pas d'image spécifique. Taille recommandée : 1200 × 630 px.


6. Données structurées — JSON-LD

Admin → FlatSEO → Onglet Schema / JSON-LD

Chaque type de schéma peut être activé ou désactivé indépendamment.

Type de schémaPagesCe qu'il fait
WebSite + SearchActionPage d'accueil uniquementActive le champ de recherche Google Sitelinks
OrganizationPage d'accueil uniquementDéclare votre forum comme organisation avec les liens sociaux (sameAs)
BreadcrumbListToutes les pagesFil d'Ariane dans les résultats de recherche
DiscussionForumPostingPages de discussionMarque les discussions comme contenu de forum pour les rich snippets
QAPageDiscussions avec une meilleure réponseSchéma Q&A complet avec réponse acceptée
ProfilePagePages de profil utilisateurSchéma Person/ProfilePage pour les profils membres

Tous les schémas sont injectés dans <head> via le hook seo.meta.after.


7. Sitemap XML

Admin → FlatSEO → Onglet Sitemap

FlatSEO remplace la route native /sitemap.xml de Flatboard et génère un sitemap XML multi-fichiers.

Structure

URLContenu
/sitemap.xmlIndex du sitemap listant tous les sous-sitemaps
/sitemap-discussions.xmlToutes les pages de discussion indexées
/sitemap-categories.xmlPages de catégorie
/sitemap-pages.xmlPages statiques EasyPages
/sitemap-users.xmlProfils utilisateurs (optionnel)

Configuration

ParamètreDescription
Inclure les discussionsActive/désactive les discussions dans le sitemap
Inclure les catégoriesActive/désactive les pages de catégorie
Inclure les tagsActive/désactive les pages de tags
Inclure EasyPagesActive/désactive les pages statiques (nécessite le plugin EasyPages)
Inclure les profilsActive/désactive les profils utilisateurs (désactivé par défaut)
Priorité des discussionsDéfaut : 0.8 (0.0 – 1.0)
Priorité des catégoriesDéfaut : 0.6
Fréquence de modificationalways / hourly / daily / weekly / monthly / yearly / never

Invalidation automatique

Le cache du sitemap est automatiquement vidé à chaque création, modification ou suppression d'une discussion. Un bouton Régénérer maintenant est également disponible manuellement.


8. Éditeur robots.txt

Admin → FlatSEO → Onglet Robots.txt

Éditeur texte complet pour votre fichier robots.txt. Les modifications sont enregistrées dans le répertoire de données du plugin et dans public/robots.txt pour l'accès direct par le serveur web.

Contenu par défaut généré par FlatSEO :

TEXT

User-agent: *
Allow: /

# Zones sensibles
Disallow: /stockage/
Disallow: /app/
Disallow: /admin/
Disallow: /api/
Disallow: /uploads/temp/

# SEO — éviter le contenu dupliqué
Disallow: /search

# Sitemap
Sitemap: https://votresite.com/sitemap.xml

Un guide de référence rapide (directives courantes, noms de bots connus) est affiché à côté de l'éditeur.


9. Redirections

Admin → FlatSEO → Onglet Redirections

Créez et gérez des redirections d'URL sans toucher aux fichiers de configuration du serveur.

Créer une redirection

ChampDescription
Chemin sourceChemin relatif ou motif regex à correspondre
DestinationChemin cible ou URL complète
Code HTTP301 (permanent) / 302 (temporaire) / 307 / 308
Regex ?Active le traitement de la source comme expression régulière
ActifActive ou met en pause la redirection sans la supprimer

Support des expressions régulières

Quand le mode regex est activé, les références arrière ($1, $2…) peuvent être utilisées dans la destination :

TEXT

Source :      ^/ancienne-categorie/(.+)$
Destination : /c/$1

Compteur de clics

Chaque redirection compte le nombre de fois qu'elle a été déclenchée. Utile pour identifier les anciennes URLs encore actives.


10. Analytics & vérification

Admin → FlatSEO → Onglet Analytics

Google Analytics 4

Renseignez votre Measurement ID (G-XXXXXXXXXX) pour injecter automatiquement le snippet GA4 avant </body>.

Google Tag Manager

Renseignez votre Container ID (GTM-XXXXXXX). GTM est prioritaire sur GA4 — si les deux sont configurés, seul GTM est injecté.

Vérification des moteurs de recherche

ServiceBalise meta injectée
Google Search Console<meta name="google-site-verification" …>
Bing Webmaster Tools<meta name="msvalidate.01" …>
Yandex Webmaster<meta name="yandex-verification" …>
Pinterest<meta name="p:domain_verify" …>

Toutes les balises de vérification sont injectées dans <head> via le hook seo.meta.after.


11. Règles noindex

Admin → FlatSEO → Onglet Avancé

Règles globales qui ajoutent automatiquement noindex, follow à des types de pages entiers. Les pages individuelles peuvent toujours surcharger ce comportement via un paramètre robots par page.

RèglePages concernéesDéfaut
Noindex pages de recherche/search et toutes les URLs de recherche✅ Activé
Noindex profils utilisateurs/user/* et /u/*❌ Désactivé
Noindex pages de tags/tag/* et /tags/*❌ Désactivé

12. Audit SEO

Admin → FlatSEO → Onglet Audit SEO

Analyse toutes les discussions et produit un score pour chacune d'elles.

Lancer un audit

Cliquez sur Lancer l'audit. FlatSEO récupère toutes les discussions, les analyse une par une et met les résultats en cache. Sur les forums importants (500+ discussions), cela peut prendre quelques secondes.

Système de notation

Chaque discussion est notée sur 100 et reçoit une note alphabétique :

NotePlage de score
A80 – 100
B60 – 79
C40 – 59
D20 – 39
F0 – 19

Contrôles effectués

  • Longueur du titre (optimal : 30–60 caractères)
  • Longueur de la meta description (optimal : 120–160 caractères)
  • Nombre de mots dans le contenu (optimal : 300+ mots)
  • Mot-clé principal présent dans le titre
  • Mot-clé principal présent dans la description
  • Densité du mot-clé dans le contenu (optimal : 1–3 %)
  • Images avec attributs alt
  • Statut noindex
  • Présence de meta personnalisées

Tableau de bord récapitulatif

Le haut de la page d'audit affiche :

  • Nombre total de discussions analysées
  • Décompte des pages Bon / Correct / Faible / noindex
  • Score moyen sur l'ensemble des discussions

Filtres

Filtrez les résultats par : Tous / Bon / Correct / Faible / noindex / Sans méta. Recherche textuelle par titre ou mot-clé.

Export

Téléchargez l'audit complet en CSV pour l'exploiter dans un tableur ou un outil de reporting.

Modification rapide

Chaque ligne dispose d'un bouton de modification qui ouvre le panneau de surcharge par page pré-rempli avec les données de cette discussion, permettant des corrections immédiates.


13. Suivi des positions

Admin → FlatSEO → Onglet Suivi des positions

Un tracker de positions léger et manuel. Le scraping automatisé des SERPs n'étant pas disponible, les positions sont enregistrées manuellement.

Ajouter un mot-clé

ChampDescription
Mot-cléLe terme de recherche à suivre. Séparez plusieurs mots-clés par une virgule pour les ajouter tous en une fois.
URL cibleOptionnel. La page spécifique que vous espérez voir classée pour ce mot-clé.
Moteur de rechercheGoogle / Bing / DuckDuckGo / Autre
NotesNotes internes optionnelles

Enregistrer une position

Cliquez sur le bouton + d'un mot-clé suivi, saisissez la position observée dans les résultats de recherche, sélectionnez la date et enregistrez. L'historique des positions est ajouté chronologiquement.

Graphique d'historique

Cliquez sur l'icône graphique pour afficher un graphique en courbe de l'historique des positions dans le temps. L'axe Y est inversé (position #1=haut=meilleur). Les points sont colorés : vert pour le top 3, bleu pour le top 10, jaune pour le top 30.

Badges de position

La position actuelle est affichée avec un badge coloré :

CouleurPlage
🟢 VertPosition 1–3
🔵 BleuPosition 4–10
🟡 JaunePosition 11–30
⚫ GrisPosition 31+

Règles de priorité

Quand plusieurs sources peuvent définir le titre ou la description d'une page, FlatSEO applique cet ordre de priorité strict :

TEXT

1. Surcharge par page (la plus haute — gagne toujours)
2. Titre/description global de l'accueil (accueil uniquement)
3. Gabarit global de catégorie avec token {category} (pages de catégorie uniquement)
4. Format de titre global title_format (toutes les autres pages)
5. Défaut Flatboard (aucune intervention de FlatSEO)

La même cascade s'applique aux meta descriptions.


Référence des clés de page

Motif d'URLCléType
/ ou /forumshomepagePage d'accueil
/d/{id}-{slug}discussion:{id}Discussion
/c/{slug}category:{slug}Catégorie
/u/{username}user:{username}Profil utilisateur
/page/{slug}easypages:{slug}EasyPages
/searchsearchRésultats de recherche
/tag/{slug}tag:{slug}Page de tag

Edited on Mar 01, 2026 By Fred .

Avatar
Posts 8

Hello !
Ça a l'air très cool, je n'en demandais pas tant ! :)

J'ai remarqué une petite chose concernant les URLs, il possible d'accéder à une même page via plusieurs slugs, par exemple :

flatboard.org/d/65-des-features-pour-le-seo
flatboard.org/d/65-nimportequoi

Je pense qu'une petite vérification de ce slug serait la bienvenue et faire une redirection 301 vers le bon lorsque cela ne correspond pas. L'idée est de toujours présenter la bonne URL à l'utilisateur, quoi qu'il arrive.






Edited on Mar 01, 2026 By Jiti .

  • Applaud(1)
    FredFred
Avatar
Posts 344

Bonsoir Jiti,

Tu as remonté un sacré bug, merci !

J’ai ajouté une nouvelle vérification dans show() : une fois la discussion résolue, on extrait le numéro et le slug depuis l’URL reçue, puis on les compare au slug canonique enregistré en base. Si ça ne correspond pas, on renvoie une redirection 301 vers l’URL correcte.
Le numéro reste l’identifiant de référence ; seule la partie textuelle (le slug) est contrôlée.

Celui-là m’était complètement passé à travers 😅

Visitor, reply to this topic…
Log in to reply
Navigation
7Posts
post #1
25 Jan 2026
ByUtilisateur