Ghost CMS 推薦文章功能完整教學

學習如何在 Ghost CMS 網站增加推薦文章功能,提升讀者留存率與頁面瀏覽量。附完整 Handlebars 程式碼與 CSS 樣式教學。

分享
Ghost CMS 推薦文章功能完整教學

你是否注意到,讀者讀完一篇文章後就離開了?推薦文章功能是解決這個問題的最有效方法之一。在 Ghost CMS 中,雖然官方沒有內建推薦文章的 UI 設定,但透過 Handlebars 模板語法,你可以靈活實作出符合需求的推薦文章區塊。

本文將帶你從零開始,完整設定 Ghost CMS 的推薦文章功能,包含同標籤推薦、手動指定,以及樣式調整技巧。


為什麼推薦文章對你的網站很重要

推薦文章不只是「好看的功能」,它直接影響網站的核心指標:

  • 降低跳出率:讀者有下一步可走,不會直接關閉頁面
  • 提升頁面瀏覽量:每位訪客平均瀏覽更多頁面
  • 強化 SEO:增加內部連結,幫助搜尋引擎爬取更多內容
  • 提升訂閱轉換:讓讀者對你的內容產生信任感,更願意訂閱

方法一:使用同標籤自動推薦(最常用)

這是最實用的做法:顯示與當前文章相同標籤的其他文章。

步驟 1:找到文章模板

在你的 Ghost 主題目錄中,找到 post.hbs(文章頁面模板)。

your-theme/
├── post.hbs        ← 修改這個檔案
├── index.hbs
├── default.hbs
└── assets/

步驟 2:加入推薦文章區塊

post.hbs 的文章內容結尾({{/post}}之前),加入以下程式碼:

{{#if tags}}
<section class="related-posts">
  <h2>推薦閱讀</h2>
  <div class="related-posts-grid">
    {{#get "posts"
      filter="tags:[{{tags.[0].slug}}]+id:-{{id}}"
      limit="3"
    }}
      {{#foreach posts}}
        <article class="related-post-card">
          {{#if feature_image}}
            <a href="{{url}}">
              <img src="{{feature_image}}" alt="{{title}}" loading="lazy">
            </a>
          {{/if}}
          <div class="related-post-content">
            <h3><a href="{{url}}">{{title}}</a></h3>
            <p>{{excerpt words="20"}}</p>
            <span class="reading-time">{{reading_time}}</span>
          </div>
        </article>
      {{/foreach}}
    {{/get}}
  </div>
</section>
{{/if}}

步驟 3:加入 CSS 樣式

.related-posts {
  margin-top: 4rem;
  padding-top: 2rem;
  border-top: 1px solid #e5e7eb;
}
.related-posts-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem;
}
.related-post-card {
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  overflow: hidden;
  transition: box-shadow 0.2s;
}
.related-post-card:hover {
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.related-post-card img {
  width: 100%;
  height: 180px;
  object-fit: cover;
}
.related-post-content {
  padding: 1rem;
}
.reading-time {
  font-size: 0.75rem;
  color: #9ca3af;
}

方法二:使用內部標籤精準控制推薦

Ghost 支援「內部標籤」(以 # 開頭),可以用來做精準分類而不顯示在前台。修改 filter 條件:

{{#get "posts"
  filter="tags:[#series-laravel]+id:-{{id}}"
  limit="3"
  order="published_at desc"
}}

這樣就能推薦同一個系列的文章,非常適合教學系列文

方法三:Ghost Content API 動態載入

如果你需要更複雜的推薦邏輯,可以透過 Ghost Content API 在前端動態載入:

const tag = document.querySelector('meta[property="article:tag"]')?.content;

if (tag) {
  fetch(`/ghost/api/content/posts/?key=YOUR_API_KEY&filter=tags:${tag}&limit=3&fields=title,url,feature_image,excerpt`)
    .then(res => res.json())
    .then(data => renderRelatedPosts(data.posts));
}

常見問題排除

問題原因解決方式
推薦文章沒有顯示文章沒有設定標籤確保文章至少有一個標籤
顯示了當前文章自己filter 條件錯誤確認 id:-{{id}} 有正確加入
樣式跑版CSS 權重衝突加上更具體的選擇器
只顯示 1-2 篇同標籤文章不足 3 篇改用多標籤 filter 或降低 limit

FAQ

Ghost 有內建推薦文章功能嗎?

Ghost 官方目前沒有提供 UI 設定推薦文章的功能,但透過 {{#get}} Handlebars helper 可以自行實作,靈活度反而更高。

推薦文章會影響網站速度嗎?

{{#get}} 是伺服器端渲染,對頁面速度影響極小。使用 Content API 的動態方式則需注意 API 請求的延遲。

可以推薦來自不同標籤的文章嗎?

可以,使用 filter="tags:[tag-a,tag-b]" 即可指定多個標籤範圍。

如何讓推薦文章依發布時間排序?

{{#get}} 加入 order="published_at desc" 參數即可。

結語

在 Ghost CMS 增加推薦文章功能並不複雜,只需要修改 post.hbs 模板,善用 {{#get}} helper 搭配標籤篩選,就能讓讀者自然地繼續閱讀更多內容。

Read more

Gaze Guard 短影片旁白的 TTS 成本與隱私防護示意圖

短影片旁白的成本,其實比我想像低

我最近在做一支 Gaze Guard 的 20 秒產品介紹影片。 原本想說簡單做個動畫就好。 後來想說如果有配音,會感覺比較生動也比較能夠描述使用的情境和達成的效果。 這次我測了什麼 我測的是產品介紹影片用的英文旁白。 工具底層使用的是 Edge TTS,也就是 Microsoft Edge 的線上 Text-to-Speech 服務。常見的底層工具是 edge-tts。 這不是正式 Azure Speech API 的計費路徑。 在我這次的環境裡,它沒有要求 API key,也沒有回傳可見的 per-use billing。 所以這次測試本身,比較像是快速 prototype。 如果未來要正式商用、穩定大量產出,就要回頭看 Azure Speech、OpenAI TTS、ElevenLabs 這類正式付費方案。

By SteepingLogic
用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard

# 用 Cloudflare Tunnel,從外面連回本機 Hermes Dashboard 我有一台 local Hermes。 平常它就在自己的機器上跑。 可能是家裡的桌機。 可能是 NAS。 可能是一台一直開著的 Linux box。 也可能只是我自己的筆電。 問題是,人一離開那個網路,Hermes dashboard 就變成一個只存在於 localhost 的東西。 我想在外面打開它。 但我沒有 static IP。 沒有買網域。 也不想進路由器開 port forwarding。 因為那條路通常長這樣: * 找 public IP * 設定 NAT * 開 port * 處理防火牆 * 補 HTTPS * 設定憑證 * 再擔心 origin IP 被掃 非常友善。 所以這篇先走另一條路:

By SteepingLogic
Invoshot 開發日記|正向回饋

Invoshot 開發日記|正向回饋

想信很多人在開發的時候都常常會做一件事,那就是: 不斷地反覆思考,在腦袋內把流程跑過很多次,然後思考哪裡可以做得更好 不限坐在電腦前的時後,可能是在捷運上,在人行道上, 在馬桶上或是在洗澡的時候 🤪 我不斷地在想:AI 辨識完一張發票後,使用者接下來最需要的是什麼? 每個欄位都要核對嗎? 這麼多欄位真的不會漏看嗎? 所以我在 Invoshot 裡加了提醒功能。 辨識結果出來後,系統會把比較需要注意的地方標出來。 不是把所有不確定都丟給使用者,而是把他真正需要介入的那幾秒鐘留出來。 今天收到一則訊息: 今天用了有新增提醒功能很棒! 真的有變輕鬆 😎 看到這句的時候,我第一個想到的是: 原來那些只是我腦內風暴的優化項目,使用者是真的可以感受到差異的! 感覺又有動力了!

By SteepingLogic