Aperçu du SEO de Discourse (sitemap / robots.txt)

Discourse dispose de nombreuses fonctionnalités SEO qui fonctionnent immédiatement après l’installation. Grâce à nos paramètres par défaut judicieux, les gestionnaires de communauté peuvent se concentrer sur le développement de leur communauté sans se sentir distraits par l’optimisation pour les moteurs de recherche. Cela dit, il y a certaines choses que vous pouvez modifier, certaines choses que vous devez connaître, ainsi que quelques conseils et astuces généraux ci-dessous.

Vue statique pour les moteurs de recherche

Discourse propose une vue HTML statique sans JavaScript pour aider les robots d’indexation à indexer votre site plus rapidement. Le contenu entre la vue dynamique et la vue statique est identique et rien ne sera omis ou supprimé lorsque le site sera exploré par les moteurs de recherche.

Voici une comparaison entre ce qu’un utilisateur voit et ce qu’un moteur de recherche voit :

Liste des sujets :

Sujet :

Prévisualisation de la vue du robot

Vous pouvez inspecter ce que Discourse sert aux robots sans désactiver JavaScript de deux manières :

  1. Paramètre d’URL ?print — Ajoutez ?print à n’importe quelle URL Discourse (par exemple https://yourforum.com/t/some-topic/123?print). Cela force la mise en page du robot pour n’importe quel navigateur, indépendamment de l’agent utilisateur. C’est la manière la plus simple d’auditer ce que les moteurs de recherche voient.

  2. En-tête de requête Discourse-Render: crawler — Envoyez cet en-tête HTTP avec n’importe quelle requête pour forcer la mise en page du robot. Utile pour l’audit programmatique ou les tests avec curl :

    curl -H "Discourse-Render: crawler" https://yourforum.com/t/some-topic/123
    

Balises meta

Dans Discourse, les balises meta génériques essentielles au SEO sont générées automatiquement en fonction du contenu présent sur la page. La balise title, par exemple, est dérivée du titre du site ou du sujet, et la description est générée à partir du contenu du premier message. Cependant, la personnalisation au niveau de chaque page pour les métadonnées est limitée. Pour modifier ces valeurs, vous devez ajuster les paramètres ou les champs de contenu à partir desquels elles sont générées.

  • Les paramètres de site Titre, Description et Description courte du site
  • Les noms de catégorie
  • Les titres et contenus des messages
  • Et ainsi de suite :technologist:

Balises meta pour les réseaux sociaux

Discourse génère automatiquement les balises meta Open Graph et Twitter (X) Card pour un partage social enrichi :

Balises Open Graph

  • og:site_name, og:type, og:url, og:title, og:description
  • og:image - Configurable via le paramètre opengraph_image
  • og:article:section - Fil d’Ariane des catégories
  • og:article:tag - Tags du sujet

Balises de carte X (anciennement Twitter)

  • twitter:card - “summary” ou “summary_large_image”
  • twitter:title, twitter:description, twitter:image
  • twitter:label1/data1 - Estimation du temps de lecture
  • twitter:label2/data2 - Nombre de “J’aime”

Paramètres de configuration

  • opengraph_image - Image OG par défaut pour le partage social
  • x_summary_large_image - Image de grande carte X (anciennement Twitter)

Structure et encodage des URL

Caractères non latins et URL

Par défaut, Discourse supprime les caractères non latins des URL des sujets lorsque la locale est définie sur EN. Pour éviter cela, vous pouvez changer la locale vers la langue non latine principale ou modifier le paramètre méthode de génération de slug de ASCII à encoded.

SEO international et balises hreflang

Pour les communautés multilingues, Discourse prend en charge les balises hreflang, aidant les moteurs de recherche à servir la bonne version linguistique aux utilisateurs. Pour activer cela, vous devez configurer ces trois paramètres (Admin → Settings → Localization) :

  1. content_localization_enabled : Active le système de localisation du contenu.
  2. content_localization_supported_locales : Définit les codes de locale pris en charge (par exemple, en|es|fr).
  3. content_localization_crawler_param : Requis pour générer les balises <link rel="alternate" hreflang="..."> et réécrire les liens internes pour les robots avec le paramètre de locale tl (par exemple, /t/example-topic/123?tl=es).

Avec ces paramètres activés, Discourse génère des liens alternatifs pour chaque langue prise en charge, aidant Google et autres moteurs de recherche à servir la bonne version linguistique aux utilisateurs.

Configuration sous-dossier vs sous-domaine

Discourse privilégie les sous-domaines aux sous-dossiers en raison de leur simplicité technique. Google n’a pas vraiment de préférence entre les deux[1], mais Discourse recommande fortement d’éviter les configurations sous-dossier à moins d’avoir une compréhension technique approfondie.

Si vous exécutez Discourse dans un sous-dossier (par exemple example.com/forum/), votre robots.txt de niveau racine est géré par votre serveur web principal, pas par Discourse. Pour vous aider à le configurer correctement, Discourse expose un point de terminaison JSON à /robots-builder.json qui retourne les règles de refus exactes que Discourse générerait, limitées à votre chemin de sous-dossier. Vous pouvez utiliser cela comme entrée pour un script qui écrit votre robots.txt au niveau du serveur.

Canonicalisation

Google est soucieux d’indexer les versions canoniques des pages. Dans Discourse, pour un sujet avec plusieurs réponses, le lien canonique (le premier message) est transmis à Google, qui prend ensuite la décision d’indexation. Les sujets de plus de 20 messages seront paginés, chaque page étant un lien canonique contenant jusqu’à 20 messages.

Par exemple, la balise canonique pour la dernière réponse sur ce sujet sera https://meta.discourse.org/t/try-out-the-new-sidebar-and-notification-menus/238821?page=12.

Paramètre allow_indexing_non_canonical_urls

Le paramètre de site caché allow_indexing_non_canonical_urls (par défaut : true) contrôle si les variantes d’URL non canoniques reçoivent un en-tête X-Robots-Tag: noindex. Lorsqu’il est défini sur false, toute requête vers une URL qui diffère de l’URL canonique (par exemple, un lien direct vers un message comme /t/slug/123/45 lorsque le canonique est /t/slug/123?page=3) sera servie avec un en-tête noindex.

Sujets intégrés

Lorsque les sujets sont intégrés sur des sites web externes, vous pouvez utiliser le paramètre embed_set_canonical_url pour pointer l’URL canonique vers l’emplacement d’intégration original. Cela empêche les problèmes de contenu en double lorsque le même sujet apparaît à la fois sur votre forum et sur le site d’intégration.

Balisage Schema

Discourse utilise un balisage schema.org étendu pour aider les moteurs de recherche à comprendre votre contenu. Chaque type de contenu inclut des données structurées riches qui apparaissent dans les résultats de recherche et aident à la découvrabilité.

Sujets

Utilisez le schéma DiscussionForumPosting pour représenter le fil de discussion principal et inclut :

  • headline - Le titre du sujet
  • datePublished - Quand le sujet a été créé
  • articleSection - Le nom de la catégorie
  • keywords - Tous les tags du sujet
  • publisher - Les informations de votre site/organisation
  • author - Les informations de l’auteur original

Messages et réponses

Les messages individuels dans les sujets utilisent le schéma Comment, incluant :

  • author - Auteur du message avec nom et lien de profil
  • text - Le contenu du message
  • datePublished et dateModified - Horodatages de création et de modification
  • interactionStatistic - Comptages de “J’aime” utilisant InteractionCounter avec le type LikeAction

Fil d’Ariane

La navigation par catégories utilise le schéma BreadcrumbList qui apparaît dans les résultats de recherche, montrant le chemin hiérarchique des catégories. Chaque élément du fil d’Ariane inclut :

  • itemListElement - Liens de catégorie individuels
  • position - Ordre dans la hiérarchie
  • Couleurs de catégorie pour la distinction visuelle

Catégories et listes de sujets

Les pages de catégorie et les vues de liste de sujets utilisent le schéma ItemList :

  • Triés avec ItemListOrderDescending pour le tri chronologique
  • Incluent les métadonnées de position pour chaque élément
  • Aident les moteurs de recherche à comprendre la structure et la hiérarchie du contenu

Page d’accueil

La page d’accueil du site inclut des données structurées JSON-LD pour WebSite avec SearchAction, ce qui permet à la boîte de recherche Google d’apparaître directement dans les résultats de recherche pour votre site.

Page À propos

Votre page À propos utilise le schéma de page About avec des informations Organization, aidant les moteurs de recherche à comprendre l’identité et le but de votre communauté.

Plan du site

Discourse intègre un index de plan du site situé à /sitemap.xml qui est activé par défaut via le paramètre enable sitemap. Cela facilite une meilleure indexation par les moteurs de recherche. Il y a d’autres plans de site également :

  1. Plan du site récent (/sitemap_recent.xml) - Sujets remontés au cours des 3 derniers jours (mis en cache pendant 1 heure)
  2. Plan du site actualités (/news.xml) - Sujets remontés au cours des 72 dernières heures au format Google Actualités (mis en cache pendant 5 minutes), utile pour les communautés orientées actualités
  3. Plans de site paginés - Catalogue complet des sujets divisé en pages (mis en cache pendant 24 heures)

Les plans de site sont régénérés automatiquement chaque heure par un travail planifié et incluent les horodatages de dernière modification. Vous pouvez configurer le nombre de sujets par page de plan du site via le paramètre sitemap_page_size (par défaut : 10 000).

Robots d’exploration web

Les robots d’exploration web, également appelés robots ou bots, sont essentiels pour l’indexation des pages web et rendre votre contenu découvrable. Discourse utilise une détection de robot sophistiquée pour servir du contenu optimisé et gérer efficacement le trafic des bots.

Détection des robots

Discourse détecte et gère automatiquement divers types de robots, y compris :

  • Moteurs de recherche : Googlebot, Bingbot, DuckDuckBot, et autres
  • Réseaux sociaux : Facebookbot, Twitterbot, LinkedInBot, Discordbot
  • Robots IA : GPTBot, ClaudeBot, Anthropic-AI, BrightBot
  • Services d’archivage : Wayback Machine, Archive.org
  • Services de surveillance : Lighthouse, Outil d’inspection Google

Lorsqu’un robot est détecté, Discourse sert du contenu optimisé et ajoute des en-têtes de réponse spéciaux :

  • X-Discourse-Crawler-View: true - Indique un contenu optimisé pour les robots
  • En-têtes Last-Modified - Permet une ré-exploration efficace

Gestion du trafic des robots

Certains robots peuvent être trop enthousiastes, bombardant votre forum de nombreuses requêtes. Discourse fournit plusieurs paramètres pour gérer le comportement des robots :

  • blocked_crawler_user_agents - Bloquer complètement des robots spécifiques (la liste de blocage par défaut inclut : mauibot, semrushbot, ahrefsbot, blexbot, seo spider)
  • slow_down_crawler_user_agents - Limiter la vitesse des robots plutôt que de les bloquer (la liste par défaut inclut les robots IA comme GPTBot, ClaudeBot)
  • allowed_crawler_user_agents - :warning: Danger : définir cela bloquera TOUS les robots non explicitement listés, y compris Googlebot. N’utilisez cela que si vous avez l’intention de restreindre l’exploration à un ensemble spécifique de bots. Il a la priorité absolue sur blocked_crawler_user_agents. Laissez vide sauf si vous avez une raison spécifique de l’utiliser.

En-têtes noindex automatiques

Au-delà du paramètre global allow_index_in_robots_txt, Discourse ajoute automatiquement des en-têtes de réponse X-Robots-Tag: noindex à plusieurs types de pages :

  • Pages de recherche — toujours noindexées (les résultats de recherche ne sont pas utiles en tant que pages indexées)
  • Pages de badges — toujours noindexées
  • Pages de groupe — toujours noindexées
  • Pages de profil utilisateur — toujours noindexées
  • Pages de filtre/intersection de tags — noindexées (les pages d’index et d’affichage des tags sont exemptées)
  • Flux RSS/Atom — toujours noindexées

Celles-ci sont appliquées au niveau du contrôleur et ne sont pas configurables. Elles assurent que les pages éphémères, à faible valeur ou en double contenu ne polluent pas les index des moteurs de recherche.

Analytique des robots

Les administrateurs peuvent surveiller l’activité des robots dans Admin → Reports → Web Crawlers pour voir quels bots accèdent à votre site et à quelle fréquence.

Fonctionnalités SEO supplémentaires

Orientation des robots IA via llms.txt

Discourse prend en charge la convention llms.txt, qui fournit une manière standard de guider les robots basés sur les LLM (comme ceux utilisés par les assistants IA) concernant le contenu et la structure de votre site.

Pour l’activer :

  1. Préparez un fichier .txt ou .md (max 512 Ko) décrivant votre site pour les robots LLM
  2. Téléchargez-le via le paramètre de site llms_txt (Admin → Settings → Security)
  3. Il sera servi à https://yourforum.com/llms.txt

:information_source: Le llms.txt est distinct de robots.txt et est spécifiquement conçu pour guider les robots basés sur les LLM. Plutôt que de fournir des règles d’accès, il fournit un contexte sémantique… décrivant ce qu’est votre site, quel contenu il contient et comment un assistant IA devrait le comprendre et l’utiliser. Considérez robots.txt comme disant aux bots « où ils peuvent aller », et llms.txt comme disant à l’IA « ce qu’elle regarde et pourquoi c’est important ».

Intégration OpenSearch

Discourse fournit une description OpenSearch à /opensearch.xml, permettant l’intégration de la recherche du navigateur. Les utilisateurs peuvent ajouter votre forum directement à la liste des moteurs de recherche de leur navigateur.

Flux RSS

Chaque sujet a un flux RSS disponible à /t/{slug}/{id}.rss, qui inclut :

  • Titre et description du sujet
  • Tous les messages/réponses avec informations de l’auteur
  • Dates de publication et dernières mises à jour
  • Catégories et tags

:warning: Note : Les chemins de flux RSS (/t/*/*.rss, /c/*.rss) sont interdits dans robots.txt pour l’agent générique * afin d’empêcher l’indexation de contenu en double par la plupart des robots. Googlebot est explicitement exempté de cette restriction et peut accéder aux flux RSS.

Vérification du site Google

Utilisez le paramètre google_site_verification_token pour ajouter les balises meta de vérification Google Search Console sans modifier les modèles de thème.

Application web progressive (PWA)

Discourse génère un manifeste d’application web à /manifest.json pour la découverte et les invites d’installation d’applications mobiles.

Migrations et redirections d’URL

La fonctionnalité de permalien est utilisée pour rediriger les anciennes URL, visant à préserver le SEO, à prévenir les erreurs “Page non trouvée” et à aider les moteurs de recherche avec les bonnes métadonnées pour une indexation plus facile.

Si le site de votre communauté est migré vers Discourse par notre équipe, les redirections d’URL sont incluses sauf s’il y a des raisons valables de ne pas le faire.

Si vous utilisez l’un des scripts d’importation existants, vous devez vous assurer que le script gère cela[2]. Vous pouvez ajouter manuellement des permaliens depuis votre panneau d’administration, dans CustomizePermalinks.

Méthodes de désindexation

Pour retirer des pages de l’index de Google, vous pouvez soit supprimer le contenu, soit bloquer l’accès à une page. Selon vos besoins, vous pouvez rendre votre site entier privé[3]. Vous pouvez exclure des sujets en les supprimant ou en les plaçant dans des catégories restreintes. Les sujets cachés ne sont pas indexés par défaut, mais ils peuvent l’être s’il y a un lien public quelque part qui redirige vers eux.

Pour une suppression durable, l’utilisation de l’outil Suppressions dans Google Search Console est la solution pour garder les pages hors des résultats de recherche. En savoir plus sur Remove information on your website from Google - Search Console Help


  1. ↩︎

  2. La recherche de la chaîne de permalien dans le script d’importation devrait vous donner cette information. ↩︎

  3. Recherchez le paramètre login required. ↩︎

21 « J'aime »