Skip to content

VideoObject 與 ImageObject:影音與圖片的搜尋曝光

VideoObject 與 ImageObject:影音與圖片的標記

這兩個型別讓 影片與圖片本身 成為搜尋結果的一部分,而不只是頁面的附屬品。

本頁的範例只寫在程式碼區塊裡

這一頁沒有影片,也沒有需要宣告授權的圖片,所以 檔頭沒有真的注入這兩種標記。標記不存在的內容是 結構化資料的政策紅線

VideoObject

json
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "如何設定 robots.txt",
  "description": "三分鐘完成爬蟲規則的設定與驗證。",
  "thumbnailUrl": ["https://example.com/thumb-1280.jpg"],
  "uploadDate": "2026-09-07T10:00:00+08:00",
  "duration": "PT3M20S",
  "contentUrl": "https://example.com/videos/robots-txt.mp4",
  "embedUrl": "https://example.com/embed/robots-txt",
  "publisher": {
    "@type": "Organization",
    "name": "某某科技",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  }
}

欄位一覽

欄位必要性說明
name必填影片標題
description必填影片描述
thumbnailUrl必填縮圖網址
uploadDate必填上傳日期
duration強烈建議搜尋結果會顯示時長
contentUrl建議影片檔案的網址
embedUrl建議嵌入播放器的網址
expires選填到期時間(有版權期限時)
interactionStatistic選填觀看次數
hasPart選填關鍵時刻

contentUrl 與 embedUrl 至少要有一個

要取得影片預覽(搜尋結果中可直接播放的版位),搜尋引擎需要拿得到影片本身。兩者填一個就好,都填也可以。

縮圖要求

項目要求
最小尺寸60 × 30 像素
建議尺寸1280 × 720 或更高
格式JPEG、PNG、WebP 等常見格式
可爬取不能被 robots.txt 擋住

可以提供多種比例讓搜尋引擎挑:

json
"thumbnailUrl": [
  "https://example.com/thumb-16x9.jpg",
  "https://example.com/thumb-4x3.jpg",
  "https://example.com/thumb-1x1.jpg"
]

duration 的格式

這是最常寫錯的欄位

用 ISO 8601 的 期間格式

時長寫法
3 分 20 秒PT3M20S
8 分 30 秒PT8M30S
1 小時 5 分PT1H5M
45 秒PT45S

P 開頭代表 Period,T 之後才是時間部分。少了 TP8M 會被解讀成「8 個月」。

js
// 從秒數轉成期間格式
function toDuration(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = seconds % 60;
  return `PT${h ? `${h}H` : ''}${m ? `${m}M` : ''}${s ? `${s}S` : ''}`;
}

toDuration(200); // PT3M20S

關鍵時刻

關鍵時刻(Key Moments)讓搜尋結果顯示影片的章節,使用者可以直接跳到想看的段落。有兩種方式。

方式一:手動標記

hasPart 加上 Clip

json
{
  "@context": "https://schema.org",
  "@type": "VideoObject",
  "name": "如何設定 robots.txt",
  "description": "三分鐘完成爬蟲規則的設定與驗證。",
  "thumbnailUrl": ["https://example.com/thumb.jpg"],
  "uploadDate": "2026-09-07T10:00:00+08:00",
  "duration": "PT3M20S",
  "contentUrl": "https://example.com/videos/robots-txt.mp4",
  "hasPart": [
    {
      "@type": "Clip",
      "name": "建立檔案",
      "startOffset": 0,
      "endOffset": 45,
      "url": "https://example.com/videos/robots-txt?t=0"
    },
    {
      "@type": "Clip",
      "name": "寫入規則",
      "startOffset": 45,
      "endOffset": 150,
      "url": "https://example.com/videos/robots-txt?t=45"
    },
    {
      "@type": "Clip",
      "name": "驗證",
      "startOffset": 150,
      "endOffset": 200,
      "url": "https://example.com/videos/robots-txt?t=200"
    }
  ]
}
欄位說明
startOffset起始秒數(純數字,不是期間格式
endOffset結束秒數
url帶時間參數的網址

startOffset 用秒數,duration 用期間格式

同一個標記裡兩種時間表示法並存,很容易搞混:

  • duration: "PT3M20S"(期間格式的字串)
  • startOffset: 45(純數字秒數)

方式二:讓搜尋引擎自動偵測

頁面上有清楚的章節時間軸時,搜尋引擎可能自動抓取:

html
<ul>
  <li><a href="?t=0">00:00 建立檔案</a></li>
  <li><a href="?t=45">00:45 寫入規則</a></li>
  <li><a href="?t=150">02:30 驗證</a></li>
</ul>

手動標記較精確

自動偵測不保證會發生,也不保證章節切得跟您想的一樣。有明確章節的影片建議手動標記。

影片頁的其他要點

項目說明
影片要能被爬取影片檔案與縮圖都不能被封鎖
頁面上要有播放器標記的影片必須在頁面上真的能看
一頁一個主要影片多影片頁面用 ItemList 包起來
提供逐字稿文字內容讓搜尋引擎理解影片主題

逐字稿的價值被低估

搜尋引擎不會看影片內容。放一份逐字稿或詳細的摘要,等於把影片的資訊變成可索引的文字,這通常比標記本身帶來更多流量。

ImageObject

一般的內容圖片 不需要 單獨標記,有 alt 與適當的檔名就夠了。它主要用在兩個場合。

場合一:宣告授權資訊

搜尋結果的圖片旁可以顯示「可授權」標示:

json
{
  "@context": "https://schema.org",
  "@type": "ImageObject",
  "contentUrl": "https://example.com/photo.jpg",
  "license": "https://example.com/license",
  "acquireLicensePage": "https://example.com/photo/purchase",
  "creditText": "攝影:某某",
  "creator": {
    "@type": "Person",
    "name": "某某"
  },
  "copyrightNotice": "© 2026 某某"
}
欄位說明
contentUrl圖片本身的網址
license授權條款頁面
acquireLicensePage取得授權的頁面
creditText圖片出處標示
creator創作者
copyrightNotice版權宣告

license 與 acquireLicensePage 至少要有一個

要取得可授權標示,這兩個欄位至少要填一個。純粹標了 creatorcopyrightNotice 不會觸發那個呈現。

場合二:當其他型別的欄位值

這是 ImageObject 最常見的用途,出現在其他標記的欄位裡:

json
// Organization 的 logo
"logo": {
  "@type": "ImageObject",
  "url": "https://example.com/logo.png",
  "width": 512,
  "height": 512
}

// VideoObject 的 publisher logo
"publisher": {
  "@type": "Organization",
  "logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" }
}

要不要準備專用 sitemap

情況需要嗎
有結構化資料且圖片與影片都在同一網域不必
影片檔案放在其他網域需要
圖片由程式碼動態插入,爬蟲讀不到需要
圖片本身就是主要內容(作品集、圖庫)建議

結構化資料與專用 sitemap 高度重疊

兩者提供的資訊幾乎相同,而結構化資料還更完整(多了關鍵時刻、授權資訊)。有結構化資料就不必再做專用 sitemap,除非上表的例外情況。

一般網站地圖的做法見 網站地圖 sitemap.xml

影片 sitemap 的格式大致是這樣:

xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset
  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"
>
  <url>
    <loc>https://example.com/videos/robots-txt</loc>
    <video:video>
      <video:thumbnail_loc>https://example.com/thumb.jpg</video:thumbnail_loc>
      <video:title>如何設定 robots.txt</video:title>
      <video:description>三分鐘完成爬蟲規則的設定與驗證。</video:description>
      <video:content_loc>https://example.com/videos/robots-txt.mp4</video:content_loc>
      <video:duration>200</video:duration>
    </video:video>
  </url>
</urlset>

注意這裡的 duration 用的是 純秒數,與結構化資料的期間格式不同。

檢查清單

VideoObject

項目標準
四個必填欄位齊全必備
duration 為期間格式(含 T必備
contentUrlembedUrl建議
縮圖可被爬取必備
頁面上真的有播放器必備
startOffset 用純秒數必備
有提供逐字稿或詳細摘要建議

ImageObject

項目標準
只在需要宣告授權時單獨標記建議
licenseacquireLicensePage必備(若要授權標示)
一般圖片改用 alt建議

常見問題

VideoObject 的必填欄位有哪些?

名稱、描述、縮圖網址與上傳日期四個。要取得影片預覽還需要提供 contentUrlembedUrl 其中之一,duration 則是強烈建議填寫,因為搜尋結果會顯示它。

duration 要怎麼寫?

用 ISO 8601 的期間格式,例如:8 分 30 秒寫成 PT8M30S。字母 P 開頭代表期間,T 之後是時間部分,少了 T 會被解讀成月份。這是最常寫錯的欄位。

關鍵時刻怎麼標?

有兩種方式。一是用 hasPart 加上 Clip 物件標出每一段的起迄秒數與名稱;二是讓搜尋引擎自動偵測,只要頁面上有清楚的章節時間軸。手動標記較精確。

ImageObject 什麼時候需要單獨標記?

需要宣告授權資訊時。搜尋結果的圖片旁可以顯示可授權標示,那需要 licenseacquireLicensePage 欄位。一般的內容圖片只要有 替代文字 就夠,不必額外標記。

需要準備影片或圖片的 sitemap 嗎?

有結構化資料的話通常不必。兩者的資訊高度重疊,結構化資料還更完整。真正需要專用網站地圖的情況是影片檔案放在其他網域、或圖片由程式碼動態插入而爬蟲讀不到。

延伸閱讀

參考資料:Google 搜尋中心:影片結構化資料