Обзор SEO для Discourse (карта сайта / 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 формируется из названия сайта или темы, а описание — из содержания первого поста. Однако возможности кастомизации метаданных для каждой страницы ограничены. Чтобы изменить эти значения, необходимо настроить параметры или поля контента, на основе которых они генерируются.

  • Настройки сайта Title (Заголовок), Description (Описание) и Short site description (Краткое описание сайта)
  • Названия категорий
  • Заголовки и содержание постов
  • И так далее :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 — Изображение по умолчанию для Open Graph при обмене в соцсетях
  • x_summary_large_image — Большое изображение для карточек X (ранее Twitter)

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

Символы не латинского алфавита и URL

По умолчанию Discourse удаляет символы не латинского алфавита из URL тем, если локаль установлена как EN. Чтобы избежать этого, вы можете изменить локаль на основной язык с не латинским алфавитом или изменить параметр slug generation method с 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.

Канонизация

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, отличающемуся от канонического (например, прямая ссылка на пост /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. Recent Sitemap (/sitemap_recent.xml) — Темы, активные за последние 3 дня (кэшируется 1 час)
  2. News Sitemap (/news.xml) — Темы, активные за последние 72 часа в формате Google News (кэшируется 5 минут), полезно для новостных сообществ
  3. Paginated Sitemaps — Полный каталог тем, разбитый на страницы (кэшируется 24 часа)

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

Веб-краулеры

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

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

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

  • Поисковые системы: Googlebot, Bingbot, DuckDuckBot и другие
  • Социальные сети: Facebookbot, Twitterbot, LinkedInBot, Discordbot
  • AI-краулеры: 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 — Ограничивает скорость краулеров, а не блокирует их (список по умолчанию включает AI-краулеры, такие как GPTBot, ClaudeBot)
  • allowed_crawler_user_agents:warning: Опасно: установка этого параметра заблокирует ВСЕХ краулеров, не указанных в списке явно, включая Googlebot. Используйте это только в том случае, если вы намерены ограничить сканирование конкретным набором ботов. Этот параметр имеет полный приоритет над blocked_crawler_user_agents. Оставьте поле пустым, если у вас нет конкретной причины его использовать.

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

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

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

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

Аналитика краулеров

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

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

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

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

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

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

Это отличается от robots.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 без редактирования тем оформления.

Progressive Web App (PWA)

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

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

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

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

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

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

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

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


  1. ↩︎

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

  3. Ищите настройку «Требуется вход» ↩︎

20 лайков