Uporządkowane dane forum dyskusyjnego (DiscussionForumPosting)

Ilustracja przedstawiająca funkcję dyskusji i forów

Znaczniki forum dyskusyjnego są przeznaczone dla witryn w stylu forum, na których użytkownicy wspólnie dzielą się swoimi komentarzami. Gdy strony forum dodają te znaczniki, wyszukiwarka Google może lepiej rozpoznawać dyskusje online w internecie i używać tych znaczników w funkcjach takich jak Dyskusje i fora.

Jak korzystać z danych DiscussionForumPosting na forum

Ogólnie zalecamy zagnieżdżanie komentarzy pod postem, do którego się odnoszą. Jeśli forum ma własną strukturę wątków, użyj drzewa komentarzy, aby odzwierciedlić jego strukturę:

{
  "@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",
      ...
    }]
  }]
}

Jeśli ma ono bardziej liniowy charakter, np. zawiera oryginalny post, a następnie serię odpowiedzi, umieść je wszystkie pod pierwotnym postem jako komentarze. Najlepiej, gdyby późniejsze strony z treściami na wielostronicowych forach zawierały oryginalny post z adresem URL strony głównej:

{
  // 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",
    ...
  }]
}

Jeśli adres URL dotyczy głównie jednego posta, użyj elementu mainEntity (lub mainEntityOfPage), aby wskazać główny element DiscussionForumPosting:

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

W przypadku stron internetowych z listą postów (np. na stronie profilu, tematu lub kategorii) często zdarza się, że nie wszystkie informacje są widoczne na tej samej stronie, a użytkownik musi kliknąć w celu uzyskania dodatkowych informacji (np. odpowiedzi). To Ty decydujesz, czy chcesz uwzględnić tylko informacje znajdujące się na stronie (oraz dodać adres URL posta z konkretną dyskusją).

Nie oznaczaj jednego posta na stronie jako elementu głównego, jeśli nie jest to strona dyskusji dotyczącej tego posta. Aby pokazać, że strony są powiązane z zestawem postów, warto dołączyć je wszystkie do Collection lub ItemList.

Dodawanie uporządkowanych danych

Uporządkowane dane to standardowy format udostępniania informacji o stronie i klasyfikowania jej zawartości. Jeśli dopiero zaczynasz, dowiedz się, jak działają uporządkowane dane.

Poniżej omawiamy sposób tworzenia, testowania i udostępniania uporządkowanych danych. Szczegółowe instrukcje dodawania uporządkowanych danych do strony internetowej znajdziesz w ćwiczeniach z programowania poświęconych uporządkowanym danym.

  1. Dodaj wymagane właściwości. Dowiedz się, w którym miejscu na stronie umieścić uporządkowane dane w zależności od używanego formatu.
  2. Przestrzegaj wskazówek.
  3. Zweryfikuj kod za pomocą testu wyników z elementami rozszerzonymi i napraw błędy krytyczne. Rozważ też usunięcie niekrytycznych problemów, które mogą zostać zgłoszone w narzędziu – to może poprawić jakość uporządkowanych danych (ale nie jest to konieczne, aby witryna kwalifikowała się do wyników z elementami rozszerzonymi).
  4. Możesz wdrożyć kilka stron z uporządkowanymi danymi i dzięki narzędziu do sprawdzania adresów URL zobaczyć, jak Google je odczytuje. Upewnij się, że Twoja strona jest dostępna dla Google i nie jest blokowana przez plik robots.txt lub tag noindex ani nie wymaga logowania. Jeśli strona wygląda dobrze, możesz poprosić Google o ponowne zindeksowanie adresów URL.
  5. Aby na bieżąco informować Google o przyszłych zmianach, prześlij mapę witryny. Możesz zautomatyzować ten proces za pomocą interfejsu Search Console Sitemap API.

Przykłady

Poniższy przykładowy znacznik pokazuje bezwątkową, liniową stronę forum:

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>
Mikrodane

<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>

Wytyczne

Aby uporządkowane dane z forum dyskusyjnego mogły być używane w wyszukiwarce Google, musisz przestrzegać tych wytycznych:

Wskazówki dotyczące treści

  • Używaj znaczników DiscussionForumPosting tylko do opisywania postów użytkowników w witrynie. Nie używaj tych znaczników w przypadku treści, których głównym autorem jest wydawca witryny lub jego przedstawiciele.
  • Jeśli Twoja witryna przypomina funkcjonalną platformę społecznościową, możesz użyć znacznika SocialMediaPosting, czyli typu nadrzędnego DiscussionForumPosting z tymi samymi wymaganiami.
  • Zalecamy stosowanie prawidłowych znaczników innych typów (Article, ImageObject, VideoObject), które mogą zawierać bardzo podobne znaczniki z komentarzami, informacjami o autorze i statystykami interakcji, ale nie powinny one zawierać znaczników DiscussionForumPosting. Oto kilka przykładów:

    Prawidłowe użycie:

    • Strona społeczności, na której użytkownicy mogą rozmawiać o konkretnej grze
    • Ogólna platforma z rozmaitymi treściami na podforum
    • Platforma mediów społecznościowych, na której użytkownicy mogą publikować komentarze lub multimedia i odpowiadać na nie

    Nieprawidłowe użycie:

    • Artykuł lub blog napisany bezpośrednio przez przedstawiciela witryny (nawet z komentarzami).
    • Opinie użytkowników o produkcie
  • Pamiętaj, że w większości przypadków użycia Google strona z pytaniami i odpowiedziami jest uznawana za specjalny przypadek strony forum dyskusyjnego. Jeśli struktura witryny forum składa się głównie z pytań z odpowiedziami, zalecamy użycie znaczników pytań i odpowiedzi. Jeśli struktura jest bardziej ogólna i nie obejmuje zwykle pytań i odpowiedzi, lepszym wyborem będzie DiscussionForumPosting.
  • Upewnij się, że każdy znacznik DiscussionForumPosting zawiera cały tekst posta i że każdy znacznik Comment zawiera cały tekst odpowiedzi, jeśli znajduje się ona na tej stronie.

Wskazówki techniczne

  • W odróżnieniu od naszych ogólnych preferencji dotyczących uporządkowanych danych zalecamy, aby w miarę możliwości używać znaczników DiscussionForumPosting w postaci mikrodanych (lub standardu RDFa). Zapobiega to konieczności powielania dużych bloków tekstu w znacznikach. Jest to jednak tylko zalecenie, a kod JSON-LD jest nadal w pełni obsługiwany.

Definicje typów uporządkowanych danych

W tej sekcji opisujemy typy uporządkowanych danych związane ze znacznikami DiscussionForumPosting.

Aby treści mogły być wyświetlane w wyszukiwarce Google, musisz w nich stosować wymagane właściwości. Możesz też dodawać do nich właściwości zalecane, aby wzbogacać informacje o stronach forów dyskusyjnych dla wygody użytkowników.

DiscussionForumPosting (lub SocialMediaPosting)

Typ DiscussionForumPosting określa oryginalny post, który jest tematem dyskusji. Zwykle składa się on z tekstu, ale może się zdarzyć, że post na forum będzie zawierał tylko treści multimedialne.

Właściwości wymagane

author

Person lub Organization

Informacje o autorze posta. Aby pomóc Google w lepszym rozpoznawaniu autorów w różnych funkcjach, postępuj zgodnie ze sprawdzonymi metodami dodawania znaczników autora.

Uwzględnij jak najwięcej właściwości, które są przydatne w przypadku autora, używając obsługiwanych właściwości z uporządkowanych danych artykułu i strony profilu jako wskazówek.

author.name

Text

Imię i nazwisko autora posta.

datePublished

DateTime

Data i godzina opublikowania posta w formacie ISO 8601.

Może to być text, image lub video.

Aby odzwierciedlić treść posta, musisz użyć jednej z tych właściwości:

Nie jest to wymagane, jeśli reprezentujesz posta na innej stronie (za pomocą zewnętrznego elementu url), np. na późniejszych stronach forów lub stronach kategorii forum.

Właściwości zalecane

author.url

URL

Link do strony internetowej, która jednoznacznie identyfikuje autora posta. Najprawdopodobniej jest to strona profilu na forum. Zalecamy oznaczenie tej strony za pomocą uporządkowanych danych strony profilu.

comment

Comment

Komentarz lub odpowiedź na posta (w stosownych przypadkach). Dodaj znaczniki do komentarzy w takiej kolejności, w jakiej występują na stronie.

creativeWorkStatus

Text

Gdy post został usunięty, ale pozostaje dla zachowania kontekstu lub wątku, ustaw tę właściwość na Deleted (w stosownych przypadkach).

dateModified

DateTime

Data i godzina edycji posta zostały zapisane w formacie ISO 8601 (w stosownych przypadkach). Jeśli nie nastąpiły żadne zmiany, nie musisz powielać daty publikacji.

headline

Text

Tytuł posta. Jeśli nie ma oddzielnego tytułu, nie duplikuj ani nie obcinaj tekstu w nagłówku. Nie jest to zalecane w przypadku SocialMediaPosting.

image

ImageObject lub URL

Ewentualne obrazy w treści posta. Jeśli nie ma żadnych obrazów, nie umieszczaj w tym polu obrazów domyślnych, ikon ani obrazów zastępczych.

interactionStatistic

InteractionCounter

Statystyki użytkowników zastosowane do głównego posta (w stosownych przypadkach).

Google obsługuje te dane interactionTypes:

isPartOf

CreativeWork lub URL

Główne źródło posta, jeśli post pojawi się w konkretnej części witryny (w stosownych przypadkach). Może to być na przykład forum podrzędne lub grupa w większej witrynie. Jeśli używasz właściwości CreativeWork (np. WebPage), określ jej adres URL za pomocą właściwości URL.

sharedContent

CreativeWork

Główna treść udostępniona w poście (jeśli ma zastosowanie). Najczęstszym sposobem użycia jest udostępnienie elementu WebPages (z adresami URL) jako dyskusji tematycznej. W przypadku tej właściwości można też używać obrazów i filmów, zwłaszcza jeśli stanowią one główną treść komentarza.

Ten przykład pokazuje, jak dodać informację, że w poście jest udostępniony link:

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

Text

Jakikolwiek tekst w poście (w stosownych przypadkach). Jest to bardzo częste, ale w niektórych przypadkach można go pominąć, jeśli post zawiera inne multimedia.

url

URL

Kanoniczny URL dyskusji. W wątkach wielostronicowych ustaw tę właściwość na adres URL pierwszej strony. W przypadku pojedynczej dyskusji jest to zwykle bieżący adres URL.

video

VideoObject

Filmy w treści posta (jeśli są dostępne).

Comment

Typ Comment definiuje komentarz do oryginalnego elementu CreativeWork. W tym przypadku jest to DiscussionForumPosting. Wiele takich samych właściwości jest zgodnych z naszymi wytycznymi dotyczącymi atrybutu DiscussionForumPosting.

Właściwości wymagane

author

Person lub Organization

Informacje o autorze komentarza. Aby pomóc Google w lepszym rozpoznawaniu autorów w różnych funkcjach, postępuj zgodnie ze sprawdzonymi metodami dodawania znaczników autora.

Uwzględnij jak najwięcej właściwości, które są przydatne w przypadku autora, używając obsługiwanych właściwości z uporządkowanych danych artykułu i strony profilu jako wskazówek.

datePublished

DateTime

Data i godzina dodania komentarza w formacie ISO 8601. Jeśli nie nastąpiły żadne zmiany, nie musisz powielać daty publikacji.

Może to być text, image lub video.

Aby odzwierciedlić treść komentarza, musisz użyć jednej z tych właściwości:

Właściwości zalecane

author.url

URL

Link do strony internetowej, która jednoznacznie identyfikuje autora komentarza. Najprawdopodobniej jest to strona profilu na forum. Zalecamy oznaczenie tej strony za pomocą uporządkowanych danych strony profilu.

comment

Comment

Kolejny komentarz na temat komentarza lub w odpowiedzi na niego (w stosownych przypadkach). Oznacz komentarze w takiej kolejności, w jakiej się wyświetlają na stronie.

creativeWorkStatus

Text

Jeśli komentarz został usunięty, ale pozostaje dla zachowania kontekstu lub wątku, ustaw tę właściwość na Deleted (w stosownych przypadkach).

dateModified

DateTime

Data i godzina ostatniej edycji komentarza w formacie ISO 8601 (w stosownych przypadkach).

image

ImageObject lub URL

Wszelkie obrazy w tekście komentarza, jeśli są dostępne. Jeśli nie ma żadnych obrazów, nie umieszczaj w tym polu obrazów domyślnych, ikon ani obrazów zastępczych.

interactionStatistic

InteractionCounter

Statystyki użytkowników zastosowane do komentarza (w stosownych przypadkach).

Google obsługuje te dane interactionTypes:

sharedContent

CreativeWork

Główna treść udostępniona w poście (jeśli ma zastosowanie). Najczęstszym sposobem użycia jest udostępnienie elementu WebPages (z adresami URL) jako dyskusji tematycznej. W przypadku tej właściwości można też używać obrazów i filmów, zwłaszcza jeśli stanowią one główną treść komentarza.

Ten przykład pokazuje, jak dodać informację, że w komentarzu jest udostępniony link:

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

url

URL

Adres URL tego konkretnego komentarza na stronie (w stosownych przypadkach). Nie dodawaj tej właściwości, jeśli jest to tylko adres URL pierwotnego posta.

video

VideoObject

Filmy w tekście komentarza (jeśli są dostępne).

InteractionCounter

Pole InteractionCounter umożliwia powiązanie liczby z określonym typem interakcji. Można go używać zarówno we właściwościach treści (DiscussionForumPosting i Comment), jak i we właściwości author.

Właściwości wymagane

userInteractionCount

Integer

Liczba przypadków wykonania tej interakcji.

interactionType

Podtyp elementu Action

Listę prawidłowych podtypów elementu Action tej właściwości znajdziesz we właściwości korzystającej z atrybutu InteractionCounter (np. interactionStatistic).

Monitorowanie wyników z elementami rozszerzonymi w Search Console

Search Console to narzędzie, które pomaga monitorować skuteczność stron w wyszukiwarce Google. Aby Twoja witryna mogła pojawiać się w wynikach wyszukiwania Google, nie musisz rejestrować jej w Search Console. Jeśli jednak to zrobisz, lepiej zrozumiesz, jak robot Google widzi Twoją witrynę i jak możesz mu ułatwić jej skanowanie. Zalecamy sprawdzenie danych w Search Console w tych przypadkach:

  1. po pierwszym wdrożeniu uporządkowanych danych,
  2. po opublikowaniu nowych szablonów lub zaktualizowaniu kodu,
  3. podczas okresowego analizowania ruchu.

Po pierwszym wdrożeniu uporządkowanych danych

Gdy Google zindeksuje Twoje strony, poszukaj problemów w odpowiednim raporcie o stanie wyników z elementami rozszerzonymi. W idealnej sytuacji powinno się pojawić więcej elementów prawidłowych, a liczba elementów nieprawidłowych nie powinna się zwiększyć. Jeśli zauważysz problemy w uporządkowanych danych:

  1. Napraw nieprawidłowe elementy
  2. Sprawdź opublikowany adres URL, by zobaczyć, czy problem nadal występuje.
  3. Poproś o weryfikację, korzystając z raportu o stanie.

Po opublikowaniu nowych szablonów lub zaktualizowaniu kodu

Po wprowadzeniu istotnych zmian w witrynie monitoruj wzrost liczby nieprawidłowych elementów w uporządkowanych danych.
  • Możesz zauważyć większą liczbę elementów nieprawidłowych, jeśli wprowadzisz nowy szablon, który nie działa, lub jeśli Twoja witryna wykorzystuje istniejący szablon w nowy i nieprawidłowy sposób.
  • Jeśli okaże się, że jest mniej prawidłowych elementów (ale liczba nieprawidłowych elementów się nie zwiększyła), być może na swoich stronach nie umieszczasz już uporządkowanych danych. Użyj narzędzia do sprawdzania adresów URL, by dowiedzieć się, co jest przyczyną problemu.

Okresowe analizowanie ruchu

Analizuj ruch w wyszukiwarce Google za pomocą raportu skuteczności. Zawarte w nim dane pokazują, jak często Twoja strona wyświetla się w wyszukiwarce jako wynik z elementami rozszerzonymi, jak często użytkownicy ją klikają i jaka jest jej średnia pozycja w wynikach wyszukiwania. Możesz też pobrać te wyniki automatycznie za pomocą interfejsu Search Console API.

Rozwiązywanie problemów

Jeśli masz problem z zastosowaniem lub debugowaniem uporządkowanych danych, skorzystaj z tych rozwiązań: