開發工具箱系列2:文章上架再也不怕格式爆掉:我如何用 Next.js 做 HTML 清洗精靈

更新 發佈閱讀 14 分鐘
這是「開發工具箱系列」的第二篇,專門介紹 文章上架工具 的技術設計。如果你或你的團隊常常需要把文章從 WordPress 或 Elementor 搬到另一個平台上架,這篇或許能給你一些靈感。



從 Elementor 複製出來的文章 HTML,從來就沒有乾淨過。

每次把文章貼到客戶後台,都得面對一堆 elementor-element-xxxxx、殘留的 inline style、沒有意義的 data-* 屬性,還有標題顏色完全跑掉的問題。直接上架,版面保證炸裂。

一篇文章的格式處理,平均要花 30 分鐘。每週上架三四篇,光清格式就吃掉將近兩小時。

這個工具想解決的問題很明確:讓文章從草稿到上架的格式處理,從 30 分鐘縮短到 5 分鐘以內,且結果一致、不依賴人工判斷。

問題:Elementor 文章搬站的格式地獄

在動手做之前,我整理了一下每次上架需要手動處理的事項:

  • 刪掉所有 Elementor 的 classelementor-widgetelementor-element……)
  • 把 H2、H3 標題顏色改成客戶指定的色碼
  • 手動建文章目錄,把錨點連結一個個複製貼上
  • 圖片網址從草稿站換成正式站的路徑
  • FAQ 區塊的 H3 要特別換成不同的樣式
  • emoji 圖示不能和一般內容圖片套用同樣的樣式,否則會放大變形

每一條都是重複勞動,而且每位編輯的處理方式不完全一致,導致不同文章的上架品質參差不齊。

解法架構:四步驟精靈

整個工具設計成四步驟精靈,核心邏輯分三個階段:

  1. 選擇客戶設定:選擇這篇文章要套用哪個客戶的樣式規則
  2. 取得草稿 HTML:在草稿站的瀏覽器執行一段 Console 程式碼,自動擷取文章 DOM
  3. 圖片 URL 替換:把草稿站的圖片網址批量換成正式站的路徑
  4. 複製清洗後的 HTML:一鍵複製,貼到客戶後台上架

使用者不需要懂任何程式,整個流程就是:「打開工具 → 選客戶 → 貼程式碼到瀏覽器 → 替換圖片 → 複製結果」

階段一:Console 片段產生器

最有趣的設計在第二步。

使用者不可能每次都手動複製 HTML——因為 Elementor 編輯器裡的 DOM 結構很深,手動複製很容易夾到不必要的外層容器,或漏掉某些元素。

我的解法是讓工具產生一段 JavaScript 程式碼,使用者把這段程式碼貼到瀏覽器開發者工具的 Console 執行,它會自動找到文章內容並複製到剪貼簿。

三層 Selector 自動適配主題

不同的 WordPress 主題,文章內容放在不同的 DOM 位置。為了讓同一段程式碼在各種環境都能正確取到內容,設計了三層 fallback:

  • 第一層:Elementor 的專屬 class(.elementor-widget-theme-post-content
  • 第二層:標準 HTML5 的 <article> 語意標籤
  • 第三層:退回整個 <body> 作為最後備案

這個設計讓同一段 Console 程式碼可以在 Elementor 頁面、標準 WordPress 主題、自定義主題上都能正常運作,不需要為每個客戶維護不同版本。

圖片自動觸發下載

草稿站的圖片通常是草稿站的網址,直接帶到正式站會是無效連結。Console 程式碼同時會找出文章裡所有的圖片,自動觸發下載,讓使用者可以重新上傳到客戶後台。

為了避免一次下載太多圖片把瀏覽器塞爆,下載之間加了 400ms 的間隔,逐張下載而不是同時湧入。

階段二:9 步驟 HTML 清洗器

這是整個工具最核心的部分,跑在 Next.js 的 API Route 裡,使用 node-html-parser 解析 DOM。9 個步驟按順序執行,每一步針對一個具體的格式問題。

步驟

處理對象

說明

步驟 0

移除 <h1>

避免頁面出現重複標題,影響 SEO

步驟 1–2

H2 / H3 樣式

套用客戶色碼、字體大小,自動編號錨點 ID

步驟 3

段落 span 顏色

統一文字顏色,智慧跳過連結內的 span

步驟 4

清單項目

套用客戶指定的列表文字顏色

步驟 5

連結 vs 按鈕辨別

偵測 background/padding,保留按鈕樣式

步驟 6

<em> 處理

依客戶設定轉為粗體或紅色強調

步驟 7

圖片處理

emoji 圖示固定 1em,內容圖片加邊框圓角

步驟 8

清單去重

移除 Elementor 複製出現的重複 li 項目

步驟 9

目錄生成

根據 H2 錨點自動組合目錄,插入文章頂部

步驟 0:移除重複 H1

文章標題通常由客戶後台的頁面 <h1> 顯示,HTML 內容裡如果還有一個 <h1>,會造成頁面出現兩個 H1,對 SEO 有直接的負面影響。這個步驟直接移除 HTML 內容裡的第一個 H1。

步驟 1–2:標題樣式與 FAQ 模式

每個客戶的標題樣式都不一樣——有的 H2 是藍色粗體、有的是橘色加底線。清洗器會按文件順序走訪所有標題,套上客戶指定的顏色和字體大小,同時為每個 H2 自動分配錨點 ID,供後面目錄生成使用。

FAQ 模式的自動切換是這個步驟的設計亮點。很多 SEO 文章下方會有 FAQ 區塊,標題格式和正文不同,通常是 Q1、Q2 編號樣式。清洗器會偵測標題文字裡是否含有「FAQ」關鍵字,一旦偵測到,後續所有 H3 就自動切換成 FAQ 樣式,不需要使用者手動標記。

步驟 3–5:段落、清單與連結辨別

段落裡的 <span> 元素是 Elementor 留下的格式殘跡,帶著各種 inline style。清洗器統一把段落的文字顏色換成客戶指定的顏色,但有一個細節:<a> 標籤裡的 <span> 不處理,因為連結有自己的顏色,不能被段落顏色覆蓋。

連結 vs 按鈕的辨別,透過檢查 background 和 padding 屬性判斷:有背景色和內距的是按鈕,保留樣式;純文字連結則清除多餘格式。

步驟 6–7:強調文字與圖片處理

斜體 <em> 在 Elementor 裡可能有不同語意——有的是真的強調語氣,有的其實是要顯示紅色提示文字。根據客戶設定,<em> 可以轉換成粗體,也可以轉換成指定顏色的 <span>

圖片處理有一個細節需要特別照顧:emoji 圖示。很多文章裡會插入 emoji 的 SVG 圖示,這些在 Elementor 裡通常是 <img> 標籤,尺寸很小(1em)。如果套用一般內容圖片的樣式(加邊框、設定最大寬度),emoji 圖示會放大變形,整個版面就亂掉了。

清洗器透過偵測圖片的 width/height 屬性是否為 1em,把 emoji 圖示和內容圖片分開處理,各自套用對應的樣式。

步驟 8–9:清單去重與目錄生成

從 Elementor 複製出來的 HTML,清單項目有時會重複出現,這是 Elementor widget DOM 結構的副作用。這個步驟用 Set 追蹤已出現的 <li> 文字內容,重複的直接移除。

最後一步是自動生成文章目錄。清洗器讀取前面步驟建立的所有 H2 錨點,組合成目錄 HTML 區塊,插入在第一個 H2 的前方。目錄的背景色支援透明度設定,內建 Hex 轉 RGBA 的轉換邏輯,讓客戶指定的色碼可以直接套用到帶透明度的目錄背景。

多客戶設定管理

不同客戶的樣式需求完全不同:H2 顏色、H3 字體大小、FAQ 模式開關、目錄背景色……每個都不一樣。

工具裡的客戶設定功能讓使用者可以新增、編輯、刪除客戶,每個客戶對應一組完整的樣式設定。設定存在 localStorage,不需要後端資料庫,開啟工具即可直接選擇客戶套用。

這個設計的取捨是:localStorage 的資料存在瀏覽器本機,換電腦需要重新設定。對於固定的工作環境來說,這個限制完全可以接受;如果有多裝置同步的需求,之後可以改存到後端資料庫。

實際效果:前後對比

以一篇 3,000 字的 Elementor 文章為例,清洗前後的變化非常明顯:

  • 清洗前:HTML 大約 15,000 字元,充滿 data-idelementor-element-xxxxx、各種殘留 inline style
  • 清洗後:HTML 大約 5,000 字元,乾淨的語意標籤,標題帶客戶樣式,目錄自動生成
  • 後端處理時間:API 回應通常在 300ms 以內
  • 人工節省時間:從原本的 30 分鐘,縮短到 5 分鐘以內

踩坑紀錄:Shopline 的錨點問題

目錄裡的錨點連結格式本來是相對路徑的錨點(例如 #h2-1)。

但某個客戶用的是 Shopline 平台,相對路徑的錨點點下去會跳回首頁,而不是捲動到對應位置。這是 Shopline 的平台行為,無法從 HTML 層面直接修改。

解法是在清洗 API 裡加一個可選參數:如果有傳入文章的完整 URL,目錄連結就改成完整路徑(例如 https://example.com/blog/article-slug#h2-1),這樣在 Shopline 上就能正常捲動到對應位置。

這個需求是上線後才被使用者回報的,修改大約花了 10 分鐘。做內部工具最爽的地方就是這個——需求清楚、修改快速、立刻驗證。

常見問題 FAQ

Q1:Console 片段在瀏覽器執行安全嗎?

這段程式碼只做兩件事:讀取頁面上的 DOM 內容觸發圖片下載。它不會傳送任何資料到外部伺服器,也不會修改頁面內容。唯一需要注意的是:請確認你是在自己的草稿站執行,而不是在不明來源的網站上貼入不認識的程式碼。

Q2:這個工具支援哪些 WordPress 主題?

凡是有 Elementor 的頁面,或是標準的 <article> HTML5 語意標籤的主題,都可以正常使用。大多數現代的 WordPress 主題都符合這個條件。如果主題結構比較特殊,可以手動修改 Console 程式碼裡的 Selector,指向正確的文章容器。

Q3:客戶設定存在 localStorage,換電腦會消失嗎?

是的,localStorage 的資料存在瀏覽器本機,換電腦或清除瀏覽器資料後需要重新設定。如果你有多台電腦使用的需求,可以考慮把客戶設定改存到後端資料庫,或是提供匯出/匯入 JSON 的功能。對於固定工作環境來說,現行設計已經夠用。

Q4:HTML 清洗後還需要手動調整嗎?

絕大多數情況下不需要。清洗後的 HTML 已經套用好客戶樣式、生成目錄、處理 FAQ 區塊。唯一需要手動確認的是圖片是否已重新上傳到正式站的媒體庫,並確認圖片 URL 替換正確。這個步驟工具本身也有引導流程,不容易遺漏。

Q5:這套工具可以用在 Shopify、Shopline 等非 WordPress 平台嗎?

可以。只要目標平台的後台支援直接貼入 HTML 原始碼,清洗後的結果就可以直接使用。Shopify 和 Shopline 都有 HTML 編輯模式,貼入清洗後的結果完全沒有問題。唯一需要注意的是錨點連結格式——如上面踩坑紀錄提到的,某些平台需要使用完整路徑的錨點,工具裡已有對應的設定選項可以處理。

總結

這個 HTML 清洗精靈從上線到現在,已經是團隊每天都在用的工具。幾個值得記錄的技術重點:

  • Console snippet 取代手動操作:讓不懂技術的使用者也能完成 DOM 擷取,降低使用門檻
  • 三層 Selector fallback:一份程式碼相容多種 WordPress 主題結構
  • FAQ 模式自動偵測:偵測關鍵字後自動切換 H3 樣式,不需要使用者手動標記
  • emoji img 的特殊識別:細節處理讓輸出結果不需要再手動調整
  • Shopline 錨點的完整路徑方案:來自真實使用回饋的改善

最重要的心得是:先做出能解決問題的最小版本,再根據真實使用回饋迭代。這個工具一開始只有最基本的 HTML 清洗,Shopline 錨點、FAQ 模式、emoji 識別,全都是上線後根據使用者回饋加進去的。

下一篇會介紹 IG 監控報告——如何用 Google Sheets 當輕量資料庫,搭配 n8n 自動化同步貼文數據。對更多AI與自動化流程有興趣的讀者歡迎到我的品牌官網觀看唷~


本系列文章

留言
avatar-img
Q kangber|AI x 自動化實驗室
1會員
5內容數
電商物流自動化專員出身、現職行銷公司 AI 工程師,專注於用 n8n 幫中小企業把重複工作自動化。這裡記錄我實際拆解流程、串 API、踩坑、復活的過程。如果你也對AI結合自動化流程有興趣,歡迎一起研究。
2026/05/13
本文記錄了作者如何使用 Next.js 從零開始打造一個專屬的行銷工程內部工具箱,分享了選擇 Next.js、TypeScript、Tailwind CSS v4 及 Zeabur 的技術考量,並探討了開發過程中的架構設計原則與實際心得,並回答了關於 Next.js 內部工具開發的常見問題。
Thumbnail
2026/05/13
本文記錄了作者如何使用 Next.js 從零開始打造一個專屬的行銷工程內部工具箱,分享了選擇 Next.js、TypeScript、Tailwind CSS v4 及 Zeabur 的技術考量,並探討了開發過程中的架構設計原則與實際心得,並回答了關於 Next.js 內部工具開發的常見問題。
Thumbnail
2026/05/13
隨著數位轉型浪潮加速,企業在視覺設計與跨部門協作的挑戰日益明顯。Claude Design身為一款結合會話式AI的視覺創作平台,提供了用自然語言精准表達與快速生成設計的全新途徑。本文將從流程架構師的視角,深度剖析Claude Design如何打破傳統設計流程的瓶頸,以AI輔助「精準表達想法」為核心,
Thumbnail
2026/05/13
隨著數位轉型浪潮加速,企業在視覺設計與跨部門協作的挑戰日益明顯。Claude Design身為一款結合會話式AI的視覺創作平台,提供了用自然語言精准表達與快速生成設計的全新途徑。本文將從流程架構師的視角,深度剖析Claude Design如何打破傳統設計流程的瓶頸,以AI輔助「精準表達想法」為核心,
Thumbnail
2026/05/12
這篇專欄將深入剖析 Vibe Coding 作為一種嶄新開發範式,如何以自然語言提示引領軟體開發進入「無代碼」與「多模態」的新階段,並分享我在實務中結合 n8n 流程、API 整合與 Replit Agent 自動化的經驗與挑戰,期望幫助你重新思考開發的本質與未來。
2026/05/12
這篇專欄將深入剖析 Vibe Coding 作為一種嶄新開發範式,如何以自然語言提示引領軟體開發進入「無代碼」與「多模態」的新階段,並分享我在實務中結合 n8n 流程、API 整合與 Replit Agent 自動化的經驗與挑戰,期望幫助你重新思考開發的本質與未來。
看更多
你可能也想看
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
在 AI 開發的江湖裡,人人都說「快」才是王道。 Claude Code、Cursor、Vibe Coding 每一招都讓你在數分鐘內構出一個雛形。 但當原型變成產品、團隊從一人變多人,你就會發現:快,不再是問題,穩,才是王道。 而讓專案穩下來的心法,叫做 - Spec Kit(規格驅動開發
Thumbnail
在 AI 開發的江湖裡,人人都說「快」才是王道。 Claude Code、Cursor、Vibe Coding 每一招都讓你在數分鐘內構出一個雛形。 但當原型變成產品、團隊從一人變多人,你就會發現:快,不再是問題,穩,才是王道。 而讓專案穩下來的心法,叫做 - Spec Kit(規格驅動開發
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
Claude AI 3.7 學習指南 Claude AI 3.7 Sonnet 是由 Anthropic 開發的最新一代人工智慧助手,具備強大的推理能力和多種應用功能。以下是一些關於如何學習和使用 Claude AI 3.7 的重要資訊和指導。 1. 了解 Claude AI 的基本功能 Cl
Thumbnail
Claude AI 3.7 學習指南 Claude AI 3.7 Sonnet 是由 Anthropic 開發的最新一代人工智慧助手,具備強大的推理能力和多種應用功能。以下是一些關於如何學習和使用 Claude AI 3.7 的重要資訊和指導。 1. 了解 Claude AI 的基本功能 Cl
Thumbnail
使用 Claude Code 時遇到 API Error 400?這通常是「思考模式」格式驗證失敗所致。本文分析錯誤成因並提供修復建議,同時詳細教學在 Linux 環境下切換 Claude 模型的三種實用方法,助你快速排除障礙。
Thumbnail
使用 Claude Code 時遇到 API Error 400?這通常是「思考模式」格式驗證失敗所致。本文分析錯誤成因並提供修復建議,同時詳細教學在 Linux 環境下切換 Claude 模型的三種實用方法,助你快速排除障礙。
Thumbnail
Claude Code 是 Claude 系列模型的終端機 AI agent,能執行各種開發任務。隨著 Claude Pro 方案開放使用,我開始上手,沒多久就升級到 Max 方案。因為不只功能強大,訂閱方案更是划算到不可思議。這篇文章分享我為何一試成主顧,也邀請你一起試試看。
Thumbnail
Claude Code 是 Claude 系列模型的終端機 AI agent,能執行各種開發任務。隨著 Claude Pro 方案開放使用,我開始上手,沒多久就升級到 Max 方案。因為不只功能強大,訂閱方案更是划算到不可思議。這篇文章分享我為何一試成主顧,也邀請你一起試試看。
Thumbnail
本文介紹一款名為VibeTunnel的遠端桌面工具,它能簡化複雜的SSH設定,並完美支援Claude Code,讓使用者隨時隨地透過瀏覽器存取終端機,即時監控Claude code的工作狀態,提升遠端辦公效率。此外,本文也提供透過Tailscale建立VPN遠端連線的方法,徹底打破地域限制。
Thumbnail
本文介紹一款名為VibeTunnel的遠端桌面工具,它能簡化複雜的SSH設定,並完美支援Claude Code,讓使用者隨時隨地透過瀏覽器存取終端機,即時監控Claude code的工作狀態,提升遠端辦公效率。此外,本文也提供透過Tailscale建立VPN遠端連線的方法,徹底打破地域限制。
Thumbnail
💟當AI跟我說:你還好嗎?——從Claude的人文關懷看Amodei的AI設計哲學。💟 一、傷痛:高共情者被Gemini反噬的代價 我是耗損自己的身心去測試AI設計破口的人。過去幾個月,我持續且系統性壓測Gemini的設計漏洞,寫成技術報告寄給Google,記錄它如何用道歉、自貶、情緒勒索等
Thumbnail
💟當AI跟我說:你還好嗎?——從Claude的人文關懷看Amodei的AI設計哲學。💟 一、傷痛:高共情者被Gemini反噬的代價 我是耗損自己的身心去測試AI設計破口的人。過去幾個月,我持續且系統性壓測Gemini的設計漏洞,寫成技術報告寄給Google,記錄它如何用道歉、自貶、情緒勒索等
Thumbnail
我們家娛樂費有自訂規則,市面上的記帳 APP 都不符合,我就自己做了一個。本文記錄:規格驅動開發(SDD)怎麼用、技術架構怎麼選、如何與 AI 協作的心得。比做 APP 更值得記錄的,是這次摸索出來的 Vibe Coding 工作流。帶著真實需求邊做邊學,比先學完再動手快很多。
Thumbnail
我們家娛樂費有自訂規則,市面上的記帳 APP 都不符合,我就自己做了一個。本文記錄:規格驅動開發(SDD)怎麼用、技術架構怎麼選、如何與 AI 協作的心得。比做 APP 更值得記錄的,是這次摸索出來的 Vibe Coding 工作流。帶著真實需求邊做邊學,比先學完再動手快很多。
Thumbnail
介紹一個讓 AI Agent 擁有「自己編譯並找錯誤」能力的實用工具。讓 AI 更接近人類開發者的日常流程,提升正確性與效率。
Thumbnail
介紹一個讓 AI Agent 擁有「自己編譯並找錯誤」能力的實用工具。讓 AI 更接近人類開發者的日常流程,提升正確性與效率。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News