SEO 完整攻略

探索 SEO 的最佳實踐,提升網站能見度與流量。

結構化資料 (Schema)

告訴搜尋引擎你的內容是什麼,拿下豐富摘要。

結構化資料 (Schema)

結構化資料基礎入門:為何要用 Schema?

什麼是結構化資料?

什麼是結構化資料?

簡單來說,結構化資料就是把網頁裡面的資訊,用一套規範好的標記方式,把內容「說明」給搜尋引擎。想像你在寫一封信,除了正文之外,你還會加上寄件人、收件人、郵遞區號等等訊息,這樣對方才能快速知道整封信的重點。結構化資料就是把「標題」「作者」「發佈日期」等資訊,用固定格式告訴搜尋引擎,讓它能更精準地判斷內容。

為何要用結構化資料?
  • 提升搜索結果可見度:搜尋引擎會把標記好的資料顯示為豐富卡片,例如星級評分、價格或影片預告,使用戶一眼就能看懂重點。
  • 減少誤判風險:若內容沒有明確結構,搜尋機器人可能無法抓取正確的資訊,導致排名下降。
  • 支援語音助手與行動裝置:像 Siri、Google Assistant 或手機小工具,都會利用結構化資料來回覆使用者問題。
常見結構化資料類型
類別 代表意義 範例屬性
Article 網頁文章 headline, author, datePublished
Product 商品資訊 name, price, brand
Recipe 食譜 recipeIngredient, cookingTime
Event 活動訊息 startDate, location, organizer
如何寫結構化資料?
  • JSON‑LD:最受歡迎且易於放在 <script type="application/ld+json"> 之內。
  • Microdata / RDFa:直接嵌入 HTML 標籤,較舊但仍有使用者。

以下是一個典型的 Article 範例,展示如何用 JSON‑LD 加入標題、作者與發佈日期:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "10 個提升網站可見度的技巧",
  "author": {
    "@type": "Person",
    "name": "林美麗"
  },
  "datePublished": "2023-08-01T09:00:00+08:00",
  "image": [
    "https://example.com/photos/1.jpg",
    "https://example.com/photos/2.jpg"
  ]
}
</script>

如果你是電商網站,商品資料也可以這樣標記:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "無線藍牙耳機",
  "image": [
    "https://example.com/product.jpg"
  ],
  "description": "高品質音效,長效電池續航。",
  "sku": "BLA-12345",
  "brand": {
    "@type": "Brand",
    "name": "SoundX"
  },
  "offers": {
    "@type": "Offer",
    "priceCurrency": "TWD",
    "price": "1499.00",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/product-page"
  }
}
</script>
常見錯誤與排查方式
  • 屬性名稱拼寫錯誤:例如 datePublished 要小心大小寫。
  • 缺少必填欄位:搜尋引擎會忽略不完整的資料,導致卡片顯示失效。
  • JSON‑LD 位置放置不當:一定要放在 <head><body> 內,並確保 type 設為 application/ld+json
從哪裡開始學習?
  • 官方文件:schema.org
  • Google 的「結構化資料測試工具」:可驗證你的標記是否正確。
  • 參考實際案例,像是台灣知名部落格或購物網站的頁面源碼,觀察他們如何使用 JSON‑LD。

為什麼你得加上 Schema 才能跑得起搜尋引擎?

為什麼你得加上 Schema 才能跑得起搜尋引擎?

當你在 Google 搜尋「台北夜市」或「阿里山登山步道」時,搜尋引擎其實不只是看文字,還會嘗試解讀這些文字背後的意圖。若網頁只放一般純文字、標題與段落,Google 只能靠關鍵字去推斷內容,結果往往只能得到一個普通摘要。<br/>
而 Schema(結構化資料)就像是給搜尋引擎的一張「說明卡」,直接告訴它:『這篇文章主題是旅遊指南、包含地點資訊、營業時間、評價分數,甚至還有相關影片』。當 Google 收到這些標準化的資料後,就能把它們顯示在搜尋結果裡面,產生「豐富卡片」(Rich Result),讓使用者一次就看懂你提供的是什麼內容,進而提高點擊率與信任度。

為何單純文字不夠?
  • 語意推斷成本高:搜尋引擎需要花時間把關鍵字轉成實際主題。<br/>- 結果可見性受限:沒有 Schema,常只能看到標準摘要與標題。<br/>- 競爭激烈:在同一關鍵字下,若只有文字的頁面,很難脫穎而出。
一個簡單例子:餐廳資訊
  • 無 Schema 的 HTML
<h1>小籠包王</h1>
<p>地址:台北市中正區仁愛路四段 123 號</p>
<p>營業時間:11:00-22:00</p>
  • 加上 Schema(JSON‑LD)後
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "小籠包王",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "仁愛路四段 123 號",
    "addressLocality": "台北市",
    "postalCode": "100"
  },
  "openingHours": "Mon-Sun 11:00-22:00",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": 128
  }
}
</script>
  • 搜尋結果變化:<br/>1️⃣ 顯示餐廳名稱、地址與營業時間的卡片。<br/>2️⃣ 出現星級評價,讓使用者一眼就能判斷品質。
Schema 帶來的實際好處(表格說明)
功能 無 Schema 有 Schema
顯示資訊卡片 只能看到標題 + 摘錄 可以顯示地址、營業時間、評價等細節
點擊率 (CTR) 平均 2.3% 可提升至 4–6%
搜尋排名 受關鍵字競爭影響大 由於資訊完整,易被搜尋引擎推薦
使用者體驗 需要點進去才能看詳細 直接在 SERP 上即可獲得重點資訊
常見 Schema 類型
  • Article / BlogPosting:文章、部落格。<br/>- Product:商品頁面,包含價格與庫存。<br/>- FAQPage:常見問題,能直接在搜尋結果顯示 Q&A。<br/>- LocalBusiness:實體商家資訊,例如餐廳、咖啡店、醫院。
如何開始使用?

1️⃣ 選擇合適的 Schema 類型(可參考 Schema.org)。<br/>2️⃣ 把 JSON‑LD 直接塞進 <head><body><script type="application/ld+json"> 標籤。<br/>3️⃣ 用 Google 的「結構化資料測試工具」或「搜尋控制台」檢查是否正確。<br/>4️⃣ 每次更新內容時,別忘了同步更新 Schema。

小結
  • Schema 不是 SEO 的萬靈藥:它只能把你的資訊更清楚地傳達給搜尋引擎。<br/>- 結合其他優化措施(如關鍵字、內容品質),才能真正跑得起搜尋引擎。<br/>- 開始實作很簡單:只要幾行 JSON‑LD,就能讓你的頁面在 SERP 上更具吸睛度。

最後一句話,別再等了!今天就把 Schema 加進你最重要的頁面,看看搜尋結果如何為你「跑得起」。

Schema 的三大好處:提升曝光、節省時間、減少錯誤

Schema 的三大好處:提升曝光、節省時間、減少錯誤

Schema(結構化資料)其實就是把網頁裡的資訊,用一種機器能讀懂的語言,告訴搜尋引擎「這是產品、文章、活動」等。你可能會想:為什麼要麻煩寫?下面就用三個常見好處來說明。

1️⃣ 提升曝光

  • 更豐富的搜尋結果:當 Google 或其他搜尋引擎看到你的 Schema,往往會把資料顯示成「摘要卡」或「特色片段」,像是星級評價、價格、日期等,讓點擊率大幅提升。

  • 舉例說明:假設你經營一家台北的咖啡店,使用 LocalBusiness 這個 Schema 並加上地址、營業時間、電話號碼。搜尋「台北 咖啡」時,你不只顯示在地圖,更會把營業時間直接列出,方便消費者決定是否前往。

2️⃣ 節省時間

  • 自動化產生卡片:若你已經標記好 Schema,網站管理系統(像是 WordPress 的插件)就能自動把結構化資料寫進 <script type="application/ld+json"> 中,你不需要每次都手動更新。

  • 減少重複工作:舉例來說,商品頁面如果每個品項都有相同的標題與描述,直接把這些資訊寫成 Schema,只要資料改變一次,就能同步反映在搜尋結果卡片中,而不必逐一手動調整。

3️⃣ 減少錯誤

  • 一致性檢查:Google Search Console 等工具會檢測你使用的 Schema 是否符合規範,若出現錯誤(如 url 欄位缺少 https),會給你明確提示,讓你能快速修正。

  • 避免重複資訊:如果同一篇文章在 HTML 內部已經寫了標題、作者等,又在 Schema 裡再寫一次但資料不一致,搜尋引擎可能無法判斷哪個是正確的。使用結構化資料並保持同步,可以避免這種混亂。

如何開始?
  • 先選擇類型:根據你網站內容挑選最合適的 Schema 類別,例如 ArticleProductEvent
  • 寫入 JSON‑LD:以下是一個簡單的商品範例,直接貼到 <head> 內即可。

<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "手搖冰沙",
"image": ["https://example.com/photos/1x1/photo.jpg"],
"description": "台北最棒的手搖飲料!",
"sku": "12345",
"offers": {
"@type": "Offer",
"priceCurrency": "TWD",
"price": "48.00",
"availability": "https://schema.org/InStock"
}
}
</script>

小結表格
好處 具體行動 範例
提升曝光 加入 LocalBusinessArticle 搜尋「台北咖啡店」時顯示營業時間
節省時間 使用插件自動產生 JSON‑LD WordPress 的 Yoast SEO 插件
減少錯誤 先用 Google Search Console 檢測、保持資料一致 修正 priceCurrency 錯字

常見的 Schema 類型教你一秒掌握

文章型別(Article)如何寫?

Article Schema 寫作指南

在 SEO 或內容行銷裡,結構化資料(Schema)能幫你讓搜尋引擎更了解文章的重點。這篇教學會帶你一步步完成一個符合 Google 要求的 Article schema,並用簡單範例說明每個欄位要怎麼填寫。

1️⃣ 基本結構

  • 主類型Article(或更具體的子類別,例如 NewsArticle, BlogPosting)。
  • 必備屬性headline, author, datePublished, articleBody. 這四個欄位是 Google 先決條件,缺一不可。

2️⃣ 常用選填欄位

  • image: 主圖 URL,建議尺寸 1200x628。
  • keywords: 用逗號分隔的關鍵字清單,協助搜尋引擎抓取主題。
  • publisher: 發行商資訊,一般放在 OrganizationPerson 物件內。

3️⃣ 範例:一篇部落格文章

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "2025 年台灣最佳旅遊城市 TOP 10",
  "image": ["https://example.com/images/taipei.jpg"],
  "author": {
    "@type": "Person",
    "name": "小明"
  },
  "publisher": {
    "@type": "Organization",
    "name": "旅遊網",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/images/logo.png"
    }
  },
  "datePublished": "2025-08-15T09:00:00+08:00",
  "dateModified": "2025-08-18T12:30:00+08:00",
  "articleBody": "這裡是文章內容,包含關於台灣各地旅遊景點的詳細介紹與建議。"
} 

4️⃣ 小技巧與常見錯誤

  • 時間格式:務必使用 ISO 8601(YYYY-MM-DDThh:mm:ss+08:00)。
  • URL 必須公開可存取:搜尋引擎抓不到的圖片或文章,會被視為失效。
  • 避免重複標題:同一篇文章不應在多個網頁中使用相同 headline,否則會影響索引品質。

5️⃣ 測試與上線

  • 在完成 JSON‑LD 後,可直接貼到 Chrome 擴充功能「Schema Markup Validator」或 Google Search Console 的結構化資料測試工具中檢查。
  • 若測試無誤,將標記碼放在 <head> 或頁面底部的 <script type="application/ld+json"> 標籤內,即可完成部署。

6️⃣ 結語

結構化資料不僅能提升搜尋結果中的展示效果,也讓你更清楚自己文章的核心資訊。只要記得把必備欄位填寫完整,配合正確的時間與圖片格式,你就能輕鬆寫出一個符合 Google 要求的 Article schema,幫助內容被更多人看到。

商品型別(Product)的實作要點

想在搜尋結果裡顯示商品卡片,先得把商品資訊寫進結構化標記。

為什麼要加商品資料?

  • 搜尋引擎能直接讀懂你的商品資訊,例如價錢、庫存與評分,讓使用者一眼就知道重點。
  • 這樣的卡片往往比普通文字連結更吸睛,點擊率自然提升。

必備屬性:

  • name: 商品名稱(例:"Apple iPhone 14 Pro Max").
  • image: 圖片 URL(建議 800x800 像素以上,可放多張)。
  • description: 簡短說明(不超過 200 字)。
  • sku: 庫存編號。
  • brand: 品牌名稱或結構化物件。

建議屬性:

  • offers: 價錢、庫存狀態與可購買期限。例:"price": "999", "availability": "https://schema.org/InStock"
  • aggregateRating: 平均評分與評論數。
  • review: 個別評價,可包含作者、日期與內容。

JSON‑LD 範例(簡易版)

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Apple iPhone 14 Pro Max",
  "image": [
    "https://example.com/photos/1x1/photo.jpg"
  ],
  "description": "最新一代的 iPhone,擁有更快的處理器與全新相機系統。",
  "sku": "IPH14PM-001",
  "brand": {
    "@type": "Brand",
    "name": "Apple"
  },
  "offers": {
    "@type": "Offer",
    "priceCurrency": "USD",
    "price": "1099.00",
    "availability": "https://schema.org/InStock",
    "url": "https://example.com/iphone-14-pro-max"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": 1240
  }
} 

範例二:多張圖片與促銷價格

這個範例展示了如何加上多張商品照片、折扣資訊,以及「預購」狀態。

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Dyson V11 空氣淨化器",
  "image": [
    "https://example.com/images/dyson1.jpg",
    "https://example.com/images/dyson2.jpg"
  ],
  "description": "高效 HEPA 濾網,適合有過敏族群使用。",
  "sku": "DYSV11-2025",
  "brand": {
    "@type": "Brand",
    "name": "Dyson"
  },
  "offers": {
    "@type": "Offer",
    "priceCurrency": "TWD",
    "price": "8999.00",
    "priceValidUntil": "2025-12-31",
    "availability": "https://schema.org/Preorder",
    "url": "https://example.com/dyson-v11",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": 532
  }
} 

常見錯誤與排查方法:

  • 圖片尺寸不夠:搜尋結果往往只顯示小圖或無圖,確認寬高至少 800px。
  • URL 不完整url 指向不存在的頁面會被視為錯誤,務必先確定連結可用。
  • 屬性名稱拼寫錯誤:如 "price" 或 "availability" 必須正確無誤,任何打字失誤都可能導致解析失敗。

如何驗證?

  • 在 Google Search Console 的「結構化資料報告」查看是否有錯誤訊息。
  • 使用「Rich Results Test」工具,貼上頁面 URL 或直接複製上述 JSON‑LD,確認能產生商品卡片。

FAQ 版面用 Schema 怎麼加?

FAQ Schema 加入步驟

在網頁中加入 FAQ 的 Schema 其實很簡單,跟一般的結構化資料差不多,只是要用「FAQPage」這個類型。以下會一步一步示範,讓你一秒鐘就能把它塞進去。

1️⃣ 找到問答區塊

通常在商品說明、常見問題或服務介紹的地方都會有「為什麼…」與「怎麼做…」這類文字,先確認哪一段是 FAQ,確定後才不會把錯誤內容塞進去。

2️⃣ 撰寫 JSON‑LD

打開你喜歡的編輯器,把下面的範例複製過來,再根據自己的問題與答案調整:
<script type="application/ld+json">{
"@context":"https://schema.org",
"@type":"FAQPage",
"mainEntity":[
{
"@type":"Question",
"name":"如何加入 FAQ Schema?",
"acceptedAnswer":{
"@type":"Answer",
"text":"只要在網頁中加入符合 schema.org 規範的 JSON‑LD 即可。"
}
},
{
"@type":"Question",
"name":"FAQ 必須放在哪裡?",
"acceptedAnswer":{
"@type":"Answer",
"text":"可以直接貼到 <head> 或 </body> 前,確保瀏覽器能抓到。"
}
}
]
}</script>

3️⃣ 放進網頁

把剛才產生的 <script> 標籤貼到你 FAQ 區塊附近,建議放在 </head> 或是 FAQ 區塊結束前。這樣 Google 就能在索引時抓到它。

4️⃣ 驗證效果

完成後別忘了用 Google 的「Rich Results Test」或「Schema Markup Validator」檢查,確認沒有語法錯誤,也會看到 FAQ 類型的預覽。

常見問題

  • 這個 JSON‑LD 能放在多長?:只要內容不超過 Google 的限制(一般為 50 個問題),就沒問題。
  • 如果是動態生成的 FAQ,該怎麼辦?*:可以用 JavaScript 在頁面載入時寫入 <script type="application/ld+json">...</script> 或者直接在伺服器端產生完整的標籤。

小結

把 FAQ 的問題與答案以 JSON‑LD 方式貼進網頁,Google 就能閱讀並可能顯示在搜尋結果裡面。只要按下列步驟走,即可完成:

  • 找到問答區塊 → 撰寫 JSON‑LD → 放入標籤 → 驗證 ✔️

評價型別(Review)怎樣寫才通過檢測

如何寫 Review Schema 通過 Google 檢測

Review(評價)是一種常見的結構化資料,能讓搜尋結果顯示星級、評分與評論數等資訊。為了順利通過 Google 的 Rich Results Test 或 Structured Data Testing Tool,你必須確保以下要點都正確無誤。

1. 使用 JSON‑LD 作為實作方式

Google 建議直接在 <script type="application/ld+json"> 標籤內寫入完整的 JSON‑LD。這樣不僅語法清晰,也方便維護。

2. 必填屬性與格式規範
必填屬性 說明 範例值
@context 固定為 "https://schema.org" "https://schema.org"
@type 只可使用 "Review" "Review"
itemReviewed 評價對象(商品、服務等) { "@type": "Product", "name": "iPhone 15 Pro Max" }
reviewRating 評分結構,包含 ratingValue, bestRating, worstRating { "@type": "Rating", "ratingValue": "4.5", "bestRating": "5" }
author 審稿人資訊 { "@type": "Person", "name": "陳大明" }
reviewBody 評論內容文字 "這款手機的相機真的很棒,拍照品質不輸專業單反。"
3. 避免常見錯誤
  • 數值必須是字串:雖然 ratingValue 看起來像數字,但在 JSON‑LD 裡要寫成 "4.5" 而不是 4.5。
  • 不允許多筆 reviewRating:每個 Review 只能有一組評分結構,若需要多項指標請使用 aggregateRating 或新增多筆 Review。
  • worstRating 可省略但建議加上:若省略,Google 會預設為 1;明確寫出可避免誤解。
4. 測試工具的使用方法
  1. 在瀏覽器中開啟「Rich Results Test」(https://search.google.com/test/rich-results)。
  2. 輸入你頁面的 URL 或直接貼上 JSON‑LD 程式碼。
  3. 觀察「Review」的驗證結果,若顯示紅色錯誤訊息,根據提示逐一修正。常見訊息包括 "Missing required property: reviewRating" 或 "Invalid value for ratingValue"。
5. 範例完整程式碼
{
  "@context": "https://schema.org",
  "@type": "Review",
  "itemReviewed": {
    "@type": "Product",
    "name": "iPhone 15 Pro Max"
  },
  "reviewRating": {
    "@type": "Rating",
    "ratingValue": "4.5",
    "bestRating": "5"
  },
  "author": {
    "@type": "Person",
    "name": "陳大明"
  },
  "datePublished": "2025-08-19",
  "reviewBody": "這款手機的相機真的很棒,拍照品質不輸專業單反。"
}

將以上 JSON‑LD 放入 <script type="application/ld+json"> 標籤後,即可完成一筆符合規範的 Review 資料。

6. 常見場景示例

  • 商品評價:在產品詳細頁面加上上述結構化資料,Google 會直接顯示星級與評論數。
  • 餐廳/服務:將 itemReviewed@type 改為 RestaurantLocalBusiness,並加入 address, telephone 等欄位,同樣能產生豐富結果。
  • 影片或文章評價:若是對影片的評論,可以使用 VideoObject 作為 itemReviewed;若是書籍則用 Book

7. 小結

只要確保 JSON‑LD 的語法正確、必填屬性完整且值格式符合 Schema.org 規範,Review 結構化資料就能順利通過 Google 的 Rich Results 檢測。記得定期在「Rich Results Test」確認是否仍符合最新規則,因為搜尋引擎的驗證邏輯不時會更新。

實作技巧:從 JSON‑LD 到 Microdata,讓你不再怕寫錯

JSON‑LD 基礎語法快速上手

JSON‑LD 基礎語法快速上手

JSON‑LD 是一種把結構化資料寫進網頁的簡單方式,佢會用 JavaScript Object Notation(JSON)嘅語法,直接放喺 <script type="application/ld+json"> 裡面。

呢個方法好適合想要讓搜尋機器人更清楚了解你網站內容的時候使用,例如標示文章、產品或活動等等。

下面就帶大家一步步寫出一個最常見的「文章」範例,先睇下格式係點樣:

  • type: 代表資料類型,一般用 @context 指定為 https://schema.org/
  • 主物件: 用 @type 來指定,例如 ArticleProductEvent
  • 屬性: 根據你選擇的類型填寫對應欄位,像是 headline(標題)、author(作者)或 datePublished(發佈日期)。

舉例:如果你有一篇部落格文章「如何用 JSON‑LD 讓搜尋機器人更愛你」,咁就會係這樣寫:

實際範例:寫一篇部落格文章嘅 JSON‑LD

<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "如何用 JSON‑LD 讓搜尋機器人更愛你",
"author": {
"@type": "Person",
"name": "小明"
},
"datePublished": "2025-08-19",
"url": "https://example.com/如何用-json-ld",
"image": "https://example.com/images/article.jpg"
}
</script>

  • 說明:以上代碼直接放喺 <head><body> 裡面都可以,搜尋機器人會自動抓取。
  • 常見錯誤:JSON 內的屬性名稱一定要用雙引號包住;逗號後不能多餘地加換行或空白太多,否則驗證工具會報錯。

你可以試著改成其他類型,例如 ProductEvent,只需要把 @type 同對應屬性調整好就好。

Microdata 與 JSON‑LD 的差別與選擇

微資料 (Microdata) vs JSON‑LD:你可能不知道的事

結構化資料就像給搜尋引擎一張地圖,告訴它「這段文字是什麼意思」。在網頁裡常見的兩種寫法就是 Microdata 與 JSON‑LD。雖然它們最終目的相同,但實作方式、可讀性跟維護成本卻大不相同。

Microdata 直接把資料嵌進你已經擁有的 HTML 標籤裡,像是給 <article> 加個 itemscopeitemprop。這種方式最直覺,也能立即在瀏覽器上看到標記。

JSON‑LD 則是一段獨立的 <script type="application/ld+json">,把資料寫成 JSON 格式,再放進 <head><body> 裡。它不會改變原本的 HTML 結構,也更容易用自動化工具產生。

下面先看一個簡單的 Microdata 範例:

<pre><code><article itemscope itemtype="https://schema.org/Article">
<h1 itemprop="headline">這是一篇範例文章</h1>
<p itemprop="author">作者:小明</p>
</article></code></pre>

Microdata 與 JSON‑LD 的技術細節對照表

特徵 Microdata JSON‑LD 備註
放置位置 直接在 HTML 標籤內 <script> 區塊 兩者都可放在 <head><body>,但常見於 <head>
語法風格 屬性式 (itemscope, itemprop) JSON 物件 Microdata 需要閱讀 HTML;JSON‑LD 更像資料結構
可讀性 人類閱讀時可直接看到標記 需拆開檢視 <script> 內部 JSON‑LD 讓非技術人員較難直覺理解
維護成本 每次改 HTML 時必須同步更新屬性 只要改 <script> 就行,HTML 不受影響 JSON‑LD 更適合大型專案
搜尋引擎支援度 Google、Bing、Yahoo! 都支持 同上 目前 Google 推薦使用 JSON‑LD 作為首選格式
小結
  • Microdata:最直覺,適合小型專案或已經有豐富 HTML 標籤的情況。
  • JSON‑LD:更乾淨、易維護,特別是當你想把資料從後端直接注入時。

何時選擇哪一種?實際案例說明

案例一:單頁靜態部落格

如果你的網站只有幾篇文章,且每篇都手動寫 HTML,那麼把結構化資料直接塞進標籤中是最快的方法。只要在 <article> 裡加上 itemscopeitemprop 就能完成。

Microdata 範例
<pre><code><article itemscope itemtype="https://schema.org/BlogPosting">
<h1 itemprop="headline">我的第一篇文章</h1>
<p itemprop="datePublished" content="2025-08-19">2025 年 8 月 19 日</p>
</article></code></pre>

案例二:動態內容管理系統(CMS)

當你使用 WordPress、Drupal 或自訂的 CMS 時,HTML 結構往往是由模板產生。此時把結構化資料寫成獨立的 JSON‑LD 更方便維護:

JSON‑LD 範例(放在 <head>
<pre><code><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "{{post.title}}",
"author": {
"@type": "Person",
"name": "{{post.author}}"
},
"datePublished": "{{post.published_at}}"
}
</script></code></pre>

這樣一來,只要在後端模板改變資料來源,就不需要逐行修改 HTML 標籤。

案例三:多語系或動態載入內容

若頁面會根據使用者位置、裝置或點擊事件動態載入新的卡片(例如產品列表),用 JSON‑LD 可在前端 JavaScript 產生 <script>,不必重新渲染整個 HTML。

動態插入範例
<pre><code>function addProductSchema(product) {
const script = document.createElement('script');
script.type = 'application/ld+json';
script.textContent = JSON.stringify({
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
price: product.price
});
document.head.appendChild(script);
}</code></pre>

最終建議
  • 如果你是單頁靜態站,Microdata 足夠且最快。
  • 若網站是動態生成、內容較多或需要經常更新資料,JSON‑LD 會省下大量維護時間。
  • 大部分搜尋引擎都接受兩種格式,但 Google 官方建議把主要結構化資料寫成 JSON‑LD,並避免在同一頁面同時使用 Microdata 與 JSON‑LD(重複資訊可能造成混亂)。

把 Schema 嵌到 HTML 裡的最佳實踐

把 Schema 嵌到 HTML 裡的最佳實踐

在搜尋引擎優化(SEO)中,結構化資料能讓機器人更容易理解網頁內容。今天就來聊聊如何把 Schema 正確、乾淨地嵌進 HTML,避免常見的寫錯或重複問題。

1️⃣ 為什麼選擇 JSON‑LD?

JSON‑LD 的好處包括:

  • 放在 <head> 區塊,對頁面載入速度影響小。
  • 可以一次寫多個結構化資料,不會佔用太多 DOM。
  • Google 官方推薦,支援所有主流搜尋引擎。
  • 易於維護:一段腳本、直接更新。

2️⃣ Microdata 的場景

Microdata 適合已經在 HTML 標籤內添加語義的情況,例如:

  • 在文章標題、作者、發布日期等元素上直接加 itemscopeitemprop
  • 需要同時顯示結構化資料與可見內容。

3️⃣ 步驟說明

1️⃣ 在 <head> 裡加入 JSON‑LD:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "示例標題",
  "author": {
    "@type": "Person",
    "name": "作者姓名"
  }
}
</script>

2️⃣ 若想用 Microdata,直接在元素上加屬性:

<article itemscope itemtype="https://schema.org/Article">
  <h1 itemprop="headline">示例標題</h1>
  <p>內容...</p>
  <span itemprop="author" itemscope itemtype="https://schema.org/Person">
    <span itemprop="name">作者姓名</span>
  </span>
</article>

3️⃣ 確認 JSON‑LD 與 Microdata 不重複。若同時使用,避免把相同資訊寫兩次。
4️⃣ 測試:使用 Google 的「結構化資料測試工具」或「Rich Results Test」確認語法正確。

4️⃣ 常見錯誤

  • JSON‑LD 中的屬性名稱大小寫不一致(例如 "HeadLine")。
  • 輸入多個 <script> 標籤,Google 只會抓第一筆。
  • <head> 裡放置過大的 JSON‑LD,導致頁面渲染卡頓。解決方案:把資料拆成幾段或使用 async 加載。
  • Microdata 與 JSON‑LD 重複,造成重複計算。

5️⃣ 進階技巧

1️⃣ 使用 @graph 對多個物件一次性描述:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {"@type":"Person", "@id":"#author", "name":"作者姓名"},
    {"@type":"Article", "headline":"示例標題", "author": "#author"}
  ]
}
</script>

2️⃣ 為動態內容(如 AJAX 載入)使用 JSON‑LD 的 <script> 放在載入後,或利用 data- 屬性傳遞。
3️⃣ 若使用 CMS 或頁面編輯器,檢查是否自動產生 Microdata;若有,將其關閉再手動加入。

6️⃣ 小結

把 Schema 嵌進 HTML 最重要的是保持簡潔、避免重複、確保測試通過。只要遵循上述步驟,你就能讓搜尋引擎更快抓取你頁面的實際內容,提升曝光機會。

快速檢查清單
步驟 檢核項目 建議做法
1 JSON‑LD 是否放在 <head> 或頁面頂部 放置於 <head>,或使用 async 加載避免阻塞
2 欄位名稱大小寫正確 使用官方文件中列出的大小寫
3 無重複資料 確認 JSON‑LD 與 Microdata 不同內容不重複
4 測試結果是否通過 用 Google Rich Results Test 檢查
5 資料量控制 若 JSON‑LD 大於 10KB,考慮分段或懶載入
6 CMS 自動產生的 Microdata 如有重複,先關閉再手動加入

動態頁面如何產生結構化資料?

這篇文章會帶你了解在動態產生的網頁上,如何有效地加入結構化資料,讓搜尋引擎能正確抓取內容。
我們將從 JSON‑LD 到 Microdata 的實作技巧,一步一步示範怎麼避免常見錯誤。

動態頁面如何產生結構化資料?

在傳統靜態網頁,結構化資料通常直接寫在 HTML 內。但動態內容,例如 SPA 或 AJAX 取得的商品資訊,需要在資料載入後才能插入。

為什麼要為動態頁面加上結構化資料?
  • 搜尋引擎能更快理解「這是一個產品,價格是 $199」等關鍵訊息。
  • 產生豐富卡片(rich snippets)或在搜尋結果中顯示星級評價、庫存狀態。
  • 對於使用者來說,能直接看到更完整的資訊,而不必點進去再看。
1️⃣ 常見做法:伺服器端渲染(SSR)

若你用 Node、Django 或 Ruby 等框架,可以在回傳 HTML 前,把資料轉成 JSON‑LD 字串,並塞進 <script type="application/ld+json"> 標籤。以下是一個簡單的 Express 範例:

// 伺服器端範例
app.get('/product/:id', (req, res) => {
  const product = db.find(req.params.id); // 從資料庫拿到商品資訊
  const jsonLd = JSON.stringify({
    '@context': 'https://schema.org',
    '@type': 'Product',
    name: product.name,
    price: product.price.toString(),
    image: product.imageUrl,
    description: product.desc
  });
  res.render('product', { jsonLd, product });
});

views/product.ejs(或 Pug、Handlebars)裡面寫:
<script type="application/ld+json"><%= jsonLd %></script>

這樣每次請求都會把最新資料塞進頁面,搜尋機器人就能即時抓到。

2️⃣ 客戶端動態注入(CSR)

如果你使用 React、Vue 或 Angular 等 SPA 框架,常見做法是:

  • 把資料載完後,用 document.createElement('script') 建立 <script type="application/ld+json">,再把 JSON‑LD 字串塞進去。
  • 也可以直接在 JSX、Vue 範本裡用 <script> 標籤,但需要確保它不被框架視為普通腳本執行。

以下以 React 為例:

import { useEffect } from 'react';
function ProductPage({ data }) {
  useEffect(() => {
    const script = document.createElement('script');
    script.type = 'application/ld+json';
    script.textContent = JSON.stringify({
      '@context': 'https://schema.org',
      '@type': 'Product',
      name: data.name,
      price: data.price.toString(),
      image: data.imageUrl
    });
    document.head.appendChild(script);
  }, [data]);
  return <div>...</div>;
}

注意:如果你使用 React Helmet,可以直接寫 <script type="application/ld+json">{JSON.stringify(json)}</script>

3️⃣ Microdata 方式(不常用但仍可)
  • 在元素上加上 itemscope, itemtype, itemprop 等屬性,直接在 HTML 裡寫資料。

  • 適合簡單結構,例如只需要顯示標題和價格時,可以這樣做:

    <div itemscope itemtype="https://schema.org/Product">
    <h1 itemprop="name">${product.name}</h1>
    <span itemprop="price" content="${product.price}">${product.price} 元</span>
    </div>

在 SPA 中,你可以用 React 的 dangerouslySetInnerHTML 或 Vue 的 v-html 把這段 HTML 插入。

常見錯誤排查清單
  • JSON 失敗:確保 JSON‑LD 字串不包含單引號或未轉義的特殊字元;最好用 JSON.stringify() 產生。
  • 標籤位置錯誤<script type="application/ld+json"> 必須在 <head><body> 的開頭,避免被瀏覽器裁切。
  • 重複插入:如果頁面重新渲染時不清除舊的 <script>,搜尋機器人會看到多筆資料;要先檢查是否已存在再新增。
  • 屬性名稱錯誤Schema.org 的屬名是大小寫敏感,請參考官方文件確認正確拼法。
小結

動態頁面產生結構化資料其實跟靜態頁面差不多,只要在資料可用時把 JSON‑LD 或 Microdata 放進 DOM 就行。

  • 伺服器端渲染:最快、最保險,搜尋機器人直接抓到。
  • 客戶端注入:適合 SPA,需確保腳本不被框架阻擋。
  • Microdata:簡單但維護成本高,除非你只需要極少資料。

掌握以上三種方式,你就能在動態網站上輕鬆實作結構化資料,讓搜尋引擎與使用者都更滿意。

工具篇:測試、驗證、排程,讓你不怕被搜尋引擎抓不到

Google 的結構化資料測試工具使用說明

Google 結構化資料測試工具使用說明

  • 什麼是結構化資料?
    • 用來告訴搜尋引擎你網頁的內容到底是什麼,例如文章、產品、餐廳資訊等。

先備知識

  • 常見格式:JSON‑LD(最簡單,直接放在 <script type="application/ld+json"> 裡面)與 Microdata(嵌入 HTML 元素,例如 <span itemscope itemtype="https://schema.org/Article">)。

  • 常見 schema 類型

    • Article、BlogPosting
    • Product、Offer
    • LocalBusiness、Restaurant
    • Event、FAQPage

如何使用工具

  • 步驟一:進入測試頁面
    打開瀏覽器,輸入「Google Rich Results Test」。你會看到兩個選項:URLCode

  • 步驟二:選擇輸入方式

    • URL:直接貼上想測試的網頁位址,點擊「Run test」即可。
    • Code:如果你只想檢查一段 JSON‑LD 或 microdata,複製貼到文字框再執行。
  • 步驟三:閱讀結果

    • 成功訊息(綠色):結構化資料已正確解析。
    • 警告(黃色)或錯誤(紅色):需要修正的地方,工具會列出每個問題並給予簡短說明。

常見錯誤與範例

  • 錯誤一:屬性名稱拼寫錯誤

    • 範例:authorname 應為 authorName
    • 修正後再次測試即可。
  • 警告二:缺少必填欄位

    • 例如 Product 的 priceCurrency 或 Article 的 datePublished
    • 在 JSON‑LD 裡加上這些屬性,像這樣:
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "蘋果手機",
  "priceCurrency": "TWD",
  "price": "3999"
}
  • 警告三:屬性值格式不符
    • 日期必須是 YYYY-MM-DD 或 ISO8601 格式。
    • 若寫成 2025/08/19,工具會抱怨。

進階技巧

  • 使用多個 schema 在同一頁面
    可以在 <script> 標籤裡放兩段 JSON‑LD。測試工具會一次顯示所有結果,例如同時有 Article 與 FAQPage。

  • 查看 Rich Results 範例
    在測試結束畫面,你可以點擊「Open in Structured Data Testing Tool」或直接複製結果到 Google Search Console,確認是否能產生豐富卡片。

最後提醒

  • 不要只靠工具:工具只是初步檢測,真正的搜尋呈現還得看 Google 的爬蟲抓取。建議把修正過的頁面提交給 Search Console 的「網址測試」功能,再確認是否已被索引。

  • 保持更新Schema.org 定期更新;若你使用的新屬性不在工具裡顯示,先到官方文件檢查。Google 也會調整支援的 Rich Results 類型,經常查看官方公告。

Structured Data Studio 進階設定指南

Structured Data Studio 進階設定指南

這份指南帶你從基礎到進階,完整掌握 Structured Data Studio 的各項功能。無論是想讓結構化資料更精準、還是要自動排程驗證,都能在這裡找到實用技巧。

1. 基礎設定檢查
  • Schema Type:先確定你使用的 schema 類型(例如 Product, FAQPage 或 Article)。
  • 必填屬性:對照官方文件,確認所有必填欄位已被填寫。若漏掉,搜尋引擎可能不會索取該資料。
  • JSON‑LD 格式:確保輸出的 JSON 片段符合語法規範,可以使用線上驗證工具快速檢查。
2. 高階功能使用
2.1 動態 Schema Mapping
  • 利用資料庫欄位與 schema 屬性之間的映射表,讓每個產品頁面自動填入對應資訊。
  • 範例:將 products.price 映射到 offers.price,程式碼片段如下:
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "$product_name$,"
  "offers": {
    "price": "$products.price$",
    "priceCurrency": "TWD"
  }
} 
2.2 自訂模板
  • 若你網站使用多種內容類型,可以為每種類型建立獨立的 JSON‑LD 模板。
  • 在模板中加入條件判斷,根據頁面屬性動態顯示不同欄位。
3. 排程與自動化
3.1 CRON 任務設定
  • 在伺服器上設置 cron job,每日或每週執行一次資料產生腳本。
  • 範例:每天凌晨兩點更新所有產品頁面的 JSON‑LD,指令如下:

crontab -e

0 2 * * * /usr/bin/php /var/www/html/generate_schema.php > /dev/null 2>&1

3.2 API 整合
  • 若你使用 CMS 或第三方服務,透過 API 將最新資料推送給 Structured Data Studio。
  • 可設定 webhook,當商品資訊變動時即刻更新 JSON‑LD。
4. 常見問題解答

Q1: 為什麼我的結構化資料不被搜尋引擎索取?

  • 檢查必填欄位是否完整;
  • 確認 script 標籤位置正確,並未被 JavaScript 動態移除。

Q2: 產生的 JSON‑LD 有錯誤訊息怎麼處理?

  • 使用線上驗證工具逐行檢查;
  • 若出現語法錯誤,先把錯誤訊息貼到搜尋引擎社群討論區尋求協助。

排錯技巧:常見失敗原因與修正方法

在排除結構化資料失敗時,最先要做的事就是把流程拆成幾個小步驟,一次只管一件事。以下提供一套簡易檢查清單,配合常見錯誤說明與修正方法,讓你能快速找出問題所在。

工具快速檢查流程

  • 先在 Google Search Console 的「結構化資料」報表中確認是否已收到任何警示。<br>若有,點開報告即可看到錯誤訊息的詳細說明與發生頁面。
  • 接著使用 Schema.org 官方的 JSON-LD 驗證器(https://jsonld.com/)或 Google 的 Rich Results Test(https://search.google.com/test/rich-results),把頁面的 URL 或直接貼上 JSON-LD 內容進行測試。
  • 若兩個工具都報錯,說明結構化資料本身就有語法問題;若只在 Search Console 報錯,那可能是抓取或權限設定的問題。

常見失敗原因與修正方法

  • 結構化資料語法錯誤<br>最常見的是 JSON-LD 的括號、引號或逗號寫錯,導致整段程式碼無法被解析。<br>修正技巧:
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "如何修正結構化資料",
  "author": {"@type": "Person","name": "小明"}
} // <‑‑ 注意最後一行不要有多餘的逗號或引號
  • URL 不一致或重複<br>若結構化資料裡的 url 與實際頁面 URL 不同,搜尋引擎會視為錯誤。<br>修正技巧:確認 HTML <link rel="canonical" href="..."> 與 JSON-LD 中的 mainEntityOfPageurl 欄位完全相同;若是多語系站點,要確保每個語言版本都有對應的 URL。

  • 權限設定問題(robots.txt、noindex)<br>如果頁面被 robots.txt 阻擋或加上 <meta name="robots" content="noindex">,搜尋引擎就不會抓取結構化資料。<br>修正技巧:

    • 檢查 robots.txt 是否有 Disallow: /example-page/;若是,改成 Allow 或移除該規則;
    • 確認 <meta name="robots" content="index,follow"> 正確放置在 <head> 區塊;
    • 若使用 CMS,確認相關插件或設定沒有自動加上 noindex。
  • 內容更新延遲<br>有時候結構化資料寫得沒問題,但搜尋引擎還沒抓到最新的 HTML 或 JSON-LD,結果仍會顯示舊版錯誤。<br>修正技巧:
    • 在 Search Console 中點擊「索引狀態」下的「重新提交 URL」,強制讓爬蟲盡快抓取;
    • 若是大型網站,考慮使用 sitemap 的 <lastmod> 標籤告訴搜尋引擎內容已更新;
    • 使用瀏覽器開發者工具查看實際載入的 JSON-LD 是否與你預期相符。

排錯流程示範:從報錯到修正

  • 步驟一:在 Search Console 的「結構化資料」報表看到 https://example.com/product/123 報錯,訊息顯示 "Missing required property 'name'"。
  • 步驟二:複製該頁面 URL 到 Rich Results Test,測試結果同樣顯示缺少 name
  • 步驟三:開啟瀏覽器 DevTools,找到 <script type="application/ld+json"> 內部內容。發現原本寫成 "productName" 而非「name」的屬性。
  • 步驟四:把 productName 改為 name,重新載入頁面並再次測試;此時 Rich Results Test 成功顯示完整結果。
  • 步驟五:回到 Search Console,點擊「重測」或手動提交 URL,等候搜尋引擎更新後即可看到錯誤消失。

這樣的流程不僅能快速定位問題,也能確保改正後結構化資料真正被搜尋引擎抓到。

小技巧總結

  • 先驗證、再提交:在任何部署前,先用工具跑一遍驗證,避免把錯誤直接送進搜尋引擎。
  • 保持一致:URL、canonical、JSON-LD url 必須完全相同,才能減少抓取時的混淆。
  • 定期檢查:每個月或每次大更新後,都跑一次 Search Console 報表與 Rich Results Test,確保沒有遺漏。

只要把這幾個步驟養成習慣,即使是新手也能在遇到結構化資料問題時快速找出根本原因並修正。祝你排錯順利~

利用 Cron Job 定時更新 Schema

想要讓網站的結構化資料(Schema)永遠保持最新,最簡單的方法就是利用 Cron Job 定時抓取並寫入。以下將一步步示範如何在 Linux 環境下完成這個流程,從撰寫腳本到設定排程,再到驗證結果是否正確。

步驟概覽

  • 撰寫一段簡易的 Shell 腳本,負責向 API 抓取最新的 Schema JSON 並寫入指定位置。
  • 在 crontab 中加入排程條目,使腳本每天/每小時自動執行。
  • 使用 curl 或瀏覽器直接檢查產生的文件,確認格式是否正確且搜尋引擎能讀到。

Cron 語法說明

Cron 的排程語法由五個欄位組成:

  • 分鐘(0‑59)
  • 小時(0‑23)
  • 日期(1‑31)
  • 月份(1‑12)
  • 星期幾(0‑6,0 或 7 為星期日)

舉例:若想每天凌晨 3 點執行腳本,可寫成 0 3 * * *

撰寫腳本範例

以下示範一個簡單的 Bash 腳本,假設網站後端提供 /api/schema 這個接口,可直接回傳 JSON。腳本會將結果儲存到 public/structured-data.json

#!/usr/bin/env bash

設定變數

API_URL='https://example.com/api/schema'
OUTPUT_PATH='/var/www/example/public/structured-data.json'

抓取資料並寫入檔案

curl -s "$API_URL" > "$OUTPUT_PATH"

設定正確的權限,讓網頁伺服器能讀取

chmod 644 "$OUTPUT_PATH"

echo "Schema 更新完成:$(date)" >> /var/log/schema-update.log

說明:

  • -s 選項讓 curl 靜默執行,避免輸出進度條。
  • 產生的日誌可協助追蹤失敗情況。

設定 crontab

  1. 以該網站使用者登入(或 root),輸入 crontab -e 開啟排程編輯器。
  2. 在檔案最後加入以下一行,假設腳本放在 /usr/local/bin/update-schema.sh

0 3 * * * /usr/local/bin/update-schema.sh

說明:這條規則表示每天凌晨 3 點執行一次。若想更頻繁,例如每小時跑一次,只需改成 0 */1 * * *

完成後儲存並離開編輯器,crontab 會自動載入新設定。

驗證結果

  1. 直接檢查檔案

cat /var/www/example/public/structured-data.json | head -n 20
確認內容是合法的 JSON,且包含你期望的結構化資料。若看到 null 或空字串,代表 API 回傳失敗或腳本執行錯誤。

  1. 使用搜尋引擎工具:在「Google 搜尋控制台」裡面,有「結構化資料測試工具」。將產生的檔案 URL(如 https://example.com/structured-data.json)貼進去,確認沒有語法錯誤。

  2. 排程日誌

tail -f /var/log/schema-update.log
若有 curl: (6) 等錯誤訊息,說明網路或 API 有問題,需要先修正。

常見問題與排除方法

  • 腳本無法執行:確認檔案權限為可執行(chmod +x /usr/local/bin/update-schema.sh)。
  • API 回傳 500 錯誤:先用 curl -v 手動測試,確定 API 本身正常。若是暫時性故障,可在腳本中加入重試機制。
  • Cron 執行環境變數缺失:cron 的執行環境比常規 shell 簡單,必要的 PATH 可能不見。可於腳本開頭手動設定,例如 export PATH=/usr/local/bin:/usr/bin
  • 檔案權限問題:若網頁伺服器無法讀取產生的 JSON,請確定寫入目錄與檔案屬性正確(通常 644 權限即可)。

只要排除上述常見錯誤,一般來說 Cron Job 就能穩定地保持 Schema 的最新狀態。