🏆 Плагин Rich JSON-LD Microdata для Discourse

Богатые JSON-LD микроданные для Discourse

:sparkles: Краткое описание Расширяет стандартные мета-теги Discourse комплексным и согласованным набором разметки Open Graph, Twitter Cards и Schema.org JSON-LD, что приводит к превосходным показателям SEO, более насыщенному опыту обмена в социальных сетях и улучшенной обнаруживаемости для ИИ/LLM
:hammer_and_wrench: Ссылка на репозиторий GitHub - kaktaknet/discourse-rich-json-ld-microdata: 🏆 Discourse Rich JSON-LD Microdata Plugin. Comprehensive, coordinated Open Graph and Schema.org JSON-LD microdata for 200% SEO and LLM coverage · GitHub
:open_book: Руководство по установке Как установить плагины в Discourse

Что вы получаете

Измените то, как ваш форум отображается в результатах поиска, социальных сетях и в помощниках на базе ИИ. Этот плагин генерирует структурированные данные профессионального уровня, которые Google, Яндекс, социальные платформы и большие языковые модели (LLM) понимают идеально.

Для подробной документации см. README.md

Для технических деталей и разработки см. CONTRIBUTING.md

Для примеров использования и устранения неполадок см. USAGE.md

Примеры расширенных результатов поиска

До: Простой текстовый сниппет в Google
После: Расширенный сниппет с рейтингами, количеством ответов, автором и датой публикации

До: Стандартное превью ссылки в социальных сетях
После: Привлекательная карточка с изображением, описанием и брендингом

Узнайте больше о расширенных результатах от Google Search Central

Ключевые возможности

1. Полное покрытие Schema.org

  • Схема QAPage для тем с полной иерархией вопросов и ответов
  • Поддержка оценок ответов и статуса решенного
  • CollectionPage для категорий с подкатегориями
  • ProfilePage для профилей пользователей с индикаторами экспертизы
  • BreadcrumbList для путей навигации
  • Глобальная схема WebSite с действием поиска

2. Согласованные теги для социальных сетей

  • Open Graph (Facebook, LinkedIn, Discord)
  • Twitter Cards (summary_large_image)
  • Все генерируется из единого источника истины — никаких конфликтов
  • Автоматическая очистка стандартных тегов Discourse

3. Оптимизация для ИИ и LLM

  • Полные связи сущностей с использованием ссылок @id Schema.org
  • Полное понимание контекста (темы → категории → ответы → комментарии)
  • Метаданные об экспертности автора
  • ChatGPT, Claude и другие ИИ-помощники получают идеальный контекст

4. Полная интернационализация :globe_showing_europe_africa:

  • Включены 100% переводы на английский и русский языки
  • Автоматическое определение языка (пользователь → сайт → браузер → запасной вариант)
  • Все описания Schema.org локализованы
  • Простое добавление новых языков

5. Умная производительность

  • Кэширование в Redis с TTL 1 час (настраивается)
  • Автоматическая инвалидация кэша при изменениях контента
  • < 5 мс для закэшированных страниц
  • ~50 мс для первой генерации

6. Нулевое обслуживание

  • Автоматическая вставка как для браузерных, так и для краулерных представлений
  • Работает для тем, категорий и профилей пользователей
  • Гладкая обработка ошибок — никогда не сломает ваш сайт
  • Подробное логирование для отладки

Преимущества для вашего форума

:bullseye: Улучшение позиций в поиске

  • Расширенные сниппеты в Google увеличивают CTR на 30–50%
  • Панели Knowledge Graph для экспертов
  • Появление в разделах «Люди также спрашивают»
  • Хлебные крошки в результатах поиска улучшают навигацию

:mobile_phone: Профессиональное распространение в соцсетях

  • Привлекательные карточки при публикации в Facebook, Twitter, LinkedIn
  • Правильный брендинг с логотипами и описаниями
  • Увеличение вовлеченности и CTR
  • Работает на 40+ социальных платформах

:robot: Готовность к ИИ-помощникам

  • Ваш контент точно отображается в ответах ChatGPT и Claude
  • Правильное указание авторства со ссылками на ваш форум
  • Полный контекст предотвращает галлюцинации ИИ
  • Защита на будущее для генеративной оптимизации (GEO)

:globe_showing_europe_africa: Международная аудитория

  • Автоматическое определение языка
  • Локализованные описания для большей релевантности
  • Кодирование URL обрабатывает кириллицу и специальные символы
  • Простое расширение на другие языки

Установка

Шаг 1: Установка

Следуйте инструкции Install plugins on a self-hosted site, используя ссылку на репозиторий выше

Шаг 2: Включение в админке

Перейдите в Администрирование → Настройки → Плагины → Rich Microdata

Установите rich_microdata_enabled в true (включено по умолчанию)

Шаг 3: Настройка (опционально)

Все настройки отлично работают из коробки, но вы можете настроить:

  • Длительность кэша (по умолчанию: 1 час)
  • Максимальное количество включаемых ответов (по умолчанию: 10)
  • Twitter @handle для вашего сайта
  • URL изображения по умолчанию для Open Graph
  • Включение/отключение конкретных схем

Шаг 4: Проверка

Проверьте вашу разметку:

Настройка

Настройка Значение по умолчанию Описание
rich_microdata_enabled true Главный переключатель плагина
rich_microdata_cache_ttl 3600 Длительность кэша в секундах
rich_microdata_max_answers 10 Максимум ответов в схеме QAPage
rich_microdata_include_user_stats true Включать статистику пользователей
rich_microdata_enable_breadcrumbs true Добавлять схему BreadcrumbList
rich_microdata_enable_website_schema true Включать схему WebSite
rich_microdata_twitter_site "" Ваш Twitter @username
rich_microdata_og_image_default "" URL изображения-запасного варианта для OG
rich_microdata_debug_mode false Включить отладочное логирование

Технические детали

Архитектура:

  • Паттерн из трех слоев: DataExtractor → Builders → Coordinator
  • Единый источник истины предотвращает конфликты данных
  • Отдельный рендеринг для тегов <head> и содержимого <body>
  • Работает как с макетами application.html.erb, так и с crawler.html.erb

Соответствие стандартам:

  • Спецификация Schema.org JSON-LD
  • Протокол Open Graph
  • Разметка Twitter Cards
  • RFC 3986 (кодирование URL для международных символов)

Безопасность:

  • Проверки прав доступа Guardian
  • Автоматическое исключение приватного контента
  • Фильтрация безопасности на уровне SQL
  • Безопасные запасные варианты для отсутствующих данных

Совместимость:

  • Discourse 2.7.0+
  • Ruby 2.7+
  • Протестировано на Discourse 3.6.0.beta3

Примеры из реальной жизни

Разметка страницы темы:

{
  "@context": "https://schema.org",
  "@type": "QAPage",
  "name": "Как оптимизировать запросы к базе данных?",
  "mainEntity": {
    "@type": "Question",
    "name": "Как оптимизировать запросы к базе данных?",
    "text": "У меня медленные запросы...",
    "answerCount": 5,
    "upvoteCount": 12,
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Вам следует добавить индексы на...",
      "upvoteCount": 8,
      "author": {
        "@type": "Person",
        "name": "John Doe",
        "url": "https://forum.example.com/u/john"
      }
    }
  }
}

Разметка страницы категории:

{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Оптимизация баз данных",
  "description": "Советы и приемы для более быстрых запросов",
  "numberOfItems": 245,
  "hasPart": [...]
}

См. USAGE.md для полных примеров.

Сценарии использования

Технические форумы:
Разработчики находят ваши решения через расширенные сниппеты Google и ИИ-помощники для программирования с сохранением правильного контекста кода.

Сообщества поддержки:
Поисковые системы отображают ваши ответы с рейтингами и статусом решения, привлекая целевой трафик к вашему лучшему контенту.

Форумы для обсуждений:
Поделиться в социальных сетях выглядит профессионально благодаря пользовательским карточкам, что увеличивает вовлеченность и снижает показатель отказов.

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

Обслуживание

Работа без обслуживания:

  • Автоматическое обновление кэша при изменениях контента
  • Самовосстановление при ошибках (никогда не ломает ваш сайт)
  • Подробное логирование для мониторинга
  • Опциональный режим отладки для устранения неполадок

Управление кэшем (опционально):

# Консоль Rails
MetaGeneratorService.clear_all_cache
MetaGeneratorService.cache_stats

Устранение неполадок

Мета-теги не отображаются:

  1. Проверьте, что плагин включен в Администрирование → Плагины
  2. Проверьте логи: ./launcher logs app | grep RichMicrodata
  3. Очистите кэш: MetaGeneratorService.clear_all_cache

Расширенные сниппеты не отображаются в Google:

  • Google требуется 2–4 недели для повторного обхода и обновления
  • Протестируйте с помощью Теста расширенных результатов
  • Проверьте наличие ошибок валидации в Search Console

См. USAGE.md для подробного устранения неполадок.

Метрики производительности

  • Процент попаданий в кэш: 95%+ для типичных форумов
  • Время отклика: < 5 мс для закэшированных, ~50 мс для первой генерации
  • Нагрузка на память: Минимальная (используется Redis)
  • Нагрузка на базу данных: Незначительная (кэшируется 1 час)

Дорожная карта

Текущая версия: 2.0.0

:white_check_mark: Полная поддержка Open Graph и Twitter Cards
:white_check_mark: Полная поддержка Schema.org JSON-LD
:white_check_mark: Локализация EN/RU
:white_check_mark: Кодирование URL для международных символов

Запланировано:

  • Дополнительные языковые пакеты (ES, DE, FR)
  • Поддержка схемы Video
  • Схема Event для объявлений
  • Схема Product для категорий маркетплейсов

Поддержка

Лицензия

Лицензия MIT — бесплатное и открытое программное обеспечение

Благодарности


Опционально: Telegram Instant View

В репозитории включены примеры правил шаблонов в TELEGRAM_IV_RULES.txt для создания красивых шаблонов Telegram Instant View. Используйте эти правила на instantview.telegram.org, чтобы обеспечить быструю загрузку и свободное от отвлекающих факторов чтение для пользователей, которые делятся контентом вашего форума в Telegram.


Измените видимость вашего форума уже сегодня. Установите менее чем за 5 минут, результаты в Google появятся через 2–4 недели. :rocket:

12 лайков

Привет, хотя французский языковой пакет ещё не готов, посоветуете ли вы использовать этот плагин на французском сайте Discourse? Спасибо.

1 лайк

Привет. Этот плагин никак не повлияет на пользовательский опыт. Основной язык берётся из настроек Discourse. Вы также можете указать альтернативные языки в разделе администратора, если форум многоязычный. Да, пожалуйста, используйте его — это не вызовет никаких проблем. Перевод используется только для управления плагином в разделе администратора. Если вы понимаете английский или русский, вы сможете управлять им.

2 лайка

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

1 лайк

Вау, действительно интересно!

Автор предоставляет лучшие практики по адресу https://github.com/kaktaknet/discourse-rich-json-ld-microdata/blob/main/USAGE.md

Лучшие практики

  1. Всегда используйте изображения высокого качества (1200x630 пикселей) для тем
  2. Пишите подробные заголовки тем (помогает в заполнении поля name в Schema.org)
  3. Включите плагин Solved для лучшего определения acceptedAnswer
  4. Используйте описательные описания категорий
  5. Поощряйте пользователей заполнять биографии (улучшает схему Person)
  6. Следите за процентом попаданий в кэш (цель >95%)
  7. Прогревайте кэш после развертываний
  8. Проверяйте разметку с помощью валидаторов перед крупными релизами

Readme

https://github.com/kaktaknet/discourse-rich-json-ld-microdata/blob/main/README.md

Создано с :heart: для сообщества Discourse

Это правда. Самая красивая документация на Markdown, которую я когда-либо видел :trophy:!

2 лайка

Спасибо. Несмотря на то, что этот плагин не имеет видимого эффекта для обычных пользователей форума и служит лишь для привлечения большего числа посетителей из поисковых систем и помощи голосовым помощникам, его внедрение было не самой лёгкой задачей. Но мне удалось это сделать.

2 лайка

Отличный плагин! Спасибо за вашу работу. Я пытаюсь его установить, но не могу получить «data-rich-microdata».

Я уже протестировал «MetaGeneratorService.clear_all_cache»:
discourse(prod)> MetaGeneratorService.clear_all_cache => []
и команда «tail -f log/production.log | grep RichMicrodata» выдает:

[RichMicrodata] Generated for topic 14092, crawler: true, head size: 5855
[RichMicrodata] Returning HTML (5855 chars), crawler: true
[RichMicrodata] HTML builder (server:before-head-close-crawler) started for TopicsController
[RichMicrodata] Generating for topic 22861
[RichMicrodata::Coordinator] ERROR in TwitterCardBuilder: undefined local variable or method `twitter_image’ for an instance of DiscourseRichMicrodata::Builders::TwitterCardBuilder
[RichMicrodata] Generated for topic 22861, crawler: true, head size: 6815
[RichMicrodata] Returning HTML (6815 chars), crawler: true
[RichMicrodata] HTML builder (server:before-head-close-crawler) started for TopicsController

1 лайк

Пожалуйста, предоставьте ссылку на пост на форуме https://search.google.com/test/rich-results

1 лайк

Отлично. Но есть ли способ исправить все эти ошибки, связанные с изображением из Twitter?

Я проверю. Оказывается, требуется плагин для изображений. Я упустил этот момент. Исправлю.

1 лайк

Обновлено, зацените

1 лайк

Привет! Просто хотел поделиться странным случаем: на нашем форуме мы не требуем обязательного указания «имени» пользователя, поэтому при попытке индексации Google жалуется:

Отсутствует поле «name» (в «author»)

Элементы с такой ошибкой считаются недействительными. Недействительные элементы не могут участвовать в расширенных результатах поиска Google

Не уверен, есть ли способ указать, что имя пользователя и есть имя?

В стандартных настройках форума и темы такой проблемы нет. Если у вас есть собственные настройки форума или темы, пожалуйста, проверьте их на вашей стороне.

1 лайк

Если не возражаете, что я спрашиваю, что такое «стандартный форум»? Настройки темы не должны быть проблемой, я также тестировал на Horizon, но проблема в том, что сгенерированное «имя» не заполняется (поскольку мы не требуем его заполнения).

Однако это установлено в режим «обсуждение», я попробую другие режимы, чтобы проверить.

Редактирование:

У некоторых тем «имя» заполнено, а у других — нет. Даже для одного и того же пользователя, который не указал конкретное «имя».


Также, вероятно, это не связано, но я вижу некоторые ошибки, касающиеся микроданных и локали ZN.

Привет, я установил этот плагин. Я хочу отключить красную подсветку на прикрепленном изображении ( Screenshot by Lightshot ). Как настроить плагин для этого? Большое спасибо!