加入好友

Codex 做好的銷售頁怎麼上線?|HTML、assets、ZIP 到 cPanel 完整部署流程

前面幾篇 Codex 筆記,我一路從 Product Input、Brand DNA、Page Plan、多版本 Strategy、圖片素材,到 Customer-facing Copy、Internal Notes、LOCKED,一層一層把銷售頁生成器拆開來看。

做到這裡,頁面其實已經差不多完成了。

但還有最後一個非常現實的問題:做好的頁面,要怎麼真的放到網站上?

因為 Codex 在專案裡顯示得再漂亮,如果只有我自己在電腦裡看得到,那它還不算真正的網站。

最後還是得把:HTML、CSS、圖片、assets、ZIP 整理好,再放到主機。

而我這一次的做法,不是把頁面塞進 WordPress。

我想做的是:獨立的靜態銷售頁。

所以我最後走的是:Codex → ZIP → cPanel → 前台網址。

而且這次真正成功上線之後,我才發現,這件事其實沒有我以前想像得那麼可怕。

只要先搞懂幾個核心概念:

  • index.html 是什麼?
  • assets 是什麼?
  • CSS 要放哪裡?
  • ZIP 裡面應該長什麼樣子?
  • 為什麼不能多包一層資料夾?
  • cPanel 解壓之後,首頁到底去哪裡找?

這些搞懂之後,其實整個部署流程就很清楚了。

許多人最怕的,其實就是「網站上線」這四個字

因為「做網頁」和「把網頁上線」,在我以前的認知裡,是兩件完全不同的事情。

做網頁還可以交給設計師。

可是只要講到:主機、FTP、DNS、路徑、根目錄、index.html,許多人的腦袋就會自動把它歸到:「工程師的世界。」

但這一次因為我本來就只想做靜態銷售頁,事情反而簡單很多。

我不需要先建立 WordPress、不需要資料庫、不需要安裝外掛、不需要主題,只要頁面的檔案完整,主機能讀,就可以直接開。

這就是靜態頁面讓我開始比較有信心的地方。

第一個要先搞懂:index.html 就是這張頁面的入口

現在把 index.html 理解成:這個網站資料夾的首頁。

例如我今天把網站放在:/public_html/dosha-sunscreen/

如果這個資料夾裡面有:index.html

那麼我打開對應網址時,伺服器通常就會自動讀這個檔案。

也就是說,網址不一定要打成:https://example.com/dosha-sunscreen/index.html

通常直接:https://example.com/dosha-sunscreen/ 就可以看到。

可以理解成:index.html 就像這個資料夾的大門。

只要大門放對地方,網址一進來,就知道要先開哪一頁。

那 styles.css 是什麼?

如果 index.html 是房子的結構,那 CSS 就很像:裝潢與視覺規則。

HTML 決定:哪裡是標題、哪裡是圖片、哪裡是按鈕、哪裡是 FAQ。

CSS 則決定:字多大、間距多少、背景什麼顏色、手機版怎麼排、按鈕長什麼樣子、圖片比例怎麼顯示。

所以如果今天 HTML 有上傳,但 CSS 路徑壞了,會出現一個很經典的狀況:內容還在,但整張網站像完全沒設計過。

這不是 HTML 壞掉。通常是樣式檔沒有正確讀到。

assets 又是什麼?

上一篇我們已經談過圖片。最後真正拿來給網站使用的圖片,通常會整理進:assets/

例如:

assets/
├── product-main.jpg
├── lifestyle-01.jpg
├── texture.jpg
└── hero-bg.jpg

有些專案也可能把:圖片、字型、icon、script 再往下分類。

例如:

assets/
├── images/
├── icons/
└── js/

這都可以。重點不是一定要長一模一樣。

而是:HTML 裡面的路徑,必須和實際檔案位置一致。

最基本的靜態銷售頁結構,可以先長這樣

如果是很單純的一頁式銷售頁,我現在會先把它想成:

dosha-sunscreen/
│
├── index.html
├── styles.css
└── assets/
    ├── product-main.jpg
    ├── lifestyle.jpg
    └── texture.jpg

這個結構其實已經可以上線。

如果還有 JavaScript,再多一個:script.js 就可以。

所以不用一看到 Codex 專案裡一堆文件,就以為全部都要一起丟到網站。

真正前台網站需要的,通常只是最後輸出的那一包。

工作文件和「真正上線檔案」不要混在一起

這是前面幾篇一路累積下來很重要的觀念。

像:Product Input、Brand DNA、Page Plan、Internal Notes、Strategy 文件,這些都是工作過程的重要資料。

但消費者進網站,不需要讀這些檔案。真正上線時,比較像是把工作成果整理成:

dist/
├── index.html
├── styles.css
└── assets/

也就是我後來會特別把:工作區 和:部署區 分開。

我現在最喜歡的概念:dist 就是「準備上線的成品箱」

很多專案最後會有一個類似:dist/ 的資料夾。

我現在會把它理解成:這裡面的東西,就是準備搬去主機的最終成品。

不再是原始資料、不再是測試筆記、不再是 Prompt,而是前台真的需要的東西。

例如:

dist/
├── index.html
├── styles.css
└── assets/
    ├── product-main.jpg
    ├── product-packaging.jpg
    └── lifestyle.jpg

只要這裡可以獨立運作,部署就簡單很多。

下一步:把成品打包成 ZIP

這一步其實就是為了方便上傳。

如果網站有二、三十個檔案,一個一個上傳當然也可以,但很麻煩。

所以最簡單就是:整包壓成 ZIP。

例如:dosha-sunscreen-v01.zip 然後一次丟到 cPanel。

但是 ZIP 有一個超級重要的細節

這也是我覺得最容易出錯的地方之一。

假設我要把頁面放進:/public_html/dosha-sunscreen/

我希望 ZIP 解壓後,直接變成:

/public_html/dosha-sunscreen/
├── index.html
├── styles.css
└── assets/

這樣最乾淨。

可是如果 ZIP 裡面又包了一層:dosha-sunscreen-v01/

那解壓之後會變成:

/public_html/dosha-sunscreen/
└── dosha-sunscreen-v01/
    ├── index.html
    ├── styles.css
    └── assets/

這時候網址:https://example.com/dosha-sunscreen/ 就可能找不到 index.html。

因為真正的首頁被藏在下一層。

特別檢查:ZIP 打開後,第一層是不是 index.html

這是一個我現在一定會做的檢查。下載 ZIP 之後,不要急著上傳。

先打開看。我希望看到的是:

index.html
styles.css
assets/

而不是:

某某資料夾/
    index.html
    styles.css
    assets/

如果是後者,就代表多包了一層。這時可以重新打包,或上傳後再把裡面的檔案搬出來。

我的部署流程:先進 cPanel 的 File Manager

真正開始上線時,我這次使用的是 cPanel。

進入 cPanel 之後,先找:File Manager/檔案管理員。

這裡可以把它理解成:主機版的 Windows 檔案總管。

你會看到一堆資料夾。

如果是主要網站,常見會有:public_html

如果你已經建立好子網域或子資料夾,實際路徑會依主機設定不同。

所以這一步我現在不會亂猜。

我會先確認:這個網址目前對應到哪個 Document Root。

Document Root 是什麼?

我現在會把 Document Root 理解成:這個網址真正去找檔案的資料夾。

例如某個子站:sale.example.com

可能指向:/public_html/sale/

那我要上傳的 index.html,就應該放進:/public_html/sale/

而不是看到 public_html 就全部亂丟。

這也是為什麼:上傳前一定要先知道自己現在在哪個資料夾。

接著就是 Upload ZIP

進到正確資料夾後,我會使用 cPanel 的 Upload 功能,把 ZIP 上傳。

例如:dosha-sunscreen-v01.zip

上傳完成之後,再回到 File Manager。

找到 ZIP。然後選:Extract。解壓。

這一步完成之後,真正的 HTML、CSS、assets 才會出現在主機裡。

解壓完第一件事:不是立刻看漂亮不漂亮,而是先看結構

我現在會先看:

index.html
styles.css
assets/

是不是就在目前資料夾。

如果 index.html 在下一層,我就先處理資料夾結構。因為首頁位置都錯了,再怎麼重新整理瀏覽器都沒用。

然後才開網址測試

如果資料夾沒問題,就可以直接開實際網址。

第一次看到頁面真的從主機跑出來,那個感覺其實很奇妙。

因為前一刻它還只是一堆:HTML、CSS、圖片、ZIP。

下一刻就變成:一個任何人都可以打開的網頁。

我這次第一次成功部署 Tina-Sales-Page-Generator 的輸出時,就是真的到這一步才有:「喔,原來這就是上線!」的感覺。

上線後,第一輪我會檢查哪幾件事?

我現在不會只看:「首頁有沒有出現?」,而是至少會檢查以下幾件事情。

1. 圖片有沒有正常顯示?

如果文字有出現,圖片全部不見,通常第一個先看:assets 路徑。

例如 HTML 裡寫:<img src="assets/product-main.jpg">

那主機裡就真的必須存在:assets/product-main.jpg

2. CSS 有沒有正常讀取?

如果畫面突然變成:白底、字全部靠左、按鈕沒樣式、Section 全部黏在一起。

很可能就是 CSS 沒讀到。

例如:<link rel="stylesheet" href="styles.css">

那 styles.css 就必須和 index.html 在對應位置。

3. 手機版有沒有跑掉?

桌機版正常,不代表手機正常。所以我一定會再用手機,或瀏覽器縮窄畫面看。

特別檢查:

      • 標題有沒有爆版
      • 圖片有沒有超出螢幕
      • 按鈕是不是太小
      • 左右排版有沒有正確變成上下
      • FAQ 能不能正常閱讀

4. CTA 連結有沒有真的能點?

這個很容易忘。畫面有「立即購買」,不代表網址已經接好。

如果 HTML 還是:href="#" 按了當然不會去哪裡。

所以真正上線前,要確認 CTA 的網址。

5. 有沒有還留著 IMAGE PLACEHOLDER?

如果這是正式要使用的版本,我也會從頭到尾再看一次。

確認有沒有:IMAGE PLACEHOLDER。

如果這個位置本來就還沒準備正式素材,那保留可以。

但如果已經要投廣告、正式導流,就要知道它還沒完成。

另一個常見問題:本機正常,上線卻壞圖

這通常又會回到上一篇講的:絕對路徑 vs 相對路徑。

如果 HTML 還指向:C:\Users\Tina\Desktop\product.jpg

本機可能看得到,主機絕對看不到!因為網站根本沒有我的 C 槽。

所以最後部署版最好使用:assets/product.jpg 這種相對路徑。

還有一個我現在會特別檢查:大小寫

Windows 對某些檔名大小寫不那麼敏感。但是網站主機常常不一樣。

如果 HTML 寫:assets/Product-Main.jpg

實際檔名卻是:product-main.jpg

有些主機就會直接找不到。

所以我現在會盡量統一:小寫英文+連字號。

例如:dosha-sunscreen-main.jpg

不要一會兒大寫、一會兒中文、一會兒空格。

如果上傳後看到 403、404 或空白頁,我會怎麼查?

現在如果遇到問題,我不會第一時間全部重做。

我會先按順序查。

第一步:確認網址對應的資料夾

Document Root 對嗎?

第二步:確認 index.html 在正確那一層

是不是多包了一層?

第三步:確認檔名

真的叫:index.html 嗎?

第四步:確認 assets 和 CSS 路徑

是不是資料夾位置變了?

第五步:確認檔案權限

如果主機真的有權限問題,再檢查檔案和資料夾權限。

但我現在不會一看到網頁打不開,就立刻跑去亂改權限。

很多時候其實只是:index.html 放錯層。

我這次真正覺得好用的,是「cPanel-first」思考

做到後來,我們甚至開始在 Final QA 裡直接要求:cPanel-first。

也就是從一開始就假設:這個網站最後要靠最簡單的方式:解壓 ZIP 就上線。

那所有路徑、檔案結構、圖片位置,就都朝這個方向設計。

這樣最後就不用:裝一堆環境、跑 build command、進 SSH、設定 Node。

對我這種不是工程師、只是想快速部署銷售頁的人,反而最適合。

Final QA 為什麼很重要?

我後來做 V02 時,我們有特別做 Final QA。

檢查的其實不是只有:「畫面漂亮嗎?」

而是:

    • ZIP 解壓後 root 是否直接有 index.html
    • styles.css 是否存在
    • assets 是否完整
    • 相對路徑是否正常
    • 375px 手機版是否正常
    • 768px 平板是否正常
    • 1024px 是否正常
    • 1440px 桌機是否正常

當這些都通過之後,我才真的比較敢把它當:「可以交付的版本。」

所以部署不是最後一秒才處理的事情

這也是我這次最大的觀念改變之一。

以前我會想:網頁先做漂亮,做完再想怎麼上線。

現在我會反過來。

我會一開始就問:最後準備怎麼部署?

如果最後就是 cPanel 靜態頁,那一開始就應該:

    • 使用相對路徑
    • 檔名簡單
    • 不要依賴本機路徑
    • assets 整理清楚
    • 最終輸出可以直接 ZIP
    • index.html 放在 ZIP 第一層

這樣最後會省掉很多麻煩。

我的「無腦部署版」流程

如果把這次經驗濃縮成最簡單的流程,我現在會這樣做:

    1. Codex 完成頁面
    2. 確認 Final QA
    3. 打開 dist 資料夾
    4. 確認第一層有 index.html
    5. 確認 styles.css 與 assets 都在
    6. 壓成 ZIP
    7. 登入 cPanel
    8. 進入正確 Document Root
    9. Upload ZIP
    10. Extract
    11. 確認 index.html 沒有多藏一層
    12. 打開網址
    13. 檢查桌機與手機版
    14. 測試圖片與 CTA

做到這裡,基本上就完成了。

版本檔名我也開始不敢亂取了

因為後面會有 V01、V02,一直到 V10。

如果 ZIP 全部都叫:website-final.zip

很快就會變成:

website-final-new.zip
website-final-new2.zip
website-final-really-final.zip

這種災難。

所以我現在反而會建議直接版本化。

例如:

dosha-sunscreen-v01.zip
dosha-sunscreen-v02.zip
dosha-sunscreen-v03.zip

如果要再加日期,也可以。

重點是:檔名一看就知道這是哪一版。

如果要更新網站,是不是直接蓋掉就好?

技術上可以,但我現在會比較小心!如果是正式網站,我會先保留上一版。

例如先把舊檔案備份,或先把舊 ZIP 留著,這樣新版本真的有問題時,至少還可以回上一版。

這就是為什麼版本號越到後面會越重要。

最大的成就感

一張網頁從 Codex 裡面出來之後,最後是怎麼變成真正網址的。

整條路徑其實就是:內容與設計 → HTML / CSS → assets → dist → ZIP → cPanel → URL。

現在終於串起來了。

Tina學姐這次學到的重點:部署其實也是工作流程的一部分

我以前會把「網站部署」想成最後一個技術動作。

現在反而覺得:部署方式本身,應該從一開始就被設計進工作流程。

因為如果最後要用 cPanel:那圖片路徑就應該適合 cPanel,檔案結構就應該適合直接解壓。

ZIP 就應該一層打開直接看到 index.html。

Final QA 也應該針對:「上傳之後能不能直接使用」來檢查。

這樣 Codex 做出來的就不只是:「看起來像網站的東西。」

而是:真正可以部署的網站。

寫在最後:第一次真的上線之後,我才覺得生成器開始完整了

一路做到這裡,我覺得 Tina-Sales-Page-Generator 才真的開始有完整的樣子。

因為以前只是:生成文案、生成版面、生成 HTML。

但是現在,它已經開始變成:可以被部署、可以被打開、可以給真正訪客看的東西。

這中間最大的差別就在:最後一公里有沒有走完。

而對我來說,能夠把 ZIP 自己丟進 cPanel,解壓,然後真的看到頁面出現在網址上,這件事其實很有意義。

因為它讓我知道:不需要變成工程師,還是可以把 AI 做出來的東西真正放到網路上。