Panoramica SEO di Discourse (sitemap / robots.txt)

Discourse dispone di molte funzionalità SEO pronte all’uso. Grazie alle impostazioni predefinite sensate, i community manager possono concentrarsi sulla coltivazione della comunità e non dovrebbero sentirsi distratti dall’ottimizzazione per i motori di ricerca. Detto questo, ci sono alcune cose che puoi modificare, alcune cose che dovresti sapere e alcuni consigli e trucchi generali di seguito.

Vista statica per i motori di ricerca

Discourse offre una vista HTML statica senza JavaScript per aiutare i crawler web a indicizzare il tuo sito più rapidamente. Il contenuto tra la vista dinamica e quella statica è identico e nulla verrà omesso o rimosso quando il sito verrà analizzato dai motori di ricerca.

Ecco un confronto tra ciò che vede un utente e ciò che vede un motore di ricerca:

Elenco argomenti:

Argomento:

Anteprima della vista crawler

Puoi ispezionare ciò che Discourse fornisce ai crawler senza disabilitare JavaScript in due modi:

  1. Parametro URL ?print — Aggiungi ?print a qualsiasi URL di Discourse (ad esempio https://iltuoforum.com/t/un-argomento/123?print). Questo forza il layout del crawler per qualsiasi browser, indipendentemente dall’user-agent. È il modo più semplice per verificare cosa vedono i motori di ricerca.

  2. Intestazione della richiesta Discourse-Render: crawler — Invia questa intestazione HTTP con qualsiasi richiesta per forzare il layout del crawler. Utile per verifiche programmatiche o test con curl:

    curl -H "Discourse-Render: crawler" https://iltuoforum.com/t/un-argomento/123
    

Tag meta

In Discourse, i tag meta generici essenziali per il SEO sono generati automaticamente in base al contenuto presente nella pagina. Il tag titolo, ad esempio, è derivato dal titolo del sito o dell’argomento, e la descrizione è generata dal contenuto del primo post. Tuttavia, la personalizzazione su base pagina per i metadati è limitata. Per modificare questi valori, è necessario regolare le impostazioni o i campi di contenuto da cui vengono generati.

  • Le impostazioni del sito Titolo, Descrizione e Breve descrizione del sito
  • I nomi delle categorie
  • I titoli e i contenuti dei post
  • E così via :technologist:

Tag meta per i social media

Discourse genera automaticamente tag meta Open Graph e Twitter (X) Card per la condivisione sociale arricchita:

Tag Open Graph

  • og:site_name, og:type, og:url, og:title, og:description
  • og:image - Configurabile tramite l’impostazione opengraph_image
  • og:article:section - Percorso delle categorie
  • og:article:tag - Tag dell’argomento

Tag X (precedentemente Twitter) Card

  • twitter:card - “summary” o “summary_large_image”
  • twitter:title, twitter:description, twitter:image
  • twitter:label1/data1 - Stima del tempo di lettura
  • twitter:label2/data2 - Conteggio dei like

Impostazioni di configurazione

  • opengraph_image - Immagine OG predefinita per la condivisione sui social
  • x_summary_large_image - Immagine della card grande di X (precedentemente Twitter)

Struttura URL e codifica

Caratteri non latini e URL

Discourse, per impostazione predefinita, rimuove i caratteri non latini dagli URL degli argomenti quando la lingua è impostata su EN. Per evitare questo, puoi cambiare la lingua nella lingua non latina principale o modificare l’impostazione metodo di generazione dello slug da ASCII a encoded.

SEO internazionale e tag hreflang

Per le comunità multilingue, Discourse supporta i tag hreflang, aiutando i motori di ricerca a fornire la versione linguistica corretta agli utenti. Per abilitare questa funzione, devi configurare queste tre impostazioni (Amministratore → Impostazioni → Localizzazione):

  1. content_localization_enabled: Abilita il sistema di localizzazione dei contenuti.
  2. content_localization_supported_locales: Definisce i codici lingua supportati (ad esempio, en|es|fr).
  3. content_localization_crawler_param: Obbligatorio per generare tag <link rel="alternate" hreflang="..."> e riscrivere i link interni per i crawler con il parametro lingua tl (ad esempio, /t/argomento-esempio/123?tl=es).

Con queste impostazioni abilitate, Discourse genera link alternati per ogni lingua supportata, aiutando Google e altri motori di ricerca a fornire la versione linguistica corretta agli utenti.

Configurazione sottocartella vs sottodominio

Discourse preferisce i sottodomini alle sottocartelle a causa della loro semplicità tecnica. Google non ha una preferenza reale tra le due[1], ma Discourse consiglia vivamente di evitare le configurazioni a sottocartella a meno che non si abbia una profonda comprensione tecnica.

Se esegui Discourse in una sottocartella (ad esempio example.com/forum/), il tuo robots.txt di livello radice è gestito dal tuo server web principale, non da Discourse. Per aiutare a configurarlo correttamente, Discourse espone un endpoint JSON su /robots-builder.json che restituisce le regole di disallow esatte che Discourse genererebbe, limitate al percorso della tua sottocartella. Puoi utilizzarlo come input per uno script che scrive il tuo robots.txt di livello server.

Canonicalizzazione

Google è interessato a indicizzare le versioni canoniche delle pagine. In Discourse, per un argomento con più risposte, il link canonico (il primo post) viene passato a Google, che poi decide se indicizzarlo. Gli argomenti più lunghi di 20 post verranno paginati, con ogni pagina che è un link canonico contenente fino a 20 post.

Ad esempio, il tag canonico per l’ultima risposta in questo argomento sarà https://meta.discourse.org/t/try-out-the-new-sidebar-and-notification-menus/238821?page=12.

Impostazione allow_indexing_non_canonical_urls

L’impostazione nascosta del sito allow_indexing_non_canonical_urls (predefinito: true) controlla se le varianti di URL non canoniche ricevono un’intestazione X-Robots-Tag: noindex. Quando impostata su false, qualsiasi richiesta a un URL che differisce dall’URL canonico (ad esempio, un link diretto a un post come /t/slug/123/45 quando il canonico è /t/slug/123?page=3) verrà servita con un’intestazione noindex.

Argomenti incorporati

Quando gli argomenti sono incorporati su siti web esterni, puoi utilizzare l’impostazione embed_set_canonical_url per puntare l’URL canonico alla posizione originale di incorporamento. Questo previene problemi di contenuti duplicati quando lo stesso argomento appare sia sul tuo forum che sul sito di incorporamento.

Markup Schema

Discourse utilizza un’esteso markup schema.org per aiutare i motori di ricerca a comprendere i tuoi contenuti. Ogni tipo di contenuto include dati strutturati ricchi che appaiono nei risultati di ricerca e aiutano la visibilità.

Argomenti

Utilizza lo schema DiscussionForumPosting per rappresentare il thread di discussione principale e include:

  • headline - Il titolo dell’argomento
  • datePublished - Quando l’argomento è stato creato
  • articleSection - Il nome della categoria
  • keywords - Tutti i tag dell’argomento
  • publisher - Le informazioni del tuo sito/organizzazione
  • author - Le informazioni dell’autore originale

Post e risposte

I singoli post all’interno degli argomenti utilizzano lo schema Comment, includendo:

  • author - Autore del post con nome e link al profilo
  • text - Il contenuto del post
  • datePublished e dateModified - Timestamp di creazione e modifica
  • interactionStatistic - Conteggio dei like utilizzando InteractionCounter con tipo LikeAction

Breadcrumb

La navigazione delle categorie utilizza lo schema BreadcrumbList che appare nei risultati di ricerca, mostrando il percorso gerarchico della categoria. Ogni breadcrumb include:

  • itemListElement - Link individuali delle categorie
  • position - Ordine nella gerarchia
  • Colori delle categorie per distinzione visiva

Categorie ed elenchi argomenti

Le pagine delle categorie e le viste degli elenchi argomenti utilizzano lo schema ItemList:

  • Ordinato con ItemListOrderDescending per l’ordinamento cronologico
  • Include metadati di posizione per ogni elemento
  • Aiuta i motori di ricerca a comprendere la struttura e la gerarchia dei contenuti

Homepage

La homepage del sito include dati strutturati JSON-LD per WebSite con SearchAction, che abilita la barra di ricerca di Google ad apparire direttamente nei risultati di ricerca per il tuo sito.

Pagina Chi siamo

La tua pagina Chi siamo utilizza lo schema pagina About con informazioni Organization, aiutando i motori di ricerca a comprendere l’identità e lo scopo della tua comunità.

Sitemap

Discourse incorpora un indice sitemap situato su /sitemap.xml che è abilitato per impostazione predefinita tramite l’impostazione enable sitemap. Questo facilita una migliore indicizzazione da parte dei motori di ricerca. Ci sono anche altre sitemap:

  1. Sitemap Recente (/sitemap_recent.xml) - Argomenti aggiornati negli ultimi 3 giorni (memorizzata nella cache per 1 ora)
  2. Sitemap News (/news.xml) - Argomenti aggiornati nelle ultime 72 ore in formato Google News (memorizzata nella cache per 5 minuti), utile per comunità orientate alle notizie
  3. Sitemap Paginate - Catalogo completo degli argomenti diviso in pagine (memorizzate nella cache per 24 ore)

Le sitemap vengono rigenerate automaticamente ogni ora da un lavoro pianificato e includono timestamp di ultima modifica. Puoi configurare il numero di argomenti per pagina sitemap tramite l’impostazione sitemap_page_size (predefinito: 10.000).

Crawler web

I crawler web, noti anche come robot o bot, sono essenziali per l’indicizzazione delle pagine web e per rendere i tuoi contenuti visibili. Discourse utilizza una sofisticata rilevazione dei crawler per servire contenuti ottimizzati e gestire efficacemente il traffico dei bot.

Rilevazione crawler

Discourse rileva e gestisce automaticamente vari tipi di crawler, inclusi:

  • Motori di ricerca: Googlebot, Bingbot, DuckDuckBot e altri
  • Social media: Facebookbot, Twitterbot, LinkedInBot, Discordbot
  • Crawler AI: GPTBot, ClaudeBot, Anthropic-AI, BrightBot
  • Servizi di archiviazione: Wayback Machine, Archive.org
  • Servizi di monitoraggio: Lighthouse, Strumento di ispezione Google

Quando viene rilevato un crawler, Discourse serve contenuti ottimizzati e aggiunge intestazioni di risposta speciali:

  • X-Discourse-Crawler-View: true - Indica contenuti ottimizzati per i crawler
  • Intestazioni Last-Modified - Abilita il re-crawling efficiente

Gestione del traffico crawler

Alcuni crawler possono essere eccessivamente entusiasti, colpendo il tuo forum con molte richieste. Discourse fornisce diverse impostazioni per gestire il comportamento dei crawler:

  • blocked_crawler_user_agents - Blocca completamente crawler specifici (la lista predefinita di blocco include: mauibot, semrushbot, ahrefsbot, blexbot, seo spider)
  • slow_down_crawler_user_agents - Limita la frequenza dei crawler invece di bloccarli (la lista predefinita include crawler AI come GPTBot, ClaudeBot)
  • allowed_crawler_user_agents - :warning: Pericolo: impostare questo bloccherà TUTTI i crawler non elencati esplicitamente, incluso Googlebot. Utilizza questa opzione solo se intendi limitare il crawling a un set specifico di bot. Ha la precedenza assoluta su blocked_crawler_user_agents. Lascia vuoto a meno che tu non abbia un motivo specifico per usarlo.

Intestazioni noindex automatiche

Oltre all’impostazione globale allow_index_in_robots_txt, Discourse aggiunge automaticamente intestazioni di risposta X-Robots-Tag: noindex a diversi tipi di pagine:

  • Pagine di ricerca — sempre noindexed (i risultati di ricerca non sono utili come pagine indicizzate)
  • Pagine badge — sempre noindexed
  • Pagine gruppi — sempre noindexed
  • Pagine profilo utente — sempre noindexed
  • Pagine filtro/intersezione tag — noindexed (le pagine indice e mostra dei tag sono esenti)
  • Feed RSS/Atom — sempre noindexed

Queste vengono applicate a livello di controller e non sono configurabili. Assicurano che pagine effimere, a basso valore o con contenuti duplicati non inquinino gli indici dei motori di ricerca.

Analisi crawler

Gli amministratori possono monitorare l’attività dei crawler in Amministratore → Report → Crawler Web per vedere quali bot stanno accedendo al tuo sito e con quale frequenza.

Funzionalità SEO aggiuntive

Guida per i crawler AI tramite llms.txt

Discourse supporta la convenzione llms.txt, che fornisce un modo standard per guidare i crawler basati su LLM (come quelli utilizzati dagli assistenti AI) riguardo ai contenuti e alla struttura del tuo sito.

Per abilitarlo:

  1. Prepara un file .txt o .md (max 512 KB) che descriva il tuo sito per i crawler LLM
  2. Caricalo tramite l’impostazione del sito llms_txt (Amministratore → Impostazioni → Sicurezza)
  3. Verrà servito su https://iltuoforum.com/llms.txt

:information_source: Il file llms.txt è distinto da robots.txt ed è progettato specificamente per guidare i crawler basati su LLM. Invece di fornire regole di accesso, fornisce contesto semantico…descrivendo cos’è il tuo sito, quali contenuti contiene e come un assistente AI dovrebbe comprenderlo e utilizzarlo. Pensa a robots.txt come a dire ai bot ‘dove possono andare’, e a llms.txt come a dire all’AI ‘cosa sta guardando e perché è importante’.

Integrazione OpenSearch

Discourse fornisce una descrizione OpenSearch su /opensearch.xml, abilitando l’integrazione della ricerca del browser. Gli utenti possono aggiungere il tuo forum direttamente all’elenco dei motori di ricerca del loro browser.

Feed RSS

Ogni argomento ha un feed RSS disponibile su /t/{slug}/{id}.rss, che include:

  • Titolo e descrizione dell’argomento
  • Tutti i post/risposte con informazioni sull’autore
  • Date di pubblicazione e orari di ultimo aggiornamento
  • Categorie e tag

:warning: Nota: I percorsi dei feed RSS (/t/*/*.rss, /c/*.rss) sono disabilitati in robots.txt per l’agente wildcard generale * per prevenire l’indicizzazione di contenuti duplicati da parte della maggior parte dei crawler. Googlebot è esplicitamente esentato da questa restrizione e può accedere ai feed RSS.

Verifica sito Google

Utilizza l’impostazione google_site_verification_token per aggiungere i tag meta di verifica di Google Search Console senza modificare i template dei temi.

App web progressiva (PWA)

Discourse genera un Manifest App Web su /manifest.json per la scoperta e i prompt di installazione dell’app mobile.

Migrazioni e reindirizzamenti URL

La funzione permalink viene utilizzata per reindirizzare gli URL vecchi, con l’obiettivo di preservare il SEO, prevenire errori “Pagina non trovata” e assistere i motori di ricerca con i metadati corretti per un’indicizzazione più facile.

Se il sito della tua comunità viene migrato a Discourse dal nostro team, i reindirizzamenti URL sono inclusi a meno che non ci siano valide ragioni per non farlo.

Se stai utilizzando uno dei script di importazione esistenti, dovresti assicurarti che lo script gestisca questo[2]. Puoi aggiungere manualmente i permalink dal tuo pannello di amministrazione, in PersonalizzaPermalink.

Metodi di de-indicizzazione

Per rimuovere pagine dall’indice di Google, puoi rimuovere i contenuti o bloccare l’accesso a una pagina. A seconda delle tue esigenze, puoi rendere l’intero sito privato[3]. Puoi escludere argomenti eliminandoli o mettendoli in categorie ristrette. Gli argomenti nascosti non sono indicizzati per impostazione predefinita, ma possono esserlo se c’è un link pubblico da qualche parte che reindirizza ad essi.

Per una rimozione duratura, l’uso dello strumento Rimozioni in Google Search Console è la soluzione per mantenere le pagine fuori dai risultati di ricerca. Scopri di più su Remove information on your website from Google - Search Console Help


  1. ↩︎

  2. Cercando la stringa permalink nello script di importazione dovresti ottenere queste informazioni. ↩︎

  3. Cerca l’impostazione login richiesto. ↩︎

21 Mi Piace