Community寫作與編輯github.com

shaul1991/structured-data

根據 Google 與 Naver 官方文件,建立與檢查 JSON-LD 結構化資料,涵蓋 Event、Organization、WebSite、BreadcrumbList 與 ItemList 等類型。

structured-data 是什麼?

此技能提供結構化資料(JSON-LD)的撰寫與驗證指引,嚴格遵循 Google Search Central 與 Naver Search Advisor 的官方文件。它支援五種主要類型:Event、Organization(搭配 sameAs)、WebSite、BreadcrumbList 與 ItemList,並特別說明兩大搜尋引擎在支援度上的差異(例如 Event 在韓國 Google 無成效)。技能強調資料必須與頁面可見內容一致,避免填入不確定的資訊,並提供完整的樣板與實作規則。可用於開發者生成或審查結構化資料,提升搜尋結果的豐富度。核心檔案為 SKILL.md,透過 JSON-LD 格式嵌入於 HTML 的 `<script>` 標籤中。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shaul1991/seo-skills/tree/HEAD/skills/structured-data

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

結構化資料 (JSON-LD)

依據:Google Search Central 結構化資料文件與 Naver Search Advisor 結構化資料指南(2026-11-04 確認)。若需判斷,請重新參閱原文。

共同原則

  • 僅填入與可見本文相符的值。不知道的價格、時間、庫存、評分請留空,不要自行編造(Google AI 功能文件也建議「結構化資料應與可見文字一致」)。
  • 即使加入標記,也不保證能顯示為豐富結果或曝光(Google 與 Naver 皆已明確說明)。
  • 格式預設使用 JSON-LD(Google 支援,Naver 建議使用 Microdata 或 JSON-LD)。置於 <head> 或 <body> 的 <script type="application/ld+json"> 中。
  • 驗證工具:Google 結構化資料測試工具、Schema Markup Validator(Naver 指南建議使用 schema.org 工具)、以及 seo-orchestrator Skill 中的 scripts/seo-check.mjs(僅檢查 JSON 解析與必要屬性)。

支援差異 (2026-11-04)

類型GoogleNaver
Event有事件搜尋環境文件。⚠️ 支援地區列表中無韓國(澳洲、巴西、加拿大、德國、印度、拉丁美洲、西班牙、英國、美國)無指南
Organization/Person + sameAs組織資訊網站關聯頻道(根頁面,name、url、sameAs 為必填)
WebSite網站名稱(首頁)—
BreadcrumbList支援支援(name 必填,position 選填)
ItemList(輪播)僅部分類型有輪播(ListItem)指南

若為韓國地區的活動網站:Event 標記仍可保留,以確保資料正確整理並因應未來其他地區或擴展需求,但目前不應假設韓國 Google 搜尋會顯示活動豐富結果。成效應依一般搜尋結果(標題、摘要)與 Search Console 判斷。

Event(依 Google 規範)

規則(Google 結構化事件資料):

  • 每個事件應在其**專屬 URL(詳細頁面)**上標記,而非事件列表或行程頁面。
  • 必填:name(活動名稱,禁止使用場地名稱、價格或「立即購票」等宣傳用語)、startDate(ISO-8601)、location(Place + name + address)。
  • 建議填寫:endDate、eventStatus、description(活動內容,勿重複日期或場地)、image(建議寬度 1,920px、最小 720px,提供 16:9、4:3、1:1 等多種尺寸)、offers、organizer、performer、previousStartDate。
  • 日期:若不知道時間,只填日期(如 "2026-12-04")。請勿填入 T00:00:00。若有時間,需包含 UTC 偏移(如 2026-12-04T10:00:00+09:00)。
  • 若活動持續多天,請同時填寫 startDate 與 endDate。若每天需獨立售票,則為每天建立一個 Event。
  • 若活動同時在多個場地舉行,則為每個場地建立一個 Event。
  • 僅在正式確認免費入場時,才將 offers.price 設為 0。若尚未開始銷售,可省略 availability,validFrom 則填入開始銷售時間。
  • 變更狀態時,僅更新 eventStatus,其他值保持不變:
    • 取消:EventCancelled(禁止刪除 startDate 與 location)
    • 延期、日期未定:EventPostponed(保留原始 startDate)
    • 確定新日期:EventRescheduled + 新的 startDate/endDate + 選擇性填入 previousStartDate
  • 請勿將非活動項目(如優惠券、營業時間、折扣販售)標記為 Event。會員或邀請制活動也不屬於事件環境的範疇。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "<官方活動名稱與屆數>",
  "startDate": "<YYYY-MM-DD 或 YYYY-MM-DDThh:mm:ss+09:00>",
  "endDate": "<YYYY-MM-DD>",
  "eventStatus": "https://schema.org/EventScheduled",
  "location": {
    "@type": "Place",
    "name": "<場地名稱>",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "<道路名地址>",
      "addressLocality": "<市/區>",
      "addressRegion": "<市/道>",
      "postalCode": "<郵遞區號>",
      "addressCountry": "KR"
    }
  },
  "image": ["<https://.../16x9.jpg>", "<https://.../4x3.jpg>", "<https://.../1x1.jpg>"],
  "description": "<活動內容摘要,請勿重複日期與場地>",
  "organizer": { "@type": "Organization", "name": "<主辦單位>", "url": "<主辦單位官方 URL>" }
}
</script>

僅在價格與銷售資訊經官方確認後,才加入 offers。

列表頁面

  • 地區或月份列表頁面中,請勿放入多個 Event(Google 僅支援單一活動頁面)。請改用 BreadcrumbList,並在必要時加入包含詳細 URL 的 ItemList。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "url": "https://example.com/events/<id-1>" },
    { "@type": "ListItem", "position": 2, "url": "https://example.com/events/<id-2>" }
  ]
}
</script>

WebSite(Google 網站名稱,僅限首頁)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "<網站名稱>",
  "alternateName": ["<縮寫>"],
  "url": "https://example.com/"
}
</script>

請使用與 og:site_name 及首頁 <title> 相同的名稱。來源:網站名稱

Organization + sameAs(Naver 網站關聯頻道,根頁面)

Naver 用於分析的關聯頻道網域(2026-11-04):Naver 部落格、SmartStore、知識 iN、Chzzk、Clip、Karrot、Threads、Instagram、YouTube、KakaoStory、KakaoTalk 頻道、Tistory、TikTok、Facebook、X(Twitter)。不保證一定會曝光。

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "<網站名稱>",
  "url": "https://example.com/",
  "sameAs": [
    "https://cafe.naver.com/<咖啡廳>",
    "https://pf.kakao.com/<頻道>",
    "https://x.com/<帳號>"
  ]
}
</script>
  • 僅加入實際營運中的頻道,請勿預先放入尚未開通的頻道 URL。
  • Daum 也使用相同格式(Person/Organization + sameAs),但支援的網域不同:YouTube、Facebook、X、Instagram、Google Play、Apple Store、KakaoStory、Daum Cafe、KakaoTV、Tistory、Brunch(daum-search)。可將兩個搜尋引擎的實際頻道放入同一個區塊。
  • Naver Cafe 目前未列在上方關聯頻道清單中(2026-11-04)。仍可加入,但不應假設 Naver 會將其視為關聯頻道。
  • 來源:網站關聯頻道

BreadcrumbList(Google 與 Naver 共通)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "<上層分類名稱>", "item": "https://example.com/<上層>" },
    { "@type": "ListItem", "position": 2, "name": "<下層分類名稱>", "item": "https://example.com/<上層>/<下層>" }
  ]
}
</script>
  • Naver:請勿使用「首頁」、「top」等通用詞,應使用能說明頁面的名稱,依範圍由大至小排序,並避免使用過長文字、僅含數字或特殊字元的名稱。
  • 來源:Naver BreadcrumbList、Google 麵包屑導覽

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能