快速答案:多語網站變慢,通常是三層疊在一起:語言數(每多一種語言,頁面、選單、商品資料就多一份)、快取(每個語言各自一套快取,命中率被稀釋)、資料庫(翻譯與字串表越長越大)。先用 Query Monitor 比較同一頁的中文版和外文版,查詢數與載入時間差在哪,就知道該先處理哪一層。
為什麼會這樣 #
WPML、Polylang 這類外掛不是「翻譯」你的網站,而是替每種語言再建一份網站:頁面、文章、商品、分類、選單、Elementor 模板各自一份,全部放在同一個資料庫裡。WordPress 每次讀取內容都要多查一次「這篇是哪個語言、對應的翻譯是哪篇」,語言越多、內容越多,這個關聯成本就越高。
快取的問題在於分母變大:一個中文站有 200 頁,快取 200 頁就全站命中;同樣的站開六種語言就是 1,200 頁,訪客和爬蟲分散在各語言,快取產生得慢、過期得快,很多外文頁面根本沒被快取到就直接打資料庫。搜尋引擎與 AI 爬蟲也會把每種語言都爬一遍,主機負載等於乘上語言數。
資料庫則是慢慢長大:字串翻譯表把佈景、外掛的每一句文字都登記進去,開著「在頁面載入時尋找字串」這類自動登記功能,資料表會不停膨脹;每種語言的修訂版本也各自累積。
怎麼處理 #
- 先量。裝 Query Monitor,開同一頁的中文版和外文版,比較查詢數與載入時間。外文版明顯慢,多半是快取沒命中或翻譯關聯太重;兩邊一樣慢,就是主機或整站的問題,跟多語無關。
- 快取分語言確認。檢查快取外掛有沒有把各語言網址(
/en/、/ja/)都納入預載;有 CDN 的話確認以網址而不是 cookie 區分語言,否則快取會互相汙染或整個失效。 - 關掉自動登記字串。WPML → 字串翻譯最下方的「在頁面載入時尋找字串」,找完字串就關,這是公認最常見的效能殺手。
- 清資料庫。不再使用的語言,確認內容都不要了再移除;清理修訂版本與過期暫存;看翻譯相關資料表的大小,過大的先備份再最佳化。
- 減少爬蟲重複抓。各語言 sitemap 正確、hreflang 對齊,沒翻譯的語言頁隱藏而不是顯示 fallback,避免爬蟲把同一份內容抓好幾遍。
- 最後才看主機資源。語言數翻倍、資料庫翻倍,原本剛好夠用的主機就不夠了;PHP 記憶體、資料庫連線數要跟著調,物件快取(Redis)在多語站的效果特別明顯。
我們實際遇過的情況 #
一個開了多種語言的產品型官網,客戶反映網站變得非常慢、點進產品詳細頁要等一陣子,也問過是不是語言太多、要不要升級主機。這種時候我們不先猜:照上面的順序量出慢在哪一層,再決定是清資料庫、補快取,還是真的該升級主機。語言多確實會讓每一層的負擔變重,但原因要量出來才算數。
什麼時候該找人 #
要動到資料庫清理、移除整個語言、或主機規格調整,做錯會把翻譯一起弄丟;速度問題若在 WPML 或快取外掛大版本更新後才出現,多半是相容性而不是設定。多語外掛怎麼選、語言數怎麼估,見多語外掛選擇那篇;fallback 頁的問題見多語 SEO 那篇。
WPTOOLBEAR網站工具熊