YAML的設計核心是「人類可讀性高」,它的結構完全依賴縮排和特定的符號來決定。

核心規則

YAML三個禁忌:

  1. 只能使用「空格」縮排
    絕對不能使用Tab鍵。如果使用Tab鍵,編譯時網站一定會報錯。通常建議固定使用2個空格作為一層縮排。

  2. 冒號後面一定要有空格
    寫設定時,冒號後面必須加上一個空格( 例如title: 我的文章 ),只寫 title:我的文章 是錯誤的。

  3. 大小寫敏感
    TitleTITLEtitle 在YAML裡被視為完全不同的東西。

四大基礎語法與資料型態

在Markdown的文章開頭(Front Matter),會用到的語法主要有以下四種:

基礎鍵值對(Key-Value)

最簡單的設定,用來宣告單一屬性。

yamltitle: 我的第一篇文章 # 字串:通常不需要加引號
draft: false # 布林值:必須是小寫的true或false
weight: 10 # 整數
price: 99.9 # 浮點數

字串與引號(String)

單引號會將內容視為純字串(Literal String)。裡面的所有字元都不會被轉義(Escape),寫什麼就是什麼。雙引號會解析跳脫字元(Escape Characters),用換行、縮排等特殊字元時用,如寫 text: "第一行\n第二行" 將會換行。定義物件(Key)時,YAML的Key通常不加引號,保持乾淨。布林值、數字、Null亦不加引號。

  • 使用時機對照表
    情況無引號' '" "
    一般純文字 ( hello )建議使用可用可用
    包含特殊符號 ( : , # , [] )不可最安全可用
    強制轉為字串 ( true , 123 )不可,變布林/數字最安全可用
    需要跳脫字元 ( \n 換行)不可,失效不可,失效可用

範例:

yamldate: "2026-09-03" # 日期時間:強烈建議加上引號,避免被誤判
status: true # 布林值
count: 25 # 數字
description: '帶有 "雙引號" 的描述文字' # 內外引號交叉使用,需要在字串裡面包含引號時使用

陣列 / 列表(Array / List)

用來設定多個同類型的資料(例如:文章標籤、分類)。

  • 標準寫法:換行,縮排2格,開頭用短破折號 - 再加一個空格。
yamltags:
  - 網站架設
  - Hugo
  - 教學
  • 行內寫法:

使用中括號 [] 包起來。

yamltags: ["網站架設", "Hugo", "教學"]

物件 / 對應表(Object / Map)

物件/對應表是由「鍵值對」組成的結構。當某個設定下還有更複雜的子設定時(例如:作者資訊、SEO設定)使用。

  • 標準寫法:換行並縮排。(嚴禁Tab
user:
  id: 101
  name: "張小明"
  role: "admin"
  is_active: true
  • 行內寫法:使用大括號 {} 包起來。
config: { theme: "dark", language: "zh-TW", auto_save: true }
  • 巢狀物件(物件裡面還有物件)(嚴禁Tab
# 飯店房間的設定物件
room_setting:
  category: "豪華雙人房"
  price_per_night: 4500
  specifications:
    bed_type: "King Size"
    has_bathtub: true
    view: "ocean"

進階技巧:

多行文字處理

如果文章摘要(Description)很長,想在YAML裡直接換行寫,可以使用 |> 符號:

  1. 保留換行符號 | (Literal Block)
    網頁渲染時,你在YAML裡怎麼換行,它就怎麼換行。
yamldescription: |
  這是第一行文字。
  這是第二行文字,網頁上也會直接換行。
  1. 折疊換行符號 > (Folded Block)
    在YAML裡換行寫,但網頁渲染時,它會自動把這些行連成一整句長文字(中間自動補空格)。
yamldescription: >
  這是一段很長很長的文章摘要,
  雖然我在這裡換行了,
  但最後輸出的時候它會變成同一行。

實戰演練

把上述所有語法組合起來成一個完整的Markdown YAML範本,一篇文章的開頭看起來就像這樣:

---
title: "這是一篇 Hugo 測試文章"
weight: 10
draft: false
date: 2026-01-01
tags:
  - Hugo
  - Markdown
  - YAML教學

author:
  name: "阿明"
  email: "aming@example.com"

seo_meta: { keywords: ["hugo", "yaml"], robots: "index, follow" }

description: |
  這是第一行摘要。
  這是第二行摘要。
  這裡的換行在網頁渲染時會被保留。

summary: >
  這是一段非常長的文字,
  雖然在 YAML 編輯器裡面為了方便閱讀而分行編寫,
  但是在解析時會被連成同一個段落。
---

這裡開始才是你的Markdown文章內文...