<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Aliases on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/aliases/</link>
        <description>Recent content in Aliases on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Sun, 17 May 2026 20:00:17 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/aliases/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Hugo aliases 怎麼用？舊 URL 自動跳轉與 404 修復指南</title>
        <link>https://www.knightli.com/zh-tw/2026/05/17/hugo-aliases-url-redirect/</link>
        <pubDate>Sun, 17 May 2026 20:00:17 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/05/17/hugo-aliases-url-redirect/</guid>
        <description>&lt;p&gt;Hugo 的 &lt;code&gt;aliases&lt;/code&gt; 用來替頁面建立舊 URL 跳轉。&lt;/p&gt;
&lt;p&gt;當你修改文章連結、合併頁面、遷移部落格，或者想修復某個常見的錯誤 URL 時，可以在文章的 Front Matter 裡加入 &lt;code&gt;aliases&lt;/code&gt;。Hugo 會為這些舊地址生成跳轉頁面，把訪客帶到目前文章的新地址，避免舊連結直接變成 404。&lt;/p&gt;
&lt;h2 id=&#34;aliases-適合解決什麼問題&#34;&gt;aliases 適合解決什麼問題
&lt;/h2&gt;&lt;p&gt;最常見的場景有三類。&lt;/p&gt;
&lt;p&gt;第一類是優化文章連結。&lt;/p&gt;
&lt;p&gt;例如，你原本的文章地址是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/posts/tech/2023-01-01-hello/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;後來想改成更短的地址：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/hello/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這時可以給新文章加上舊地址 alias。這樣搜尋引擎、外部引用、社群平台舊連結仍然能訪問到內容。&lt;/p&gt;
&lt;p&gt;第二類是合併或遷移頁面。&lt;/p&gt;
&lt;p&gt;如果你把幾篇舊文章合併到一篇新文章，或者從 Hexo、Typecho、WordPress 等平台遷移到 Hugo，舊平台的 URL 結構往往和新站不同。&lt;code&gt;aliases&lt;/code&gt; 可以把這些舊地址逐一指向新頁面，降低遷移後的 404 數量。&lt;/p&gt;
&lt;p&gt;第三類是處理拼寫錯誤。&lt;/p&gt;
&lt;p&gt;有些 URL 可能曾經寫錯，或者外部網站已經引用了錯誤路徑。如果這個錯誤連結有訪問量，可以為它單獨設定 alias，讓使用者仍然能跳到正確頁面。&lt;/p&gt;
&lt;h2 id=&#34;基本寫法&#34;&gt;基本寫法
&lt;/h2&gt;&lt;p&gt;只需要在文章 Front Matter 中加入 &lt;code&gt;aliases&lt;/code&gt; 欄位。&lt;/p&gt;
&lt;p&gt;下面是 YAML 格式範例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;新文章標題&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;ld&#34;&gt;2026-05-17T12:00:00&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;+09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/new-path/my-new-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;aliases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/old-path/old-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;../old-version/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這裡的 &lt;code&gt;/old-path/old-article/&lt;/code&gt; 是站點相對路徑。&lt;code&gt;../old-version/&lt;/code&gt; 則是相對目前頁面的路徑。&lt;/p&gt;
&lt;p&gt;實際使用時，更推薦優先使用站點相對路徑，也就是以 &lt;code&gt;/&lt;/code&gt; 開頭的路徑。它更直觀，也更不容易因為文章目錄結構變化而產生誤判。&lt;/p&gt;
&lt;h2 id=&#34;和-url-欄位的關係&#34;&gt;和 url 欄位的關係
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;url&lt;/code&gt; 決定目前頁面的新地址。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aliases&lt;/code&gt; 決定哪些舊地址會跳轉到這個新地址。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/new-path/my-new-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;aliases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/old-path/old-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;構建後，使用者訪問 &lt;code&gt;/old-path/old-article/&lt;/code&gt;，會被跳轉到 &lt;code&gt;/new-path/my-new-article/&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;如果文章沒有明確設定 &lt;code&gt;url&lt;/code&gt;，Hugo 會按照站點的 &lt;code&gt;permalinks&lt;/code&gt; 配置、文章日期、slug 等規則生成目前頁面地址。&lt;code&gt;aliases&lt;/code&gt; 仍然會指向這個最終生成的頁面。&lt;/p&gt;
&lt;h2 id=&#34;hugo-預設怎麼實現跳轉&#34;&gt;Hugo 預設怎麼實現跳轉
&lt;/h2&gt;&lt;p&gt;預設情況下，Hugo 會為每個 alias 生成一個獨立的 HTML 檔案。&lt;/p&gt;
&lt;p&gt;這個 HTML 檔案通常會使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;refresh&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;讓瀏覽器打開舊地址後自動跳轉到新地址。&lt;/p&gt;
&lt;p&gt;這種方式簡單、跨平台，適合普通靜態託管環境。但它本質上是瀏覽器端跳轉，不是伺服器端返回的 301 / 302 重定向。&lt;/p&gt;
&lt;p&gt;對小站點來說，這通常已經夠用。只要舊地址能打開，並且最終能到達新文章，就可以避免明顯的 404 問題。&lt;/p&gt;
&lt;h2 id=&#34;什麼時候考慮伺服器端重定向&#34;&gt;什麼時候考慮伺服器端重定向
&lt;/h2&gt;&lt;p&gt;如果站點部署在 Netlify、Cloudflare Pages、Vercel 或其他支援重定向規則的平台上，可以考慮使用伺服器端重定向。&lt;/p&gt;
&lt;p&gt;伺服器端重定向的優勢是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;回應更直接，不需要先返回一個 HTML 跳轉頁。&lt;/li&gt;
&lt;li&gt;更容易明確使用 301 或 302 狀態碼。&lt;/li&gt;
&lt;li&gt;對大量遷移規則更集中，方便審計和維護。&lt;/li&gt;
&lt;li&gt;對 SEO 遷移更可控。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一種常見做法是停用 Hugo 預設 alias 頁面生成，再輸出平台需要的重定向規則檔。例如 Netlify 常用 &lt;code&gt;_redirects&lt;/code&gt;，Cloudflare Pages 可以使用 &lt;code&gt;_redirects&lt;/code&gt; 或平台自己的規則配置。&lt;/p&gt;
&lt;p&gt;如果你走這條路線，需要在 Hugo 配置中研究 &lt;code&gt;disableAliases&lt;/code&gt; 和自訂 output format。不要只刪掉 &lt;code&gt;aliases&lt;/code&gt;，否則舊連結會直接變成 404。&lt;/p&gt;
&lt;h2 id=&#34;使用-aliases-的注意事項&#34;&gt;使用 aliases 的注意事項
&lt;/h2&gt;&lt;p&gt;第一，不要把 &lt;code&gt;aliases&lt;/code&gt; 當成隨意改 URL 的藉口。&lt;/p&gt;
&lt;p&gt;URL 一旦公開，就會進入搜尋引擎、RSS、社群平台、書籤和外部引用。頻繁修改 URL 會製造維護成本。&lt;code&gt;aliases&lt;/code&gt; 更適合修復歷史問題，而不是鼓勵經常改路徑。&lt;/p&gt;
&lt;p&gt;第二，避免 alias 互相循環。&lt;/p&gt;
&lt;p&gt;舊地址應該指向目前文章的新地址，不要讓 A 跳 B、B 又跳 A，也不要讓多個頁面爭用同一個 alias。&lt;/p&gt;
&lt;p&gt;第三，多語言站點要注意語言前綴。&lt;/p&gt;
&lt;p&gt;Hugo 多語言站點通常會自動處理語言路徑。如果你在某個語言版本裡寫 alias，有時不需要手動加 &lt;code&gt;/en/&lt;/code&gt;、&lt;code&gt;/zh-tw/&lt;/code&gt; 這類前綴。否則可能生成重複路徑，例如 &lt;code&gt;/en/en/...&lt;/code&gt;。具體行為要以本地構建結果為準。&lt;/p&gt;
&lt;p&gt;第四，修改後要檢查生成目錄。&lt;/p&gt;
&lt;p&gt;加入 alias 後，可以構建一次站點，再檢查 &lt;code&gt;public&lt;/code&gt; 目錄裡是否生成了舊路徑對應的 &lt;code&gt;index.html&lt;/code&gt;，並確認其中的目標連結是否正確。&lt;/p&gt;
&lt;h2 id=&#34;一個實用檢查流程&#34;&gt;一個實用檢查流程
&lt;/h2&gt;&lt;p&gt;修改文章 Front Matter 後，可以按下面流程檢查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;確認目前文章的新 URL。&lt;/li&gt;
&lt;li&gt;在 &lt;code&gt;aliases&lt;/code&gt; 中寫入舊 URL。&lt;/li&gt;
&lt;li&gt;執行 Hugo 構建。&lt;/li&gt;
&lt;li&gt;到 &lt;code&gt;public&lt;/code&gt; 目錄檢查舊 URL 對應的 &lt;code&gt;index.html&lt;/code&gt; 是否生成。&lt;/li&gt;
&lt;li&gt;打開生成的 HTML，確認跳轉目標是否是新 URL。&lt;/li&gt;
&lt;li&gt;如果是多語言頁面，特別檢查是否出現重複語言前綴。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;這樣可以在部署前發現大部分路徑問題。&lt;/p&gt;
&lt;h2 id=&#34;小結&#34;&gt;小結
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;aliases&lt;/code&gt; 是 Hugo 裡處理舊連結的輕量工具。&lt;/p&gt;
&lt;p&gt;它最適合用在文章改 URL、部落格遷移、頁面合併和錯誤路徑修復這些場景。普通靜態站點可以直接使用 Hugo 預設生成的 HTML 跳轉頁；如果站點規模較大，或對 SEO 遷移要求更高，可以進一步改成伺服器端重定向規則。&lt;/p&gt;
&lt;p&gt;真正關鍵的是：不要只關注新連結是否好看，也要照顧已經存在的舊連結。一個能把舊 URL 平穩帶到新頁面的站點，才不容易在遷移和改版時丟掉歷史流量。&lt;/p&gt;
&lt;h2 id=&#34;參考資料&#34;&gt;參考資料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gohugo.io/content-management/urls/#aliases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugo Documentation: Aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gohugo.io/content-management/urls/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugo Documentation: URL management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
