YAML的設計核心是「人類可讀性高」,它的結構完全依賴縮排和特定的符號來決定。
核心規則
YAML三個禁忌:
只能使用「空格」縮排
絕對不能使用Tab鍵。如果使用Tab鍵,編譯時網站一定會報錯。通常建議固定使用2個空格作為一層縮排。冒號後面一定要有空格
寫設定時,冒號後面必須加上一個空格(例如title: 我的文章),只寫title:我的文章是錯誤的。大小寫敏感
Title、TITLE和title在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裡直接換行寫,可以使用 | 或 > 符號:
- 保留換行符號
|(Literal Block)
網頁渲染時,你在YAML裡怎麼換行,它就怎麼換行。
yamldescription: |
這是第一行文字。
這是第二行文字,網頁上也會直接換行。
- 折疊換行符號
>(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文章內文...