如何在 Drupal 網站加入結構化資料(Structured Data)? 以 ProfilePage 為例

大家好,本文是「如何在 Drupal 網站加入結構化資料(Structured Data)」第三篇,這次主題為「資料頁面(ProfilePage)」,在實作前可以先到 Schema.org 了解 ProfilePage 的完整定義 ,亦可以參考 Google 的 ProfilePage 說明文件

為資料頁面(ProfilePage)設定結構化資料(來源: Google
 
還不了解什麼是結構化資料(Structured Data)的朋友們,可以先閱讀〈如何在 Drupal 網站加入結構化資料(Structured Data)? 以文章為例〉,內文有介紹什麼是結構化資料以及如何在 Drupal 使用 Schema.org Metatag 模組為一般文章(Article)建立結構化資料,另外〈如何在 Drupal 網站加入結構化資料(Structured Data)? 以麵包屑為例〉則有 BreadcrumbList 結構化資料的實作範例唷!
 

Drupal 7 建立資料頁面(ProfilePage)時碰到的問題

由於 Drupal 7 的 Schema.org Metatag 模組目前(2024.06.23) ProfilePage 仍是透過 Schema.org: WebPage 設定,然而模組不能設定「mainEntity」屬性,然而 mainEntity 在 Google 結構化資料是必要屬性,因此再測試時會遇到「mainEntity 欄位未填」的錯誤訊息如下圖所示:

我們可以在 Drupal.org 找到有相關 issue 並得知在 Drupal 9 以上的版本有修正了此問題,修正的方式是將 ProfilePage 獨立成子模組,不過該修正目前(2026.06.23)並沒有 Drupal 7 的版本,因此這裡提供一個簡單快速的解決方案:自己來動手寫自訂客製模組!

 

使用客製化模組產生結構化資料

若我們想為網站的「工作人員」這個內容類型建立 ProfilePage 結構化資料,首先我們可以使用 hook_node_view 來處理,如下

/**
 * Implements hook_node_view().
 */
function MY_MODULE_NAME_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'staff') {
    
  }
}

 

接著我們使用 node 的資料來組裝 JSON-LD 結構化資料,包含必要屬性 mainEntity,最後透過 drupal_add_html_head 將其輸出,程式碼範例如下:

/**
 * Implements hook_node_view().
 */
function MY_MODULE_NAME_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'staff') {
    $description = $node->body ? $node->body['und'][0]['value'] : '';

    $json_ld = '
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "ProfilePage",
      "dateCreated": "' . date('Y-m-d\TH:i:sP', $node->created) . '",
      "dateModified": "' . date('Y-m-d\TH:i:sP', $node->changed) . '",
      "mainEntity": {
        "@type": "Person",
        "name": "' . check_plain($node->title) . '",
        "description": "' . check_plain(strip_tags($description)) . '"
      }
    }
    </script>
    ';

    drupal_add_html_head(array(
      '#type' => 'markup',
      '#markup' => $json_ld,
    ), 'MY_MODULE_NAME_json_ld');
  }
}

 

輸出的 JSON-LD 範例如下:

 

小提示,若你的目標是讓網頁更有效的被 Google 了解與檢索,建議你參考 Google官方文件 - 資料頁面 (ProfilePage) 結構化資料 。

 

如何測試?

我們可以使用 Google 提供的「複合式搜尋結果測試」工具來驗證的結構化資料,只要貼上網址或程式碼片段即可測試!

 

 

* 本文首張圖片由 OpenAI DALL·E 生成

 

文章分類: