JSON-LD Schema 完整教學:答案引擎優化(AEO)必學嘅 FAQ / HowTo / LocalBusiness / Service 4 種標記
直答: JSON-LD 係放喺網頁 <head> 嘅一段結構化資料,等 AI 爬蟲快速確認「呢頁講緊乜、邊間公司、幾錢、點做」。寫法係用 <script type="application/ld+json"> 包住一段 JSON,最實用嘅 4 種係 FAQPage(常見問題)、HowTo(步驟教學)、LocalBusiness(本地商戶)、Service(服務項目)。以下附完整可 copy 嘅範例。
測試環境同日期: 本文範例喺 Node.js 20 + Next.js 16(App Router)測試通過,用 Google Rich Results Test 同 Schema.org Validator 驗證,最後更新 2026-08-23。JSON-LD 語法本身跨框架通用(WordPress、Webflow、純 HTML 一樣可用),但插入方式(server-render vs client inject)會因框架而異,下文會講點揀。
技術文過期快,schema.org vocabulary 同各引擎嘅解讀方式每年都有微調,如果你睇緊呢篇文已經係 2027 年或之後,建議去 aeo.weblnno.info 做一次診斷,睇下你間公司現時嘅 schema 覆蓋率仲啱唔啱用。
Schema 唔係萬能藥,但一定要部署
想知 AI 而家點講你間公司?
輸入網址,1–2 分鐘睇 ChatGPT / Gemini 有冇推薦你 — 唔使登記
先講白:業界最嚴謹嘅一個 controlled study(Ahrefs,1,885 個已被 AI 引用嘅頁面)發現,幫已經被引用嘅頁加 schema,對 ChatGPT / AI Mode 嘅引用率提升幾乎係雜訊範圍內(+2.2%、+2.4%),對 Google AI Overviews 仲係統計顯著負(-4.6%)。即係話——如果你間公司已經被 AI 引用緊,加多幾個 schema 唔會令你「引用率翻倍」。
咁點解仲要做?因為呢個 study 量度緊嘅係「已被引用頁」嘅邊際提升。Schema 真正嘅價值喺兩件事:
- 幫未被發現嘅頁入 retrieval pool。 AI 爬蟲爬到你網站時,schema 等佢快速判斷「呢頁值唔值得放入索引/候選答案池」,冇 schema 唔代表爬唔到,但揀你嘅機會會低過有結構化提示嘅對手。
- 餵 Knowledge Graph 做 entity disambiguation。 Organization/LocalBusiness schema 配合
sameAs連返 Wikidata、Google Business Profile、LinkedIn,等 Gemini 呢類引擎清楚知道「呢個品牌名對應緊邊個實體」,減少估錯(hallucination)。
結論:schema 照部署,但唔好當佢係主力槓桿去谷 citation 數字,佢嘅角色係「打底」而唔係「翻盤」。
一個常見誤區:靠 JSON-LD 餵答案,但可見 HTML 冇對應內容
呢個係好多香港網站(包括 Webka 自己以前)踩過嘅坑:以為將答案寫喺 JSON-LD 入面,AI 就會讀到,於是可見畫面淨係得個標題,實際答案文字只存在於 <script> block 入面。
問題係:LLM 提取內容嘅主要路徑係可見文字,JSON-LD 會被 tokenize 成純文字一齊處理,但佢嘅角色偏向「routing / 分類」用途,唔係取代可見答案。如果你個 FAQ schema 寫死咗一個價錢,但頁面畫面完全冇顯示呢個數,AI 讀到嘅資訊同用戶睇到嘅唔一致,甚至可能完全唔用嗰段。
鐵律:JSON-LD 入面嘅每一句答案,都要喺可見 HTML 度有一句幾乎一模一樣嘅文字。 Schema 係補充,唔係替代。
一個更技術嘅陷阱:Server-render vs Client-inject
如果你用 React / Next.js / Vue 呢類前端框架,最常見嘅錯誤係用 next/script 或者 JS 動態插入 schema——即係瀏覽器執行 JS 之後先喺 DOM 度出現 <script type="application/ld+json">。
好多 AI 爬蟲(GPTBot、ClaudeBot、PerplexityBot)唔行 JavaScript,佢哋攞到嘅係第一次 request 返嚟嘅 raw HTML。如果你個 schema 係靠 client-side JS 注入,爬蟲攞到嘅原始碼度根本冇呢段 <script>,等於冇部署過。
自查方法(30 秒):
curl -A "GPTBot" https://你嘅domain.com/服務頁 | grep -c "application/ld+json"如果結果係 0,即係你嘅 schema 用緊 client-inject,爬蟲讀唔到。應該要係 1 或以上(睇你一頁放幾多個 schema block)。
Next.js App Router 正確做法: 喺 Server Component 入面直接 return 一個 <script type="application/ld+json"> tag,唔好用 next/script 或者 useEffect 注入——Server Component 出嘅係 server-render HTML,爬蟲第一次 request 就攞到。
// app/services/[slug]/page.tsx — Server Component,直接 render,唔用 next/script
export default function ServicePage() {
const schema = {
"@context": "https://schema.org",
"@type": "Service",
name: "AI 搜尋優化診斷",
provider: { "@type": "Organization", name: "Webka" },
};
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
{/* 頁面其餘內容 */}
</>
);
}4 種必學 Schema(可直接 copy 嘅範例)
1. FAQPage — 常見問題
用喺任何有 Q&A 段落嘅頁面。要求:頁面畫面上一定要有對應嘅可見 FAQ(H3 問句 + 答案),schema 淨係將呢啲已存在嘅文字結構化,唔係憑空造多幾條。
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "JSON-LD schema 一定要用先可以被 AI 引用?",
"acceptedAnswer": {
"@type": "Answer",
"text": "唔一定,冇 schema 都可以被引用,但 schema 幫 AI 更快判斷你頁面內容分類,等於加快入索引池嘅速度,尤其對未被發現嘅新頁面幫助較大。"
}
},
{
"@type": "Question",
"name": "一個頁面可以放幾多個 schema block?",
"acceptedAnswer": {
"@type": "Answer",
"text": "冇上限,但要每個 @type 對應返頁面實際存在嘅內容區塊,例如一個服務頁可以同時有 Service + FAQPage + BreadcrumbList 三個 schema block。"
}
}
]
}2. HowTo — 步驟教學
用喺任何「點做/教學」類內容,好似呢篇文本身。要求:step 數量要同頁面實際 H2/H3 步驟一致。
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "點樣喺 Next.js 網站部署 JSON-LD Schema",
"step": [
{
"@type": "HowToStep",
"name": "確認 schema 類型",
"text": "根據頁面內容性質,揀 FAQPage、HowTo、LocalBusiness 或 Service 其中一種或多種。"
},
{
"@type": "HowToStep",
"name": "喺 Server Component 度直接 render script tag",
"text": "唔好用 next/script 或 useEffect 注入,確保 curl 攞到嘅 raw HTML 已含 schema。"
},
{
"@type": "HowToStep",
"name": "確保可見 HTML 有對應文字",
"text": "schema 入面嘅每句答案,頁面畫面都要有幾乎一模一樣嘅可見文字。"
},
{
"@type": "HowToStep",
"name": "用工具驗證",
"text": "用 Google Rich Results Test 或 Schema.org Validator 檢查語法有冇錯誤。"
}
]
}3. LocalBusiness — 本地商戶
用喺有實體地址/服務範圍嘅香港中小企。要求:地址、電話一定要同 Google Business Profile 一致——呢個係 Webka 自己踩過嘅坑(live serve 緊已搬走嘅舊地址 schema,等於主動餵 AI 錯資料),改咗地址一定要三個地方同步:GBP、網站可見文字、schema。
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "你間公司名",
"image": "https://你嘅domain.com/logo.jpg",
"telephone": "+852-xxxx-xxxx",
"address": {
"@type": "PostalAddress",
"streetAddress": "你嘅街道地址",
"addressLocality": "香港",
"addressCountry": "HK"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "18:00"
}
],
"sameAs": [
"https://www.facebook.com/你嘅專頁",
"https://www.linkedin.com/company/你嘅公司"
]
}4. Service — 服務項目
用喺服務型公司(agency、顧問、專業服務)嘅服務頁。可以巢狀 offers 講清楚收費結構,令 AI 引用時連價錢都答得準。
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "AI 搜尋優化診斷",
"provider": {
"@type": "Organization",
"name": "Webka",
"url": "https://webka.hk"
},
"areaServed": {
"@type": "AdministrativeArea",
"name": "香港"
},
"offers": {
"@type": "Offer",
"priceCurrency": "HKD",
"url": "https://aeo.weblnno.info"
}
}驗證清單:部署完之後點確認真係得
curl -A "GPTBot" 你嘅網址 | grep "application/ld+json"— 確認 raw HTML 有出現 schema,唔係要等 JS 執行先出現。- 貼去 Google Rich Results Test — 檢查語法有冇 error。
- 貼去 Schema.org Validator — 交叉驗證。
- 人手核對:schema 入面每句答案,喺頁面畫面度搵唔搵到幾乎一模一樣嘅可見文字。
- 用 Chrome DevTools「Disable JavaScript」重新載入頁面 — 主要內容(包括 schema 覆蓋嘅答案)唔應該消失。
以上 5 步全部過關,先算真正部署完成。淨係「有加 script tag」唔代表 AI 讀得到。
FAQ
FAQPage schema 一定要對應可見嘅 FAQ 區塊先可以用?
係。Google 明文要求 FAQPage schema 對應頁面上實際可見嘅問答內容,唔可以憑空喺 schema 度加問題但畫面冇顯示。除咗違反 Google 準則,AI 引擎亦會因為「schema 講嘅嘢」同「可見文字」對唔上而降低對呢頁嘅信任度。
加咗 schema 之後,幾耐先見到 AI 引用率有變化?
冇固定時間表,要視乎 AI 爬蟲重新爬取你網站嘅頻率同引擎更新索引嘅週期,一般要幾星期到幾個月先反映到。而且根據 Ahrefs 嘅 controlled study,schema 對已被引用頁嘅邊際提升本身就細,唔應該預期「加完 schema 即刻爆升」——佢嘅作用喺幫未被發現嘅頁入池,唔係即時特效藥。
一個網站要用幾多種 schema 先夠?
冇「夠唔夠」呢個絕對數字,原則係「頁面實際有乜內容就標記乜」:Organization/LocalBusiness 通常 site-wide 一個就夠(放喺全站共用嘅 layout),FAQPage、HowTo、Service、Product 呢類就跟返個別頁面嘅內容性質逐頁加。唔好為咗湊數量勉強加唔啱嘅 schema type。
JSON-LD 同 microdata / RDFa 有咩分別,應該揀邊種?
三種都係 schema.org 認可嘅格式,分別喺於寫法:JSON-LD 係獨立一段 <script> block,同頁面 HTML 結構分離;microdata / RDFa 就要直接喺 HTML tag 度加 attribute(例如 itemprop)。Google 官方推薦 JSON-LD,原因係佢改動同維護都唔使動到頁面 HTML 結構,出錯機率低過另外兩種,本文亦只示範 JSON-LD。
用 WordPress / Webflow 呢類 CMS,冇得直接寫 Server Component,點部署?
本文示範嘅 JSON-LD 語法本身係框架無關,WordPress 可以用支援自訂 <head> code 嘅 plugin,或者喺 theme 嘅 header.php 直接寫死 <script> tag(呢個等於 server-render,因為 PHP 係喺 server 執行完先送 HTML 出嚟);Webflow 可以喺頁面設定嘅「Custom Code」入面加入 head code。核心原則不變:確保呢段 script 出現喺伺服器送出嘅第一次 HTML,唔好靠前端 JS 額外注入。
想知你間公司網站而家有冇部署啱嘅 schema、覆蓋率去到邊? 去 aeo.weblnno.info 輸入網址做一次免費 AI 曝光診斷,即場問五引擎(ChatGPT、Gemini、Claude、DeepSeek、Perplexity),1–2 分鐘睇到你嘅結構化數據缺口喺邊、AI 爬蟲實際讀唔讀到你個站。有問題想問技術細節,可以電郵 hello@webka.hk。