[hexo] Hexo 部署大小寫敏感問題排查與解決指南
Hexo 部署大小寫敏感問題完整筆記
情境描述
在使用 Hexo 部署 GitHub Pages 的過程中,我們發現資料夾名稱在本地生成為小寫(如 mac
),但在 GitHub 上會變回大寫(如 Mac
)。這樣的情況會導致網址中大小寫不一致,對搜尋引擎優化(SEO)及現有的搜尋索引造成負面影響。這次異動的範圍其實超級大,尤其考量到之前已部署的頁面已經被搜尋引擎索引。
具體情境如下:
初始狀況:
- 本地
hexo generate
正確生成小寫的資料夾名稱。 - 在檢查 GitHub Pages 部署後,發現遠端仍然顯示為大寫的
Mac
資料夾。
- 本地
嘗試直接在 GitHub 上修改:
- 我們手動在 GitHub 上將
Mac
資料夾刪除,並嘗試推送更改,這個步驟成功更新了 GitHub 上的資料夾名稱。 - 然而,當再次執行
hexo deploy
時,遠端又恢復為大寫的Mac
。
- 我們手動在 GitHub 上將
分析問題:
- 為了解決這個問題,我們先嘗試了使用
rm -rf tags/Mac
來刪除大寫資料夾,再推送確認 GitHub 上資料夾被刪除。 - 然後嘗試使用
mv
將Mac
重命名為小寫的mac
,並確保這些變更已提交並推送。 - 但是每次重新執行
hexo generate
後,Hexo 依然生成了大寫的Mac
資料夾。 - 最後,經分析認為可能是 Hexo 部署使用
.deploy_git
資料夾來管理緩存,這可能導致遠端在部署時帶回了之前的大小寫配置。 - 同時,Git 對於純大小寫變更無法敏感追蹤,因此可能需要手動強制 Git 認識這些大小寫的變更。
- 為了解決這個問題,我們先嘗試了使用
SEO 和搜尋引擎索引的影響
需要特別注意的是,這樣的網址大小寫異動可能會對搜尋引擎造成以下負面影響:
- 搜尋不到已發佈內容:因為原本的 URL 已被索引,如果網址的大小寫異動或結構變動,搜尋引擎可能會無法正確找到頁面。
- 現有索引失效:搜尋引擎已經索引過的 URL(如
tags/Mac
)會因為大小寫變更導致無法正確對應,進而影響網站的搜尋排名和流量。 - 網站權重受影響:若多次更改網址結構或出現 404 錯誤,會讓搜尋引擎認為網站不穩定,可能導致網站權重降低。
這些問題的影響可能會持續一段時間,直到搜尋引擎重新索引新的 URL。因此,處理這個大小寫問題非常重要,尤其對於長期的網站流量及 SEO 成效。
問題分析
- Git 對大小寫變更的敏感度較低,在某些系統中(如 macOS)無法正確追蹤到大小寫差異。
.deploy_git
資料夾緩存了之前的部署狀態,Hexo 使用它來維持部署記錄,導致每次 Hexo 部署時恢復為舊的大小寫配置。
解決方案
步驟 1:確認 _config.yml
配置
首先,檢查 Hexo 的 _config.yml
配置,特別是 permalink
的設定,確保不會影響資料夾的大小寫。
1 |
|
步驟 2:使用 mv
強制變更大小寫
為了讓 Git 能夠正確追蹤大小寫變更,採用以下方法強制改變資料夾名稱:
1 |
|
這時候 push 後會發現 github 上面確實 tags/Mac
這些不如預期的網址不見了,但是當我們在做一次 hexo clean && hexo generate && hexo deploy
以後會發現現在的 github 這邊之前被我們刪掉的 tags/Mac
又跑出來了。
代表問題可能不是 github cache 或者 mac 上的 git 對於大小寫不敏感造成的問題,那跟部署相關的檔案剩下 .deploy_git
了,所以才會有嘗試把 .deploy_git
刪掉重建的選項。
步驟 3:清空 .deploy_git
資料夾
刪除 .deploy_git
資料夾,以防止 Hexo 使用緩存的部署狀態。這樣可以確保下次部署時會重新生成所有文件。
1 |
|
步驟 4:重新生成並部署
執行以下命令來清理、生成、並重新部署 Hexo 靜態網站,以確保所有檔案已更新為小寫名稱。
1 |
|
步驟 5:檢查 GitHub 上的資料夾名稱
完成部署後,前往 GitHub Repo,確認 tags
資料夾中小寫名稱(如 mac
)已正確應用。
備選方案
若上述步驟無法解決問題,可考慮以下備選方案:
- 使用 GitHub Actions 部署:透過 GitHub Actions 來自動化部署流程,避免
.deploy_git
緩存問題的影響,並確保每次部署時自動清除舊的部署記錄。 - 手動刪除遠端大寫資料夾:若大寫資料夾持續出現,可以在
[your account].github.io
的main
分支中手動刪除並推送,確保重新部署時不會出現舊資料夾。