資料模型問題更嚴重:
stock)欄位存在於商品層級(product),但同時又有 variants(規格)陣列。真正的庫存管理應該以「SKU」(例如「黑色 / M 號」這個組合)為單位。XXL 和 2XL,以及 ink navyInk Navytype, isbn)看起來像是從其他領域挪用,缺乏明確的電商語意。/api/homepage API 回傳包含 section_order 的設定,讓行銷人員可以透過後台排序、開關頁面上的區塊(如 Hero、產品展示)。這是個好設計,但問題在於一致性。
API 回傳中同時存在 ann 和 announcement(公告)兩個不同的 key,這表示資料結構可能經歷過不嚴謹的遷移。此外,區塊順序、開關狀態與實際資料是分開儲存的,容易產生不同步的 bug。重構時應將每個區塊整合成一個包含 id, kind, enabled, position, payload 的完整物件。
結帳流程是標準的兩步驟:
POST /api/paypal/create-orderPOST /api/paypal/capture至關重要的原則:伺服器絕不能信任客戶端傳來的價格、折扣或總金額。伺服器必須根據資料庫中的商品價格、折扣規則與運費設定,自行計算所有金額,否則極易被竄改。
報告也點出,良好與不良的實作差異,在於是否有做到:
雖然無法 100% 確定後端語言(可能是 Node.js、PHP 或 Python),但報告提出了一個關鍵的安全疑慮:/api/track 這類追蹤端點如果無條件接收所有請求資料,可能成為被濫用注入垃圾資料的管道,導致資料庫快速膨脹。
此外,/api/orders/track 允許用短數字序號查詢訂單,這存在列舉攻擊(enumeration attack)風險,可能洩露他人購買資訊。建議使用簽署的追蹤令牌(signed tracking token)或需要配對訂單號碼與電子郵件/ZIP 碼。
這是最關鍵的差距。
更糟的是,這個網站目前採用的是「偽 SPA」架構:伺服器為所有路由回傳相同的、幾乎空白的 HTML。這對 Google 來說是「軟 404」與「內容稀少」的雙重打擊 。甚至連社交媒體爬蟲(如 Facebook、LINE 的連結預覽)都因為不執行 JavaScript,永遠抓不到正確的標題與圖片。
關鍵區別:SPA 的痛點在於首次載入。它必須先下載並執行大量 JavaScript,再打 API 取得資料,最後才渲染出商品圖片與價格,這段「載入空白」的時間對使用者體驗傷害極大。
對於一個 16 個商品的網站,客製化架構帶來的複雜度很可能遠超過其帶來的彈性優勢。
報告最終提出了一個務實的建議:繼續走客製化路線,但徹底翻新架構,而非直接改用 WooCommerce。因為該網站的頁面建構器與品牌體驗已是其核心競爭力。
| 比較項目 | 現有:客製化 React SPA | WooCommerce 傳統架構 | 建議:客製化混合渲染 (Hybrid) |
|---|---|---|---|
| 品牌 UI 彈性 | 極高 | 受限於主題 | 極高 |
| 預設 SEO 表現 | 差(純 CSR) | 良好(伺服器端 HTML) | 佳 (SSR/SSG) |
| 導航速度 (後續) | 非常快 (SPA) | 傳統完整頁面載入 | 非常快 + 漸進式增強 |
| 首次載入速度 | 慢 (需下載 JS + API) | 快 (有 HTML) | 快 (有 HTML) |
| 後台管理功能 | 需完全自建 | 成熟完善 | 需自行開發或串接 |
| 維護複雜度 | 專注工程維護 | 專注生態系(外掛)更新 | 專注工程維護 (但架構更健康) |
| 多通路擴展性 | 佳 (API-first) | 需啟用 Headless 模式 | 佳 (API-first) |
| 適合 16 商品? | 大材小用,風險高 | 非常適合 | 適合 (若品牌需求明確) |
這個網站並非使用 WooCommerce、Shopify 等現成平台,而是一個技術含量不低的客製化專案。然而,其純客戶端渲染的架構、不盡理想的資料模型,以及潛在的安全漏洞,為其 SEO、效能與穩定性帶來了顯著風險。
對於技術團隊而言,最務實的路線不是盲目改回 WooCommerce,而是借鏡這個客製化架構的優點(如頁面建構器),並用現代化的渲染模式(如 SSR/SSG)與更嚴謹的資料設計,從根本上解決問題。這份報告提供了一份詳盡的藍圖,供開發團隊作為評估與執行的參考。