老網站升級最常見的誤判,是以為只有「重做」一條路。我們接到的詢問裡,十件有六件其實不需要重做——網址、內容、既有的搜尋排名都還在,真正壞掉的只是底層技術。把底層換掉的成本,通常遠低於整站重來,而且不會賠掉已經累積好幾年的 SEO。
但也有四件事會讓「升級」這條路直接走不通。這篇把判斷標準和實際風險都寫清楚,您看完應該就能自己判斷手上那個網站屬於哪一種。
一分鐘影片說明
不想看完整篇的話,這支一分鐘的影片把四個判斷點與免費範圍講完了。
先問四個問題,答案決定該修還是該重來
判斷點不是網站幾歲,也不是看起來舊不舊。是這四件事:
| 要確認的事 | 過得了 → 升級 | 過不了 → 建議重做 |
|---|---|---|
| 1. 拿得到完整原始碼嗎? | 檔案齊全、未加密,且您有改寫權 | 檔案不全、被加密保護,或只有使用權沒有修改權 |
| 2. 資料庫結構還撐得住嗎? | 結構完整,只是編碼舊 | 結構本身已經不敷使用,欄位一改就牽動全站 |
| 3. 版面只差 RWD 嗎? | 內容與資訊架構還適用,只是不能在手機看 | 連「這個網站要說什麼」都要重新規劃 |
| 4. 後台邏輯還符合作業流程嗎? | 功能還在用,只是介面難用 | 公司的作業方式早就變了,後台功能對不上 |
前兩項是硬條件,後兩項是程度問題。第 1 項過不了就沒得談——沒有原始碼,任何工程師都無從下手。第 2 項若資料庫結構本身要重新設計,那已經是程式資料庫撰寫的範圍,不是升級。
反過來說,如果四項都過得了,那多半屬於「底層老舊、但骨架還好」的情況——這種升級的性價比最高。
PHP 4.x/5.x 升到 8.5,實際上在做什麼?
很多人以為升級 PHP 是在主機控制台把版本往上調就好。如果程式碼是十幾年前寫的,這樣調下去網站會直接白屏。原因是 PHP 這些年移除了大量舊語法:
- PHP 5.5 起
mysql_*被標為棄用,PHP 7.0 整組移除——舊網站幾乎都是用mysql_connect()、mysql_query()連資料庫的,這些全部要改寫成mysqli或 PDO。 - PHP 8.0 移除
each()——舊的陣列走訪寫法要換掉。 - register_globals 時代的寫法——直接用
$username接表單欄位而不是$_POST['username'],這在現代 PHP 完全不會運作,而且本身就是資安漏洞。 - 錯誤處理行為改變——PHP 8.1 起 mysqli 預設把錯誤丟成例外而非回傳
false。這一項特別陰險:舊程式裡「連線失敗就回傳 false」的防呆會整段失效,程式在拋出例外的地方就死掉,而表面上完全看不出來。
這一段我們自己踩過
最後那一項不是理論。我們自家的訂單系統就中過同一個坑——資料庫連線失敗時拋出例外,把整張訂單靜默吃掉,客戶以為送出成功,實際上什麼都沒進來。而且 php -l 語法檢查會通過、頁面 HTTP 也回 200,從外面完全看不出有問題。這種 bug 只有實際跑一次完整流程才會現形,這也是為什麼我們堅持升級後要逐項實測,而不是看得到首頁就當作完成。
Big5 轉 UTF-8:多數資料沒問題,但有兩種要先處理
Big5 只涵蓋繁體中文。資料庫還停在 Big5 的網站,遇到簡體字、日文、韓文或表情符號都會變成亂碼;現代的前端框架與 API 也預設 UTF-8。轉換本身是標準作業,但有兩種情況要先講清楚:
一、造字區與罕用字
Big5 造字區與部分罕用字在 Unicode 裡沒有對應字元。這類字轉換後會變成問號或空白,需要人工確認要用哪個字替代。人名、地名、公司名裡的異體字最常遇到。正確做法是轉換前先掃描資料庫,把有疑慮的欄位與筆數列出來給客戶看,由客戶決定,而不是逕自替換。
二、同一欄位混了兩種編碼
網站搬過幾次家之後,同一個欄位裡可能有些筆是 Big5、有些是 UTF-8。程式無法自動判斷每一筆屬於哪一種,硬轉會把原本正常的那些變成亂碼。這種只能逐批檢查,而且要先備份。
不管哪一種,原則都一樣:先完整備份,在測試環境確認資料正確之後才動正式資料庫。這與主機搬遷的做法一致——先建好、先測試、最後才切換。
RWD 改版:會變,但變的是版面不是內容
舊網站多半是固定寬度的表格排版,那是 1024×768 螢幕的時代產物。改成 RWD 響應式必須換成彈性版面,所以畫面一定會跟原本不一樣,這一點要先有心理準備。
會保留的是:品牌色、LOGO、文案、圖片、資訊架構。會變動的是:版面配置、間距、選單在手機上的呈現方式。如果您對視覺有特定要求、希望重新設計整體風格,那屬於企業網站設計規劃的範圍,跟技術升級是兩件事。
後台重做:資料不動,動的是介面與底層
後台是最容易被忽略、卻最影響日常的一塊。十年前的後台通常有三個問題:手機完全不能用、表單送出後跳一個 alert() 然後整頁重來、錯誤訊息只寫「輸入錯誤」但不說哪裡錯。
重新設計時,資料與功能完全保留,改的是操作介面與程式底層:現代化版面、手機可操作、表單欄位加上前後端一致的驗證、錯誤訊息改成頁面內顯示並指出具體欄位。原本能做的事一樣能做,只是不必再忍受。
順帶一提,這也是補上 SEO 與 GEO 結構化資料的時機——後台輸出頁面的地方本來就要改,順手把 JSON-LD 標記加進去成本最低。這裡有個原則值得記住:結構化資料標記的內容,必須與頁面上使用者看得到的文字逐字相同。標了頁面上沒有的內容,Google 會判定為濫用結構化資料,而 AI 引擎則會引用到您網站上根本不存在的句子。
四種情況,任何人都做不了
與其評估完才讓客戶失望,不如先說清楚。以下不是不願意做,是技術上或法律上做不到:
- 取不到完整原始碼——網站在別家主機、您沒有 FTP 或資料庫權限,或前一家廠商不願交付。這比想像中常見。
- 原始碼被加密保護——ionCube、Zend Guard、SourceGuardian 這類加密後的 PHP 無法閱讀也無法改寫,原廠以外的所有人都一樣。
- 用了已移除的加密擴充又沒留金鑰——例如以
mcrypt(PHP 7.2 已移除)加密的會員密碼或個資,若金鑰與演算法沒有留存,那些資料在數學上就是解不回來的。 - 您沒有改寫權——買斷式系統常常只授權「使用」而非「修改」。網站是您的,不代表原始碼著作權在您手上。這一項需要先確認合約。
另外有兩類我們會建議走專案而非標準升級:含購物車或線上交易的網站(牽涉金流串接與訂單資料,任何改動都要重新驗證交易流程),以及 WordPress、Joomla 這類套裝系統架設的網站(受制於佈景主題與外掛的相容性,升級 PHP 常常是外掛先壞,要處理的是第三方程式)。
常見問題
Q:老網站升級和整站重做,怎麼判斷該選哪一個?
判斷點不是網站幾歲,而是四件事:一、能不能取得完整且未加密的原始碼;二、資料庫結構是否還撐得住現在的需求;三、版面是不是只差 RWD,還是連資訊架構都要重排;四、後台的功能邏輯還適不適用現在的作業流程。前兩項若過不了,通常只能重做;若只是後兩項的問題,升級的成本遠低於重做,而且網址與既有 SEO 累積都能保留。
Q:PHP 4.x 或 5.x 的舊程式,升級到 8.5 會不會整個壞掉?
不會壞掉,但也不是換個版本號就好。PHP 7 移除了整組 mysql_* 函式、PHP 8.0 移除了 each(),register_globals 時代的寫法都必須改寫。正確做法是先在測試環境完整複製一份,逐項改寫並實測所有功能,確認正常後才切換正式站,原站在確認前完全不動。若某些功能重寫的風險過高,該建議不要做就要直說。
Q:Big5 資料庫轉 UTF-8,舊資料會不會遺失或變亂碼?
多數資料可以完整轉換,但有兩種情況要先處理:一是 Big5 造字區與部分罕用字在 Unicode 沒有對應字元,需要人工確認替代字;二是同一個欄位混雜 Big5 與 UTF-8,這通常是多次搬遷造成的,程式無法自動判斷每一筆屬於哪種編碼。正確做法是轉換前完整備份,先掃描資料庫列出有疑慮的欄位與筆數,由客戶確認後再處理。
想知道您的網站屬於哪一種?
承租 Linux 虛擬主機經濟型(年繳 5,000 元)以上,上述四項升級我們免費做(20 頁以內,不含購物車與 WordPress 類套裝網站);商務型再加碼合約期間的 SEO 與 GEO 持續優化。
完整條件與做不到的情況,都寫在老網站免費升級這一頁。