快轉到主要內容
  1. 筆記/

AI回答// Hugo 內容架構

4 分鐘· loading · loading · · ·
Notes AI回答 Hugo
目錄

Hugo內容架構:
#

根據文檔,解釋Hugo內容架構
https://gohugo.io/content-management/page-bundles/

答–chatgpt
Hugo 的內容架構基於「內容目錄(content directory)」和「頁面捆綁(Page Bundles)」,透過目錄結構來組織不同類型的內容,讓 Hugo 能夠快速解析和生成網站。


1. 內容架構概述
#

Hugo 主要透過 content/ 目錄來存放網站的內容,每個 Markdown 文件 (.md) 代表一個網頁。根據存放方式,Hugo 內容可以分為 標準頁面(Single Page)列表頁面(List Page)

  • 單一頁面(Single Page):單一文章或獨立頁面,例如 /content/about.md 會對應 /about/ 頁面。
  • 列表頁面(List Page):負責顯示某類內容的索引,例如 /content/blog/ 目錄下的所有文章可自動生成 /blog/ 頁面。

2. 頁面捆綁(Page Bundles)
#

Hugo 提供 頁面捆綁(Page Bundles) 來管理每篇內容的相關資源(如圖片、數據檔案等)。頁面捆綁有兩種類型:

(1)單一頁面捆綁(Leaf Bundles)
#

  • 主要用於 單篇文章獨立頁面
  • 目錄內的 index.md 是主內容,其他文件是該頁面的附屬資源。
  • 例子:
    content/
    ├── about/
    │   ├── index.md   # 關於頁面
    │   ├── image.jpg  # 附屬圖片
    │   ├── data.json  # 附屬資料
    
    • about/ 目錄本身對應 /about/ 頁面。
    • index.md 是主內容,Hugo 會自動識別 image.jpgdata.json 作為這篇內容的資源。

(2)目錄列表捆綁(Branch Bundles)
#

  • 主要用於 文章分類列表頁面,包含多篇文章。
  • 目錄內的 _index.md 是該分類的主內容,其他 Markdown 檔案是該分類的子內容。
  • 例子:
    content/
    ├── blog/
    │   ├── _index.md      # 部落格首頁
    │   ├── post-1.md      # 文章1
    │   ├── post-2.md      # 文章2
    │   ├── images/
    │   │   ├── banner.jpg # 共用圖片
    
    • blog/ 目錄對應 /blog/ 頁面,_index.md 定義該頁面內容。
    • post-1.mdpost-2.md 代表單篇文章。
    • images/ 內的 banner.jpg 可供這個分類的文章共用。

3. URL 對應
#

Hugo 會根據 目錄結構 來產生對應的網址:

  • content/about/index.md/about/
  • content/blog/_index.md/blog/
  • content/blog/post-1.md/blog/post-1/

若要調整網址,可在 front matter(前置變數)中設定 slugurl


4. 內容引用與資源管理
#

使用 Hugo 頁面捆綁,內容可透過 Page Resources 來引用內部資源,例如:

{{ $image := .Resources.Get "image.jpg" }}
<img src="{{ $image.RelPermalink }}" alt="描述">

這讓內容與相關資源能夠更好地組織與管理。


5. 適用場景
#

頁面類型 適合用法
Leaf Bundle 單篇文章、獨立頁面(如 About 頁面)
Branch Bundle 文章分類、部落格列表、產品目錄

這樣的架構讓 Hugo 既能靈活處理單篇內容,也能組織大型網站的多層內容。這對於條漫網站來說,可以用 Leaf Bundle 來管理單篇漫畫,用 Branch Bundle 來分類不同作品或章節。

頁面種類:
#

問:
我在Hugo架站content/about下建立了_index-zh-tw.md檔案,但在該文章最下面卻顯示了「這裡還沒有任何文章」,有辦法去除嗎?

答–Claude ai
這個問題在 Hugo 中很常見。「這裡還沒有任何文章」的訊息出現是因為 Hugo 預設會在單一頁面底部列出該section下的所有文章列表。對於 about 頁面這類單頁內容,我們可以透過以下方法移除這個訊息:

  1. 在 _index-zh-tw.md 文件的前置設定 (Front Matter) 中加入:
type: "page"

或者是:

layout: "single"
  1. 另一個方法是在前置設定中設定:
_build:
  list: false
  render: true

這些設定都能讓 Hugo 知道這是一個獨立頁面,而不是一個需要列出子頁面的 section。

您想試試看哪種方法?我建議先試第一種方法,因為這是最常用且最簡單的解決方案。


Hugo 中 type 和 layout 的概念
#

type 的概念與用法:
#

  1. type 決定了內容的模板查找路徑(template lookup path)
  2. 如果沒有明確設定 type,Hugo 會使用內容所在的目錄名稱作為預設 type
  3. 舉例來說:
    • 如果文章位於 content/blog/post.md,預設 type 就是 “blog”
    • 如果在前置設定指定 type: "page",Hugo 會優先查找 layouts/page/single.html 模板

layout 的概念與用法:
#

  1. layout 直接指定要使用的模板名稱
  2. 它會覆蓋 Hugo 的預設模板查找規則
  3. 舉例來說:
    • 設定 layout: "simple" 會直接使用 layouts/_default/simple.html
    • 如果同時設定了 type 和 layout,layout 的優先級更高

模板查找順序:
#

  1. 如果指定了 layout,Hugo 會直接查找對應的模板
  2. 如果指定了 type,Hugo 會查找:
    • layouts/[type]/single.html
    • layouts/[type]/list.html
  3. 如果都沒指定,Hugo 會查找:
    • layouts/_default/single.html
    • layouts/_default/list.html

實際應用範例:

# 一般文章的前置設定
---
title: "我的文章"
type: "post"
---

# 特殊頁面的前置設定
---
title: "關於我"
type: "page"
layout: "about"
---

# 自定義模板的前置設定
---
title: "作品集"
type: "portfolio"
layout: "gallery"
---

相關文章

AI回答// H1 及 Meta Description 的解釋與最佳實踐
4 分鐘· loading · loading
AI回答 SEO 筆記