<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Copywriting on Tarragon</title><link>https://tarrragon.github.io/blog/tags/copywriting/</link><description>Recent content in Copywriting on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/copywriting/index.xml" rel="self" type="application/rss+xml"/><item><title>錯誤訊息撰寫原則</title><link>https://tarrragon.github.io/blog/ux-design/04-error-recovery/error-message-principles/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/ux-design/04-error-recovery/error-message-principles/</guid><description>&lt;p>錯誤訊息承擔兩個職責：讓使用者理解發生了什麼（診斷），以及讓使用者知道下一步能做什麼（行動）。缺少診斷的訊息讓使用者焦慮（「出了什麼事？」），缺少行動的訊息讓使用者卡住（「然後呢？」）。&lt;/p>
&lt;h2 id="診斷使用者能讀懂">診斷：使用者能讀懂&lt;/h2>
&lt;h3 id="用使用者的語言描述問題">用使用者的語言描述問題&lt;/h3>
&lt;p>錯誤訊息的讀者是使用者，描述問題時使用使用者能理解的詞彙。「無法連線到伺服器」比 &lt;code>ECONNREFUSED 127.0.0.1:7681&lt;/code> 更有用。技術細節對開發者有價值，但使用者需要的是「發生了什麼影響我」。&lt;/p>
&lt;p>技術細節可以保留在次要位置 — 折疊區塊、「詳細資訊」連結、或複製到剪貼簿的按鈕。進階使用者和開發者在需要時能取得，一般使用者不被打擾。&lt;/p>
&lt;h3 id="描述影響而非原因">描述影響而非原因&lt;/h3>
&lt;p>使用者關心的是「這對我意味著什麼」。「終端機暫時無法使用」比「WebSocket 連線逾時」更直接回答使用者的問題。原因是補充資訊，影響是核心資訊。&lt;/p>
&lt;h3 id="避免技術恐嚇">避免技術恐嚇&lt;/h3>
&lt;p>「嚴重錯誤」「系統崩潰」「未知的致命例外」這類措辭讓使用者以為問題很嚴重。多數情況下使用者能做的就是重試或返回 — 訊息的語氣應該反映實際的嚴重程度。&lt;/p>
&lt;h2 id="行動使用者能做什麼">行動：使用者能做什麼&lt;/h2>
&lt;h3 id="明確列出可執行的下一步">明確列出可執行的下一步&lt;/h3>
&lt;p>每個錯誤訊息至少提供一個使用者可以執行的行動。重試、返回上一頁、檢查網路連線、聯繫支援 — 行動越具體越好。&lt;/p>
&lt;p>「發生錯誤」沒有行動指引。「連線失敗，請檢查網路後重試」提供了兩個具體行動（檢查網路、重試）。&lt;/p>
&lt;h3 id="行動要可操作">行動要可操作&lt;/h3>
&lt;p>「請聯繫系統管理員」在自用工具場景中沒有意義（使用者就是管理員）。「請稍後再試」在服務完全不可用時也沒有幫助。行動建議需要考慮使用者的實際情境和能力。&lt;/p>
&lt;h3 id="提供退出路徑">提供退出路徑&lt;/h3>
&lt;p>行動選項中至少有一個是「離開當前狀態」的退出路徑 — 返回首頁、關閉對話框、取消操作。使用者可能不想重試，只想離開。畫面狀態矩陣中退出路徑為空的狀態就是 UX 死胡同（&lt;a href="https://tarrragon.github.io/blog/ux-design/01-screen-state-machine/" data-link-title="模組一：畫面狀態機設計" data-link-desc="畫面狀態矩陣（顯示 / 操作 / 進入 / 退出）— 退出路徑為空 = UX 死胡同">ux-design 模組一 畫面狀態機&lt;/a>）。&lt;/p>
&lt;h2 id="錯誤訊息的三層結構">錯誤訊息的三層結構&lt;/h2>
&lt;p>一個完整的錯誤訊息包含三層：&lt;/p>
&lt;p>&lt;strong>標題&lt;/strong>：一句話描述影響。「終端機連線失敗」。&lt;/p>
&lt;p>&lt;strong>說明&lt;/strong>：補充原因和 context。「伺服器沒有回應，可能是網路問題或伺服器未啟動。」&lt;/p>
&lt;p>&lt;strong>行動&lt;/strong>：按鈕或連結。「重試」「返回首頁」「查看詳細資訊」。&lt;/p>
&lt;p>三層不需要都顯示。輕微錯誤（Snackbar）可以只有標題 + 一個行動按鈕。嚴重錯誤（全螢幕）三層都需要。&lt;/p>
&lt;p>錯誤訊息寫完後，使用者看到訊息的下一步通常是重試 — &lt;a href="https://tarrragon.github.io/blog/ux-design/04-error-recovery/retry-mechanism-ux/" data-link-title="Retry 機制 UX" data-link-desc="自動 vs 手動重試、指數退避 vs 立即重試 — 重試策略的選擇取決於失敗的可恢復性和使用者的等待意願">Retry 機制 UX&lt;/a> 設計重試按鈕的行為和回饋。如果重試反覆失敗，使用者需要退路而非重試迴圈，&lt;a href="https://tarrragon.github.io/blog/ux-design/04-error-recovery/error-loop-escape/" data-link-title="error → retry → error 循環的逃生口設計" data-link-desc="當重試持續失敗時，使用者需要第二條路 — 逃生口設計讓使用者能離開失敗循環而非被困住">error → retry → error 循環的逃生口&lt;/a>提供逃生設計。Error 狀態在畫面層級的定位和退出路徑回到 &lt;a href="https://tarrragon.github.io/blog/ux-design/01-screen-state-machine/" data-link-title="模組一：畫面狀態機設計" data-link-desc="畫面狀態矩陣（顯示 / 操作 / 進入 / 退出）— 退出路徑為空 = UX 死胡同">ux-design 模組一 畫面狀態機&lt;/a>的矩陣框架。&lt;/p></description><content:encoded><![CDATA[<p>錯誤訊息承擔兩個職責：讓使用者理解發生了什麼（診斷），以及讓使用者知道下一步能做什麼（行動）。缺少診斷的訊息讓使用者焦慮（「出了什麼事？」），缺少行動的訊息讓使用者卡住（「然後呢？」）。</p>
<h2 id="診斷使用者能讀懂">診斷：使用者能讀懂</h2>
<h3 id="用使用者的語言描述問題">用使用者的語言描述問題</h3>
<p>錯誤訊息的讀者是使用者，描述問題時使用使用者能理解的詞彙。「無法連線到伺服器」比 <code>ECONNREFUSED 127.0.0.1:7681</code> 更有用。技術細節對開發者有價值，但使用者需要的是「發生了什麼影響我」。</p>
<p>技術細節可以保留在次要位置 — 折疊區塊、「詳細資訊」連結、或複製到剪貼簿的按鈕。進階使用者和開發者在需要時能取得，一般使用者不被打擾。</p>
<h3 id="描述影響而非原因">描述影響而非原因</h3>
<p>使用者關心的是「這對我意味著什麼」。「終端機暫時無法使用」比「WebSocket 連線逾時」更直接回答使用者的問題。原因是補充資訊，影響是核心資訊。</p>
<h3 id="避免技術恐嚇">避免技術恐嚇</h3>
<p>「嚴重錯誤」「系統崩潰」「未知的致命例外」這類措辭讓使用者以為問題很嚴重。多數情況下使用者能做的就是重試或返回 — 訊息的語氣應該反映實際的嚴重程度。</p>
<h2 id="行動使用者能做什麼">行動：使用者能做什麼</h2>
<h3 id="明確列出可執行的下一步">明確列出可執行的下一步</h3>
<p>每個錯誤訊息至少提供一個使用者可以執行的行動。重試、返回上一頁、檢查網路連線、聯繫支援 — 行動越具體越好。</p>
<p>「發生錯誤」沒有行動指引。「連線失敗，請檢查網路後重試」提供了兩個具體行動（檢查網路、重試）。</p>
<h3 id="行動要可操作">行動要可操作</h3>
<p>「請聯繫系統管理員」在自用工具場景中沒有意義（使用者就是管理員）。「請稍後再試」在服務完全不可用時也沒有幫助。行動建議需要考慮使用者的實際情境和能力。</p>
<h3 id="提供退出路徑">提供退出路徑</h3>
<p>行動選項中至少有一個是「離開當前狀態」的退出路徑 — 返回首頁、關閉對話框、取消操作。使用者可能不想重試，只想離開。畫面狀態矩陣中退出路徑為空的狀態就是 UX 死胡同（<a href="/blog/ux-design/01-screen-state-machine/" data-link-title="模組一：畫面狀態機設計" data-link-desc="畫面狀態矩陣（顯示 / 操作 / 進入 / 退出）— 退出路徑為空 = UX 死胡同">ux-design 模組一 畫面狀態機</a>）。</p>
<h2 id="錯誤訊息的三層結構">錯誤訊息的三層結構</h2>
<p>一個完整的錯誤訊息包含三層：</p>
<p><strong>標題</strong>：一句話描述影響。「終端機連線失敗」。</p>
<p><strong>說明</strong>：補充原因和 context。「伺服器沒有回應，可能是網路問題或伺服器未啟動。」</p>
<p><strong>行動</strong>：按鈕或連結。「重試」「返回首頁」「查看詳細資訊」。</p>
<p>三層不需要都顯示。輕微錯誤（Snackbar）可以只有標題 + 一個行動按鈕。嚴重錯誤（全螢幕）三層都需要。</p>
<p>錯誤訊息寫完後，使用者看到訊息的下一步通常是重試 — <a href="/blog/ux-design/04-error-recovery/retry-mechanism-ux/" data-link-title="Retry 機制 UX" data-link-desc="自動 vs 手動重試、指數退避 vs 立即重試 — 重試策略的選擇取決於失敗的可恢復性和使用者的等待意願">Retry 機制 UX</a> 設計重試按鈕的行為和回饋。如果重試反覆失敗，使用者需要退路而非重試迴圈，<a href="/blog/ux-design/04-error-recovery/error-loop-escape/" data-link-title="error → retry → error 循環的逃生口設計" data-link-desc="當重試持續失敗時，使用者需要第二條路 — 逃生口設計讓使用者能離開失敗循環而非被困住">error → retry → error 循環的逃生口</a>提供逃生設計。Error 狀態在畫面層級的定位和退出路徑回到 <a href="/blog/ux-design/01-screen-state-machine/" data-link-title="模組一：畫面狀態機設計" data-link-desc="畫面狀態矩陣（顯示 / 操作 / 進入 / 退出）— 退出路徑為空 = UX 死胡同">ux-design 模組一 畫面狀態機</a>的矩陣框架。</p>
]]></content:encoded></item></channel></rss>