Обзор SEO для Discourse (sitemap / robots.txt)

Discourse имеет множество SEO-функций, которые работают «из коробки». Благодаря разумным настройкам по умолчанию, модераторы сообществ могут сосредоточиться на развитии сообщества, не отвлекаясь на оптимизацию для поисковых систем. Тем не менее, ниже приведены некоторые параметры, которые можно изменить, а также полезная информация и общие советы.

Статический вид для поисковых систем

В Discourse есть статический HTML-вид без JavaScript, который помогает веб-паукам быстрее индексировать ваш сайт. Контент в динамическом и статическом виде идентичен, и при сканировании сайта поисковыми системами ничего не будет пропущено или удалено.

Ниже приведено сравнение того, что видит пользователь и что видит поисковая система:

Список тем:

Тема:

Предпросмотр вида для пауков

Вы можете проверить, какой контент Discourse отправляет паукам, не отключая JavaScript, двумя способами:

  1. Параметр URL ?print — Добавьте ?print к любому URL-адресу Discourse (например, https://yourforum.com/t/some-topic/123?print). Это принудительно активирует макет для пауков в любом браузере, независимо от user-agent. Это самый простой способ проверить, что видят поисковые системы.

  2. Заголовок запроса Discourse-Render: crawler — Отправьте этот HTTP-заголовок с любым запросом, чтобы принудительно активировать макет для пауков. Полезно для программной проверки или тестирования с помощью curl:

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

Мета-теги

В Discourse общие мета-теги, необходимые для SEO, автоматически генерируются на основе контента на странице. Например, тег заголовка (title) формируется из названия сайта или темы, а описание генерируется из содержимого первого сообщения. Однако возможности индивидуальной настройки метаданных для каждой страницы ограничены. Чтобы изменить эти значения, необходимо настроить соответствующие параметры или поля контента, из которых они генерируются.

  • Настройки сайта Заголовок, Описание и Краткое описание сайта
  • Названия категорий
  • Заголовки и содержимое сообщений
  • И так далее :technologist:

Мета-теги для социальных сетей

Discourse автоматически генерирует мета-теги Open Graph и Twitter (X) Card для богатого обмена в социальных сетях:

Теги Open Graph

  • og:site_name, og:type, og:url, og:title, og:description
  • og:image — Настраивается через параметр opengraph_image
  • og:article:section — Хлебные крошки категории
  • og:article:tag — Теги темы

Теги карточек X (ранее Twitter)

  • twitter:card — “summary” или “summary_large_image”
  • twitter:title, twitter:description, twitter:image`
  • twitter:label1/data1 — Оценка времени чтения
  • twitter:label2/data2 — Количество лайков

Настройки конфигурации

  • opengraph_image — Изображение OG по умолчанию для обмена в соцсетях
  • x_summary_large_image — Большое изображение карточки X (ранее Twitter)

Структура URL и кодирование

Нелатинские символы и URL

По умолчанию Discourse удаляет нелатинские символы из URL-адресов тем, если локаль установлена на английский (EN). Чтобы избежать этого, вы можете изменить локаль на основной нелатинский язык или изменить параметр slug generation method (метод генерации слагa) с ASCII на encoded.

Международное SEO и теги hreflang

Для многоязычных сообществ Discourse поддерживает теги hreflang, которые помогают поисковым системам показывать пользователям правильную языковую версию. Чтобы включить эту функцию, вы обязаны настроить три параметра (Админ → Настройки → Локализация):

  1. content_localization_enabled: Включает систему локализации контента.
  2. content_localization_supported_locales: Определяет поддерживаемые коды локалей (например, en|es|fr).
  3. content_localization_crawler_param: Обязательно для генерации тегов <link rel="alternate" hreflang="..."> и переписывания внутренних ссылок для пауков с параметром локали tl (например, /t/example-topic/123?tl=es).

При включении этих настроек Discourse генерирует альтернативные ссылки для каждого поддерживаемого языка, помогая Google и другим поисковым системам показывать пользователям правильную языковую версию.

Подпапки против поддоменов

Discourse предпочитает поддомены подпапкам из-за технической простоты. Google не выражает явного предпочтения между ними[1], но Discourse настоятельно рекомендует избегать настройки через подпапки, если у вас нет глубоких технических знаний.

Если вы запускаете Discourse в подпапке (например, example.com/forum/), ваш корневой robots.txt управляется вашим основным веб-сервером, а не Discourse. Чтобы помочь правильно его настроить, Discourse предоставляет JSON-эндпоинт /robots-builder.json, который возвращает точные правила запрета, которые сгенерировал бы Discourse, ограниченные путем вашей подпапки. Вы можете использовать это как входные данные для скрипта, который записывает ваш серверный robots.txt.

Канонические URL

Google стремится индексировать канонические версии страниц. В Discourse для темы с множеством ответов каноническая ссылка (первое сообщение) передается Google, который затем принимает решение об индексации. Темы длиннее 20 сообщений разбиваются на страницы, каждая из которых является канонической ссылкой, содержащей до 20 сообщений.

Например, канонический тег для последнего ответа в этой теме будет https://meta.discourse.org/t/try-out-the-new-sidebar-and-notification-menus/238821?page=12.

Параметр allow_indexing_non_canonical_urls

Скрытый параметр сайта allow_indexing_non_canonical_urls (по умолчанию: true) управляет тем, получают ли неканонические варианты URL-адресов заголовок X-Robots-Tag: noindex. Если установлено значение false, любой запрос к URL-адресу, который отличается от канонического URL (например, прямая ссылка на сообщение /t/slug/123/45, когда канонический URL — /t/slug/123?page=3), будет обслуживаться с заголовком noindex.

Встраиваемые темы

Когда темы встраиваются на внешних сайтах, вы можете использовать параметр embed_set_canonical_url, чтобы указать канонический URL на исходное место встраивания. Это предотвращает проблемы с дублирующимся контентом, когда одна и та же тема появляется как на вашем форуме, так и на сайте-встраивателе.

Разметка Schema

Discourse использует обширную разметку schema.org, чтобы помочь поисковым системам понять ваш контент. Каждый тип контента включает богатые структурированные данные, которые отображаются в результатах поиска и способствуют его обнаружению.

Темы

Используется схема DiscussionForumPosting для представления основной нити обсуждения, которая включает:

  • headline — Заголовок темы
  • datePublished — Дата создания темы
  • articleSection — Название категории
  • keywords — Все теги темы
  • publisher — Информация о вашем сайте/организации
  • author — Информация об авторе первого сообщения

Сообщения и ответы

Отдельные сообщения в темах используют схему Comment, которая включает:

  • author — Автор сообщения с именем и ссылкой на профиль
  • text — Содержимое сообщения
  • datePublished и dateModified — Временные метки создания и редактирования
  • interactionStatistic — Количество лайков с использованием InteractionCounter типа LikeAction

Хлебные крошки

Навигация по категориям использует схему BreadcrumbList, которая отображается в результатах поиска, показывая иерархию категорий. Каждый элемент хлебных крошек включает:

  • itemListElement — Отдельные ссылки на категории
  • position — Порядок в иерархии
  • Цвета категорий для визуального различения

Категории и списки тем

Страницы категорий и списки тем используют схему ItemList:

  • Отсортированы с помощью ItemListOrderDescending для хронологической сортировки
  • Включают метаданные позиции для каждого элемента
  • Помогают поисковым системам понять структуру и иерархию контента

Главная страница

На главной странице сайта присутствуют структурированные данные JSON-LD для WebSite с SearchAction, что позволяет отображать поле поиска Google непосредственно в результатах поиска для вашего сайта.

Страница «О нас»

Ваша страница «О нас» использует схему страницы About с информацией об Organization, помогая поисковым системам понять идентичность и цель вашего сообщества.

Карта сайта

Discourse включает индекс карты сайта, расположенный по адресу /sitemap.xml, который включен по умолчанию через параметр enable sitemap. Это способствует лучшей индексации поисковыми системами. Существуют и другие карты сайта:

  1. Недавняя карта сайта (/sitemap_recent.xml) — Темы, обновленные за последние 3 дня (кэшируется в течение 1 часа)
  2. Карта новостей (/news.xml) — Темы, обновленные за последние 72 часа в формате Google News (кэшируется в течение 5 минут), полезно для новостных сообществ
  3. Постраничные карты сайта — Полный каталог тем, разбитый на страницы (кэшируется в течение 24 часов)

Карты сайта автоматически пересоздаются каждый час запланированным заданием и включают временные метки последнего изменения. Вы можете настроить количество тем на странице карты сайта через параметр sitemap_page_size (по умолчанию: 10 000).

Веб-пауки

Веб-пауки, также известные как роботы или боты, необходимы для индексации веб-страниц и обеспечения доступности вашего контента. Discourse использует сложную систему обнаружения пауков для предоставления оптимизированного контента и эффективного управления трафиком ботов.

Обнаружение пауков

Discourse автоматически обнаруживает и обрабатывает различные типы пауков, включая:

  • Поисковые системы: Googlebot, Bingbot, DuckDuckBot и другие
  • Социальные сети: Facebookbot, Twitterbot, LinkedInBot, Discordbot
  • ИИ-пауки: GPTBot, ClaudeBot, Anthropic-AI, BrightBot
  • Архивные сервисы: Wayback Machine, Archive.org
  • Сервисы мониторинга: Lighthouse, Google Inspection Tool

При обнаружении паука Discourse предоставляет оптимизированный контент и добавляет специальные заголовки ответа:

  • X-Discourse-Crawler-View: true — Указывает на контент, оптимизированный для пауков
  • Заголовки Last-Modified — Позволяют эффективно повторно сканировать сайт

Управление трафиком пауков

Некоторые пауки могут быть чрезмерно активными, отправляя на ваш форум множество запросов. Discourse предоставляет несколько настроек для управления поведением пауков:

  • blocked_crawler_user_agents — Полностью блокирует определенных пауков (список по умолчанию включает: mauibot, semrushbot, ahrefsbot, blexbot, seo spider)
  • slow_down_crawler_user_agents — Ограничивает частоту запросов пауков, а не блокирует их (по умолчанию включает ИИ-пауков, таких как GPTBot, ClaudeBot)
  • allowed_crawler_user_agents:warning: Опасно: установка этого параметра заблокирует ВСЕ пауки, не указанные явно, включая Googlebot. Используйте это только если вы хотите ограничить сканирование определенным набором ботов. Он имеет полный приоритет над blocked_crawler_user_agents. Оставьте пустым, если у вас нет конкретной причины для его использования.

Автоматические заголовки noindex

Помимо глобального параметра allow_index_in_robots_txt, Discourse автоматически добавляет заголовки ответа X-Robots-Tag: noindex для нескольких типов страниц:

  • Страницы поиска — всегда noindex (результаты поиска не полезны как индексированные страницы)
  • Страницы значков — всегда noindex
  • Страницы групп — всегда noindex
  • Страницы профилей пользователей — всегда noindex
  • Страницы фильтрации/пересечения тегов — noindex (страницы индекса и просмотра тегов являются исключением)
  • RSS/Atom-ленты — всегда noindex

Они применяются на уровне контроллера и не настраиваются. Они гарантируют, что эфемерные, низкокачественные или дублирующиеся страницы не засоряют индексы поисковых систем.

Аналитика пауков

Администраторы могут отслеживать активность пауков в разделе Админ → Отчеты → Веб-пауки, чтобы увидеть, какие боты посещают ваш сайт и как часто.

Дополнительные SEO-функции

Руководство для ИИ-пауков через llms.txt

Discourse поддерживает конвенцию llms.txt, которая предоставляет стандартный способ направления пауков на основе ИИ (таких как те, что используются ИИ-ассистентами) относительно контента и структуры вашего сайта.

Чтобы включить его:

  1. Подготовьте файл .txt или .md (максимум 512 КБ), описывающий ваш сайт для ИИ-пауков
  2. Загрузите его через параметр сайта llms_txt (Админ → Настройки → Безопасность)
  3. Он будет доступен по адресу https://yourforum.com/llms.txt

:information_source: Файл llms.txt отличается от robots.txt и специально разработан для направления пауков на основе ИИ. Вместо предоставления правил доступа он предоставляет семантический контекст…описывая, что представляет собой ваш сайт, какой контент он содержит и как ИИ-ассистент должен его понимать и использовать. Считайте robots.txt инструкцией для ботов о «куда они могут пойти», а llms.txt — инструкцией для ИИ о «что он видит и почему это важно».

Интеграция OpenSearch

Discourse предоставляет описание OpenSearch по адресу /opensearch.xml, что позволяет интегрировать поиск в браузер. Пользователи могут добавить ваш форум непосредственно в список поисковых систем своего браузера.

RSS-ленты

Для каждой темы доступна RSS-лента по адресу /t/{slug}/{id}.rss, которая включает:

  • Заголовок и описание темы
  • Все сообщения/ответы с информацией об авторах
  • Даты публикации и последнего обновления
  • Категории и теги

:warning: Примечание: Пути RSS-лент (/t/*/*.rss, /c/*.rss) запрещены в robots.txt для общего wildcard-агента *, чтобы предотвратить индексацию дублирующегося контента большинством пауков. Googlebot явно исключен из этого ограничения и может получать доступ к RSS-лентам.

Верификация сайта Google

Используйте параметр google_site_verification_token, чтобы добавить мета-теги верификации Google Search Console, не редактируя шаблоны тем.

Прогрессивное веб-приложение (PWA)

Discourse генерирует манифест веб-приложения по адресу /manifest.json для обнаружения мобильных приложений и запросов на установку.

Миграции и перенаправления URL

Функция постоянных ссылок (permalink) используется для перенаправления старых URL-адресов, с целью сохранения SEO, предотвращения ошибок «Страница не найдена» и помощи поисковым системам с правильными метаданными для более легкой индексации.

Если ваш сайт сообщества переносится в Discourse нашей командой, перенаправления URL-адресов включаются, если нет веских причин для обратного.

Если вы используете один из существующих скриптов импорта, вы должны убедиться, что скрипт обрабатывает это[2]. Вы можете вручную добавить постоянные ссылки из панели администратора в разделе НастроитьПостоянные ссылки.

Методы удаления из индекса

Чтобы удалить страницы из индекса Google, вы можете либо удалить контент, либо заблокировать доступ к странице. В зависимости от ваших потребностей вы можете сделать весь сайт закрытым[3]. Вы можете исключить темы, удаляя их или помещая в ограниченные категории. Скрытые темы по умолчанию не индексируются, но могут быть, если где-то есть публичная ссылка, ведущая на них.

Для постоянного удаления использование инструмента Удаления в Google Search Console — это способ держать страницы вне результатов поиска. Узнайте больше на Remove information on your website from Google - Search Console Help


  1. ↩︎

  2. Поиск строки permalink в скрипте импорта должен дать вам эту информацию. ↩︎

  3. Ищите параметр login required. ↩︎

21 лайк