Структурированные данные для форумов (DiscussionForumPosting)

Изображение с функцией "Обсуждения и форумы"

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

Как использовать разметку типа DiscussionForumPosting на форуме

Мы рекомендуем размещать комментарии под публикацией, к которой они относятся. Если обсуждения на форуме имеют другую структуру, отображайте ее в формате дерева комментариев:

{
  "@context": "https://schema.org",
  "@type": "DiscussionForumPosting",
  "headline": "Very Popular Thread",
  ...
  "comment": [{
    "@type": "Comment",
    "text": "This should not be this popular",
    ...
    "comment": [{
      "@type": "Comment",
      "text": "Yes it should",
      ...
    }]
  }]
}

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

{
  // JSON-LD on non-threaded forum at https://example.com/post/very-popular-thread/14
  "@context": "https://schema.org",
  "@type": "DiscussionForumPosting",
  "headline": "Very Popular Thread", // Only the headline/topic is explicitly present
  "url": "https://example.com/post/very-popular-thread",
  ...
  "comment": [{
    "@type": "Comment",
    "text": "First Post on this Page",
    ...
  },{
    "@type": "Comment",
    "text": "Second Post on this Page",
    ...
  }]
}

Если URL относится к одной записи, задайте основной объект DiscussionForumPosting с помощью свойств mainEntity или mainEntityOfPage:

{
  "@context": "https://schema.org",
  "@type": "WebPage",
  "url": "https://example.com/post/very-popular-thread",
  "mainEntity": {
    "@type": "DiscussionForumPosting"
    ...
  }
}

Если на одной странице, например предназначенной для профиля, темы или категории, может быть несколько записей, то не стоит размещать на ней всю относящуюся к ним информацию – лучше сделать ее доступной по клику (в ответе или другом формате). Вы также можете включить в разметку только те данные, которые присутствуют на странице (в том числе URL записи, к которой относится обсуждение).

Не помечайте одну из записей на странице как основной объект, если страница не предназначена для обсуждения этой записи. Чтобы пометить страницы как связанный набор записей, можно связать их все с типами Collection или ItemList.

Как добавить структурированные данные

Структурированные данные – стандартизированный формат, который позволяет предоставлять поисковым системам информацию о странице и классифицировать ее контент. Подробнее о принципах работы структурированных данных

Ниже в общих чертах описано, как создать, проверить и добавить на сайт структурированные данные.

  1. Добавьте обязательные свойства. Узнайте, в каких частях страницы нужно размещать структурированные данные выбранного вами формата.
  2. Следуйте рекомендациям.
  3. Протестируйте свой код с помощью инструмента проверки расширенных результатов. Если будут обнаружены критические ошибки, устраните их. Мы также рекомендуем устранить некритические ошибки, отмеченные в инструменте. Это может привести к повышению качества структурированных данных, хотя страницы будут подходить для создания расширенных результатов и без этого.
  4. Опубликуйте страницу и с помощью инструмента проверки URL выясните, как она выглядит для робота Googlebot. Убедитесь, что доступ Google к странице не заблокирован файлом robots.txt или метатегом noindex и авторизация на ней не требуется. Если все в порядке, то запросите повторное сканирование ваших URL.
  5. Отправляйте нам файл Sitemap, чтобы информировать нас об изменениях на сайте. Отправку такого файла можно автоматизировать с помощью Search Console Sitemap API.

Примеры

В примере разметки ниже показана страница форума с линейной неразветвленной структурой комментариев.

JSON-LD

<html>
  <head>
    <title>I went to the concert!</title>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "DiscussionForumPosting",
      "mainEntityOfPage": "https://example.com/post/very-popular-thread",
      "headline": "I went to the concert!",
      "text": "Look at how cool this concert was!",
      "video": {
        "@type": "VideoObject",
        "contentUrl": "https://example.com/media/super-cool-concert.mp4",
        "name": "Video of concert",
        "uploadDate": "2024-03-01T06:34:34+02:00",
        "thumbnailUrl": "https://example.com/media/super-cool-concert-snap.jpg"
      },
      "url": "https://example.com/post/very-popular-thread",
      "author": {
        "@type": "Person",
        "name": "Katie Pope",
        "url": "https://example.com/user/katie-pope",
        "agentInteractionStatistic": {
          "@type": "InteractionCounter",
          "interactionType": "https://schema.org/WriteAction",
          "userInteractionCount": 8
        }
      },
      "datePublished": "2024-03-01T08:34:34+02:00",
      "interactionStatistic": {
        "@type": "InteractionCounter",
        "interactionType": "https://schema.org/LikeAction",
        "userInteractionCount": 27
      },
      "comment": [{
        "@type": "Comment",
        "text": "Who's the person you're with?",
        "author": {
          "@type": "Person",
          "name": "Saul Douglas",
          "url": "https://example.com/user/saul-douglas",
          "agentInteractionStatistic": {
            "@type": "InteractionCounter",
            "interactionType": "https://schema.org/WriteAction",
            "userInteractionCount": 167
          }
        },
        "datePublished": "2024-03-01T09:46:02+02:00"
      },{
        "@type": "Comment",
        "text": "That's my mom, isn't she cool?",
        "author": {
          "@type": "Person",
          "name": "Katie Pope",
          "url": "https://example.com/user/katie-pope",
          "agentInteractionStatistic": {
            "@type": "InteractionCounter",
            "interactionType": "https://schema.org/WriteAction",
            "userInteractionCount": 8
          }
        },
        "datePublished": "2024-03-01T09:50:25+02:00",
        "interactionStatistic": {
          "@type": "InteractionCounter",
          "interactionType": "https://schema.org/LikeAction",
          "userInteractionCount": 7
        }
      }]
    }
  </script>
</head>
<body>
</body>
</html>
Микроданные

<html>
    <body>
      <div id="main-post" itemtype="https://schema.org/DiscussionForumPosting" itemscope>
        <meta itemprop="mainEntityOfPage" content="https://example.com/post/very-popular-thread" />
        <meta itemprop="url" content="https://example.com/post/very-popular-thread" />
        <div class="author-block" itemprop="author" itemtype="https://schema.org/Person" itemscope>
          <div><a href="https://example.com/user/katie-pope" itemprop="url"><span itemprop="name">Katie Pope</span></a></div>
          <div itemprop="agentInteractionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
            <span itemprop="userInteractionCount">8</span>
            <span itemprop="interactionType" content="https://schema.org/WriteAction">posts</span>
          </div>
        </div>
        <div itemprop="datePublished" content="2024-03-01T08:34:34+02:00">March 1</div>
        <div itemprop="headline">I went to the concert!</div>
        <div>
          <div itemprop="video" itemtype="https://schema.org/VideoObject" itemscope>
            <meta itemprop="name" content="Video of concert" />
            <meta itemprop="contentUrl" content="https://example.com/media/super-cool-concert.mp4" />
            <meta itemprop="uploadDate" content="2024-03-01T06:34:34+02:00" />
            <meta itemprop="thumbnailUrl" content="https://example.com/media/super-cool-concert-snap.jpg" />
          </div>
          <span itemprop="text">Look at how cool this concert was!</span>
        </div>
        <div itemprop="interactionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
          <span itemprop="userInteractionCount">27</span>
          <span itemprop="interactionType" content="https://schema.org/LikeAction">likes</span>
        </div>
        <div id="comment-1" itemprop="comment" itemtype="https://schema.org/Comment" itemscope>
          <div class="author-block" itemprop="author" itemtype="https://schema.org/Person" itemscope>
            <div><a href="https://example.com/user/saul-douglas" itemprop="url"><span itemprop="name">Saul Douglas</span></a></div>
            <div itemprop="agentInteractionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
              <span itemprop="userInteractionCount">167</span>
              <span itemprop="interactionType" content="https://schema.org/WriteAction">posts</span>
            </div>
          </div>
          <div itemprop="datePublished" content="2024-03-01T09:46:02+02:00">March 1</div>
          <div>
            <span itemprop="text">Who's the person you're with?</span>
          </div>
        </div>
        <div id="comment-2" itemprop="comment" itemtype="https://schema.org/Comment" itemscope>
          <div class="author-block" itemprop="author" itemtype="https://schema.org/Person" itemscope>
            <div><a href="https://example.com/user/katie-pope" itemprop="url"><span itemprop="name">Katie Pope</span></a></div>
            <div itemprop="agentInteractionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
              <span itemprop="userInteractionCount">8</span>
              <span itemprop="interactionType" content="https://schema.org/WriteAction">posts</span>
            </div>
          </div>
          <div itemprop="datePublished" content="2024-03-01T09:50:25+02:00">March 1</div>
          <div>
            <span itemprop="text">That's my mom, isn't she cool?</span>
          </div>
          <div itemprop="interactionStatistic" itemtype="https://schema.org/InteractionCounter" itemscope>
            <span itemprop="userInteractionCount">7</span>
            <span itemprop="interactionType" content="https://schema.org/LikeAction">likes</span>
          </div>
        </div>
      </div>
    </body>
</html>

Правила

Структурированные данные для форумов должны соответствовать указанным ниже требованиям.

Требования к контенту

  • Используйте разметку DiscussionForumPosting только для описания записей, которые создаются пользователями на сайте. Она не предназначена для контента, созданного издателями сайтов или их представителями.
  • Если ваш сайт больше напоминает обычную платформу социальной сети, вы можете использовать разметку SocialMediaPosting. Она представляет собой родительский тип разметки для DiscussionForumPosting и предполагает соблюдение тех же требований.
  • Несмотря на то что структурированные данные типов Article, ImageObject и VideoObject поддерживают аналогичную разметку для комментариев, информации об авторе и статистике взаимодействий, для этих объектов не следует применять разметку типа DiscussionForumPosting. Ниже приведены примеры ее правильного использования.

    Для какого контента подходит эта разметка:

    • для страниц форума сообщества, на котором пользователи обсуждают какую-нибудь игру;
    • для платформы форума, содержащей множество веток обсуждений на различные темы;
    • платформа социальной сети, на которой пользователи могут создавать записи и отвечать на комментарии или медиаконтент.

    Для какого контента эта разметка не подходит:

    • для статьи или записи в блоге, созданной представителем сайта (даже если к ней есть комментарии);
    • для отзывов пользователей о товаре.
  • Обратите внимание, что в большинстве примеров страница вопросов и ответов рассматривается как один из вариантов страницы форума с обсуждениями. Если на сайте форума размещены в основном вопросы и ответы, мы рекомендуем использовать разметку для вопросов и ответов. Если сайт состоит не только из вопросов и ответов, то лучше использовать разметку типа DiscussionForumPosting.
  • Разметка типа DiscussionForumPosting должна содержать полный текст записи, а разметка Comment – ответ на нее, если он присутствует на странице.

Технические требования

  • В отличие от наших стандартных рекомендаций для структурированных данных, мы советуем использовать для разметки DiscussionForumPosting формат микроданных (или RDFa). Так вам не придется многократно использовать одни и те же большие блоки текста внутри разметки. Однако это только рекомендация, и формат JSON-LD тоже поддерживается.

Типы структурированных данных

В этом разделе описаны типы структурированных данных, которые связаны с типом DiscussionForumPosting.

Чтобы ваш контент мог появляться в результатах поиска Google, необходимо задать обязательные свойства. Также стоит добавить и рекомендуемые свойства: благодаря им пользователи Google смогут сразу получить более полное представление о содержании и ходе обсуждения.

DiscussionForumPosting или SocialMediaPosting

Тип разметки DiscussionForumPosting используется для описания оригинальной записи, которая является темой обсуждения. Обычно она представляет собой текст, но может и полностью состоять из мультимедийного контента.

Обязательные свойства

author

Person или Organization

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

Используя наши инструкции по структурированным данным для статей и страниц профиля, добавьте поддерживаемые свойства, позволяющие отправить в Google как можно больше информации об авторе.

author.name

Text

Имя автора записи.

datePublished

DateTime

Дата и время создания записи в формате ISO 8601.

Одно из свойств text, image илиvideo

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

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

Рекомендуемые свойства

author.url

URL

Ссылка на веб-страницу, посвященную пользователю, который создал запись. Чаще всего это страница профиля на форуме. Советуем разметить информацию о странице, используя структурированные данные для страницы профиля.

comment

Comment

Комментарий к записи или ответ на нее (если применимо). Помечайте комментарии в том порядке, в котором они расположены на странице.

commentCount

Integer

Количество комментариев к записи (если применимо). Это свойство особенно полезно, если не все они есть в разметке.

creativeWorkStatus

Text

Если запись была удалена, но упоминается где-либо ещё, задайте для этого свойства значение Deleted (если применимо).

dateModified

DateTime

Дата и время изменения записи в формате ISO 8601 (если применимо). Если запись не редактировалась, то не следует повторно указывать дату ее создания.

digitalSourceType

IPTCDigitalSourceEnumeration

В свойстве digitalSourceType указывается тип цифрового источника, связанного с контентом (если применимо). Оно особенно полезно, если нужно отличать контент, созданный человеком, от автоматически сгенерированного контента. Google поддерживает приведенные ниже значения.

  • TrainedAlgorithmicMediaDigitalSource: указывается контент, созданный обученной моделью, например LLM.
  • AlgorithmicMediaDigitalSource: указывается контент, созданный с помощью более простого алгоритмического процесса, например бота для автоматических ответов.

Если это свойство не указано, Google будет считать, что контент создан человеком.

headline

Text

Заголовок записи. Если его нет, не используйте вместо него сокращенный текст записи. Заголовок не рекомендуется использовать для разметки SocialMediaPosting.

image

ImageObject или URL

Любые изображения в записи (если применимо). Если их нет, не добавляйте в это поле другие картинки, например значок, изображение-плейсхолдер и фото или аватар автора. Если изображение используется для предпросмотра ссылки, добавьте его в поле image прикрепленного объекта WebPage в sharedContent.

interactionStatistic

InteractionCounter

Статистика пользователя, относящаяся к основной записи (если применимо).

Google поддерживает следующие типы взаимодействий (interactionTypes):

isPartOf

CreativeWork или URL

Местонахождение записи, если применимо и она размещена в определенной части сайта, например в отдельной ветке форума или группе. Если используется тип разметки CreativeWork (например, WebPage), добавьте свойство URL, чтобы указать ее URL.

sharedContent

Подтип типа CreativeWork

Исходный контент, упоминаемый в записи (если применимо). Поддерживается четыре типа:

  1. WebPage. Обычно используется для того, чтобы поделиться URL страницы с обсуждением.

    Вот как можно указать, что запись содержит ссылку:

      ...
      "sharedContent": { "@type": "WebPage", "url": "https://example.com/external-url" }
      ...
  2. ImageObject. Если основной контент записи – изображение, вы можете использовать этот тип для разметки.
  3. VideoObject. Если основной контент записи – видео, вы можете использовать этот тип для разметки.
  4. DiscussionForumPosting или Comment. Если есть ссылка на другую запись или комментарий (цитата или репост), добавьте ссылку на них.

    Вот пример разметки для Comment:

      ...
      "sharedContent": {
        "@type": "Comment",
        "url": "https://example.com/post123#comment456",
        "datePublished": "2025-03-24",
        "author": {
          "@type": "Person",
          "name": "Jane Doe"
        },
        "text": "This is a referenced comment displayed inside the post"
      }
      ...
text

Text

Текст в записи (если применимо). Это свойство используется очень часто, но его можно не указывать, если содержание записи относится к другому типу.

url

URL

Канонический URL обсуждения. Если оно включает нескольких страниц, добавьте это свойство в URL первой страницы. Для одностраничного обсуждения обычно указывается текущий URL.

video

VideoObject

Любые видео в записи (если применимо).

Comment

Тип разметки Comment используется для описания комментария к исходной записи, помеченной как CreativeWork (в данном случае это DiscussionForumPosting). В этой разметке используется множество свойств, описанных в нашем руководстве для структурированных данных типа DiscussionForumPosting.

Обязательные свойства

author

Person или Organization

Информация об авторе комментария. Чтобы роботам Google было проще найти информацию об авторе среди кода, который связан с различными функциями, следуйте нашим рекомендациям по разметке, относящейся к автору.

Используя наши инструкции по структурированным данным для статей и страниц профиля, добавьте поддерживаемые свойства, позволяющие отправить в Google как можно больше информации об авторе.

datePublished

DateTime

Дата и время добавления комментария в формате ISO 8601. Если комментарий не редактировался, то не следует повторно указывать дату его создания.

Одно из свойств text, image или video

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

Рекомендуемые свойства

author.url

URL

Ссылка на веб-страницу, посвященную пользователю, который добавил комментарий. Чаще всего это страница профиля на форуме. Советуем разметить информацию о странице, используя структурированные данные для страницы профиля.

comment

Comment

Комментарий, который относится к какому-либо другому или отвечает на него (если применимо). Помечайте комментарии в том порядке, в котором они расположены на странице.

commentCount

Integer

Количество комментариев к комментарию (если применимо). Это свойство особенно полезно, если не все они есть в разметке.

creativeWorkStatus

Text

Если комментарий был удален, но упоминается где-либо ещё, задайте для этого свойства значение Deleted (если применимо).

dateModified

DateTime

Дата и время последнего редактирования комментария в формате ISO 8601 (если применимо).

digitalSourceType

IPTCDigitalSourceEnumeration

В свойстве digitalSourceType указывается тип цифрового источника, связанного с контентом (если применимо). Оно особенно полезно, если нужно отличать контент, созданный человеком, от автоматически сгенерированного контента. Google поддерживает приведенные ниже значения.

  • TrainedAlgorithmicMediaDigitalSource: указывается контент, созданный обученной моделью, например LLM.
  • AlgorithmicMediaDigitalSource: указывается контент, созданный с помощью более простого алгоритмического процесса, например бота для автоматических ответов.

Если это свойство не указано, Google будет считать, что контент создан человеком.

image

ImageObject или URL

Любые изображения в комментарии (если применимо). Если их нет, не добавляйте в это поле другие картинки, например значок, изображение-плейсхолдер и фото или аватар автора. Если изображение используется для предпросмотра ссылки, добавьте его в поле image прикрепленного объекта WebPage в sharedContent.

interactionStatistic

InteractionCounter

Статистика пользователя, относящаяся к комментарию (если применимо).

Google поддерживает следующие типы взаимодействий (interactionTypes):

sharedContent

Подтип типа CreativeWork

Исходный контент, упоминаемый в записи (если применимо). Мы выделяем четыре типа:

  1. WebPage. Обычно используется для того, чтобы поделиться URL страницы с обсуждением.

    Вот как можно указать, что запись содержит ссылку:

      ...
      "sharedContent": { "@type": "WebPage", "url": "https://example.com/external-url" }
      ...
  2. ImageObject. Если основной контент записи – изображение, вы можете использовать этот тип для разметки.
  3. VideoObject. Если основной контент записи – видео, вы можете использовать этот тип для разметки.
  4. DiscussionForumPosting или Comment. Если есть ссылка на другую запись или комментарий (цитата или репост), добавьте ссылку на них.

    Вот пример разметки для Comment:

      ...
      "sharedContent": {
        "@type": "Comment",
        "url": "https://example.com/post123#comment456",
        "datePublished": "2025-03-24",
        "author": {
          "@type": "Person",
          "name": "Jane Doe"
        },
        "text": "This is a referenced comment displayed inside the post"
      }
      ...

url

URL

URL определенного комментария на странице (если применимо). Не указывайте в этом свойстве URL исходной записи.

video

VideoObject

Любые видео в комментарии (если применимо).

InteractionCounter

Разметка InteractionCounter позволяет отдельно подсчитать количество взаимодействий определенного типа. Она подходит как для свойств контента (DiscussionForumPosting и Comment), так и для свойств author.

Обязательные свойства

userInteractionCount

Integer

Информация о том, сколько раз происходило взаимодействие.

interactionType

Подтип типа Action

Если вас интересует список действительных подтипов Action для этого свойства, ознакомьтесь с информацией о свойстве, в котором используется InteractionCounter (например, interactionStatistic).

Monitor rich results with Search Console

Search Console is a tool that helps you monitor how your pages perform in Google Search. You don't have to sign up for Search Console to be included in Google Search results, but it can help you understand and improve how Google sees your site. We recommend checking Search Console in the following cases:

  1. After deploying structured data for the first time
  2. After releasing new templates or updating your code
  3. Analyzing traffic periodically

After deploying structured data for the first time

After Google has indexed your pages, look for issues using the relevant Rich result status report. Ideally, there will be an increase of valid items, and no increase in invalid items. If you find issues in your structured data:

  1. Fix the invalid items.
  2. Inspect a live URL to check if the issue persists.
  3. Request validation using the status report.

After releasing new templates or updating your code

When you make significant changes to your website, monitor for increases in structured data invalid items.
  • If you see an increase in invalid items, perhaps you rolled out a new template that doesn't work, or your site interacts with the existing template in a new and bad way.
  • If you see a decrease in valid items (not matched by an increase in invalid items), perhaps you are no longer embedding structured data in your pages. Use the URL Inspection tool to learn what is causing the issue.

Analyzing traffic periodically

Analyze your Google Search traffic using the Performance Report. The data will show you how often your page appears as a rich result in Search, how often users click on it and what is the average position you appear on search results. You can also automatically pull these results with the Search Console API.

Troubleshooting

If you're having trouble implementing or debugging structured data, here are some resources that may help you.

  • If you're using a content management system (CMS) or someone else is taking care of your site, ask them to help you. Make sure to forward any Search Console message that details the issue to them.
  • Google does not guarantee that features that consume structured data will show up in search results. For a list of common reasons why Google may not show your content in a rich result, see the General Structured Data Guidelines.
  • You might have an error in your structured data. Check the list of structured data errors and the Unparsable structured data report.
  • If you received a structured data manual action against your page, the structured data on the page will be ignored (although the page can still appear in Google Search results). To fix structured data issues, use the Manual Actions report.
  • Review the guidelines again to identify if your content isn't compliant with the guidelines. The problem can be caused by either spammy content or spammy markup usage. However, the issue may not be a syntax issue, and so the Rich Results Test won't be able to identify these issues.
  • Troubleshoot missing rich results / drop in total rich results.
  • Allow time for re-crawling and re-indexing. Remember that it may take several days after publishing a page for Google to find and crawl it. For general questions about crawling and indexing, check the Google Search crawling and indexing FAQ.
  • Post a question in the Google Search Central forum.