Структурированные данные для форумов (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

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

creativeWorkStatus

Text

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

dateModified

DateTime

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

headline

Text

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

image

ImageObject или URL

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

interactionStatistic

InteractionCounter

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

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

isPartOf

CreativeWork или URL

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

sharedContent

CreativeWork

Исходный контент, упоминаемый в записи (если применимо). Обычно с помощью свойства WebPages (с URL) указывают страницу, на которой обсуждается тема, но оно также поддерживает изображения и видео, особенно если они являются основным типом контента в записи.

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

  ...
  "sharedContent": { "@type": "WebPage", url: "https://example.com/external-url" }
  ...
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

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

creativeWorkStatus

Text

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

dateModified

DateTime

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

image

ImageObject или URL

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

interactionStatistic

InteractionCounter

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

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

sharedContent

CreativeWork

Исходный контент, упоминаемый в комментарии (если применимо). Обычно с помощью свойства WebPages (с URL) указывают страницу, на которой обсуждается тема, но оно также поддерживает изображения и видео, особенно если они являются основным типом контента в записи.

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

  ...
  "sharedContent": { "@type": "WebPage", url: "https://example.com/external-url" }
  ...

url

URL

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

video

VideoObject

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

InteractionCounter

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

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

userInteractionCount

Integer

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

interactionType

Подтип типа Action

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

Сбор статистики по расширенным результатам в Search Console

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

  1. После первого размещения структурированных данных
  2. После выпуска новых шаблонов или обновления кода
  3. При регулярном анализе трафика

После первого размещения структурированных данных

Когда ваши страницы будут проиндексированы, проверьте их на наличие ошибок с помощью отчета о статусе расширенных результатов. Желательно, чтобы количество объектов с правильной разметкой выросло, а число объектов с ошибками – нет. Если в структурированных данных будут обнаружены ошибки, примите следующие меры:

  1. Устраните проблемы в объектах.
  2. Проверьте исправленную страницу, чтобы узнать, обнаруживаются ли ошибки.
  3. Запросите проверку ресурса, используя отчет о статусе расширенных результатов.

После выпуска новых шаблонов или обновления кода

Если вы внесли значительные изменения на сайт, проверьте, не увеличилось ли число недействительных объектов, связанных со структурированными данными.
  • Увеличилось число недействительных объектов? Возможно, вы создали шаблон, с которым что-то не так, или имеющийся шаблон используется некорректно.
  • Уменьшилось число действительных элементов, но не увеличилось количество недействительных? Возможно, на ваших страницах не размещены структурированные данные. Выяснить, с чем связаны ошибки, можно при помощи инструмента проверки URL.

При регулярном анализе трафика

Анализировать трафик сайта из Google Поиска можно с помощью отчета об эффективности. Из этого отчета вы узнаете, как часто страница появляется в Поиске в виде расширенного результата, с какой регулярностью пользователи нажимают на нее и какова ее средняя позиция в результатах поиска. Эти сведения также можно автоматически получать с помощью Search Console API.

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

Если у вас возникли трудности с добавлением или отладкой структурированных данных, вам помогут ресурсы и сведения, доступные по приведенным ниже ссылкам.