討論區 (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", ... }] }
如果網址主要關於單一貼文,請使用 mainEntity
(或 mainEntityOfPage
) 識別主要的 DiscussionForumPosting
:
{ "@context": "https://schema.org", "@type": "WebPage", "url": "https://example.com/post/very-popular-thread", "mainEntity": { "@type": "DiscussionForumPosting" ... } }
若是列出貼文清單的網頁 (例如個人資料、主題或類別頁面),通常不會在同一頁面上顯示完整資訊,使用者需要自行點選才能查看額外資訊 (例如回覆)。你可以選擇是否要只納入網頁上呈現的資訊,以及是否要納入討論專屬貼文的網址。
如果不是貼文的討論頁面,請不要將該頁面上的某篇貼文標示為主要實體。如要表示多個頁面是一系列互有關聯的貼文,可以將所有頁面附加到 Collection
或 ItemList
。
如何新增結構化資料
結構化資料是一種標準化格式,能夠提供網頁相關資訊並分類網頁內容。如果您是第一次使用結構化資料,請參閱這篇文章,進一步瞭解結構化資料的運作方式。
以下簡要說明如何建立、測試及發布結構化資料。
- 新增必要屬性。根據您使用的格式,瞭解要在網頁中的什麼位置插入結構化資料。
- 遵循指南規範。
- 使用複合式搜尋結果測試驗證程式碼,並修正所有重大錯誤。此外,我們也建議您修正工具中可能標記的任何非重大問題,因為這有助於改善結構化資料的品質 (但並非符合複合式搜尋結果的顯示條件)。
- 部署幾個包含結構化資料的網頁,並使用網址檢查工具測試 Google 轉譯網頁的情形。請確認 Google 可以存取您的網頁,且網頁並未遭到 robots.txt 檔案或
noindex
標記封鎖,也未設有登入規定。如果網頁看起來沒問題,您可以要求 Google 重新檢索您的網址。 - 為了讓 Google 掌握日後的異動內容,建議您提交 Sitemap。您可以使用 Search Console Sitemap API 自動執行這項操作。
範例
下列標記範例為非討論串式的線性論壇頁面:
<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>
指南規範
如要讓討論區結構化資料適用於 Google 搜尋,請務必遵循下列指南:
內容指南
DiscussionForumPosting
標記應只用來描述網站上由使用者產生的貼文。如果內容主要是由網站發布者或代理商所撰寫,請勿使用這個標記。- 如果網站更類似一般社群媒體平台,你可以使用
SocialMediaPosting
,也就是父項類型的DiscussionForumPosting
,並遵循相同的規定。 - 雖然我們建議用於其他類型的有效標記 (
Article
、ImageObject
、VideoObject
) 可使用與留言、作者資訊、互動統計資料非常類似的標記,但這些類型不應使用DiscussionForumPosting
標記。以下舉例說明:適用的情況:
- 供使用者討論特定遊戲的社群論壇網頁
- 提供各類子論壇內容的一般論壇平台
- 讓使用者發布及回覆留言或媒體的社群媒體平台
不適用的情況:
- 由網站代理商直接撰寫的文章或網誌 (即使含有留言)
- 使用者對產品的評論
- 請注意,就大多數 Google 用途而言,問與答頁面是視為討論區頁面的特殊用途。如果論壇網站主要採用問答結構,建議改用問與答標記。如果網站結構較通用,且通常不是問答形式,則較適合使用
DiscussionForumPosting
。 - 請確保每個
DiscussionForumPosting
均包含貼文全文,且如果該頁面上有回覆,Comment
須包含回覆全文。
技術指南
- 與一般結構化資料偏好設定不同,我們建議盡可能在微資料 (或 RDFa) 中提供
DiscussionForumPosting
標記,這樣就不必在標記中複製大型文字區塊。但這只是建議做法,系統仍完整支援 JSON-LD。
結構化資料類型定義
本節將說明與 DiscussionForumPosting
相關的結構化資料類型。
內容必須包含必要的屬性,才能顯示在 Google 搜尋中。你也可以加入建議的屬性,為論壇頁面增添更多資訊,提供更優質的使用者體驗。
DiscussionForumPosting
(或 SocialMediaPosting
)
DiscussionForumPosting
類型會定義討論主題的原始貼文。雖然這個類型通常是由文字組成,但也可能有只包含媒體內容的論壇貼文。
必要屬性 | |
---|---|
|
Person 或 Organization
貼文作者的相關資訊。為了讓不同的 Google 功能更瞭解作者,建議你遵循作者標記最佳做法。 |
|
Text
貼文作者的名稱。 |
|
貼文發布日期和時間,採用 ISO 8601 格式。 |
text 、image 或 video 其中之一 |
如要表示貼文內容,請務必加入下列其中一個屬性: 不過,若是使用外部 |
建議屬性 | |
---|---|
|
可明確識別文章作者的頁面連結,通常是論壇的個人資料頁面。建議您使用個人資料頁面結構化資料標記該網頁。 |
comment |
貼文的相關留言或回覆 (如適用)。請依照頁面上的顯示順序來標記留言。 |
creativeWorkStatus |
如果貼文已刪除,但內容仍或討論串維持原樣或討論串,請將這個屬性設為 |
dateModified |
貼文編輯日期和時間 (如適用),採用 ISO 8601 格式。如果沒有任何異動,也不必複製發布日期。 |
|
Text
貼文標題。如果沒有獨立標題,請勿複製或截斷文字做為標題。不建議用於 |
image |
貼文中的內嵌圖片 (如適用)。如果沒有圖片,請勿在這個欄位加入預設圖片、圖示或預留位置圖片。 |
interactionStatistic |
套用至主要貼文的使用者統計資料 (如適用)。 Google 支援下列 |
isPartOf |
貼文主要來源。如果貼文出現在整個網站的特定部分,例如大型網站中的子論壇或群組,就會使用這項屬性。如果使用 |
|
CreativeWork
貼文中主要分享的內容 (如適用)。此屬性最常用來以主題討論內容的形式分享 以下舉例說明如何指出貼文中分享的連結: ... "sharedContent": { "@type": "WebPage", url: "https://example.com/external-url" } ... |
text |
貼文中的文字 (如適用)。這很常用,但如果貼文中有其他媒體內容,就可以在某些情況下忽略。 |
|
URL
討論內容的標準網址。在包含多個頁面的討論串中,請將這項屬性設為第一個頁面的網址。如果討論內容只有一個頁面,這通常就是目前網址。 |
video |
貼文中的內嵌影片 (如適用)。 |
Comment
Comment
類型會定義原始 CreativeWork
的留言。在這種情況下,這是指 DiscussionForumPosting
,且具備許多與 DiscussionForumPosting
相同的屬性,適用類似的指南規範。
必要屬性 | |
---|---|
|
Person 或 Organization
留言作者的相關資訊。為了讓 Google 更瞭解不同內容的作者,建議您遵循作者標記最佳做法。 |
|
留言的發布日期和時間,採用 ISO 8601 格式。如果沒有任何異動,也不必複製發布日期。 |
text 、image 或 video 其中之一 |
如要表示留言內容,請務必加入下列其中一個屬性: |
建議屬性 | |
---|---|
|
可明確識別留言作者的頁面連結,通常是論壇的個人資料網頁。建議您使用個人資料頁面結構化資料標記該網頁。 |
comment |
關於或回覆這則留言的其他留言 (如適用)。請依照頁面上的顯示順序來標記留言。 |
creativeWorkStatus |
如果留言已遭刪除,但仍因結構定義或討論串而加以保,請將這個屬性設為 |
dateModified |
上次編輯留言的日期和時間 (如適用),採用 ISO 8601 格式。 |
image |
註解中的內嵌圖片 (如適用)。如果沒有圖片,請勿在這個欄位加入預設圖片、圖示或預留位置圖片。 |
interactionStatistic |
套用至留言的使用者統計資料 (如適用)。 Google 支援下列 |
|
CreativeWork
留言中主要分享的內容 (如適用)。此屬性最常用來以主題討論內容的形式分享 以下舉例說明如何指出留言中分享的連結: ... "sharedContent": { "@type": "WebPage", url: "https://example.com/external-url" } ... |
|
URL
網頁上特定留言的網址 (如適用)。如果只是原始貼文的網址,請不要加入這項屬性。 |
video |
留言中的內嵌影片 (如適用)。 |
InteractionCounter
InteractionCounter
可將數量與特定類型的互動建立關聯。這可用於兩種內容 (DiscussionForumPosting
和 Comment
) 屬性,以及 author
屬性。
必要屬性 | |
---|---|
|
Integer
發生此互動的次數。 |
|
如需這個屬性的有效 |
透過 Search Console 監控複合式搜尋結果
Search Console 這項工具能協助您監控網頁在 Google 搜尋中的成效。 Google 會主動將您的網頁納入搜尋結果,您無需為此申請使用 Search Console,但是您可以藉由這項服務瞭解並改善 Google 檢索您網站的方式。建議在下列情況查看 Search Console:
首次部署結構化資料後
在 Google 為網頁建立索引後,請透過相關的複合式搜尋結果狀態報告查看是否存在任何問題。理想情況下,有效項目會增加,但無效項目不會變多。如果您在結構化資料中發現問題,請依下列步驟操作:
發布新範本或更新程式碼後
當您對網站進行大幅變更時,請留意結構化資料中無效項目是否增加。- 如果無效項目增加,代表您推出的新範本可能無法正常運作,或者您的網站採用新方式與現有範本互動,但效果不佳。
- 如果有效項目減少,但錯誤並未隨之增加,代表您的網頁可能已不再內嵌結構化資料。請使用網址檢查工具找出問題的成因。
定期分析流量
透過成效報表分析您的 Google 搜尋流量。 這些資料會顯示您的網頁在 Google 搜尋中呈現為複合式搜尋結果的頻率、使用者點擊的頻率,以及您的搜尋結果平均排名。您也可以使用 Search Console API 自動提取這些結果。疑難排解
如果無法順利導入結構化資料,或是偵錯時遇到困難,請參考下列資源。
- 如果您使用內容管理系統 (CMS) 或者有他人代您處理網站事務,請向對方尋求協助。請務必將所有與問題相關的 Search Console 訊息都轉寄給對方,這些訊息會針對問題提供詳細說明。
- Google 不保證採用結構化資料的功能一定會顯示在搜尋結果中。如要瞭解為何 Google 無法將您的內容顯示為複合式搜尋結果,請參閱結構化資料通用指南裡的常見原因清單。
- 結構化資料可能含有錯誤。請查看結構化資料錯誤清單。
- 如果您的網頁遭到結構化資料專人介入處理處置,系統會忽略網頁上的結構化資料,但該網頁仍然會出現在 Google 搜尋結果中。請使用專人介入處理報告來修正結構化資料問題。
- 再次查看指南規範,確認您的內容是否符合規定。問題可能是因為垃圾內容或不當使用的標記所引起。不過,因為問題可能與語法無關,所以複合式搜尋結果測試無法找出問題所在。
- 疑難排解:未出現複合式搜尋結果/複合式搜尋結果總數減少。
- 請等待一段時間,讓系統執行重新檢索和重新建立索引作業。在發布網頁後,Google 可能需要幾天時間才會找到網頁並進行檢索。如有關於檢索和索引建立作業的一般問題,請參閱 Google 搜尋檢索和索引常見問題。
- 前往 Google 搜尋中心論壇發文提問。