iT邦幫忙

2026 iThome 鐵人賽

DAY 28
0
Modern Web

Vue 前端工程師視角看 Flutter Web系列 第 28

Day 28|SEO 導向專案該不該選 Flutter Web?決策框架

  • 分享至 

  • xImage
  •  

模組六|SEO/SSR(Day 25–28)

先備:Day 25–27(SSR 光譜、爬蟲實測、三帖補救藥)。這一篇可以單獨帶進選型會議,但每一格的理由都在前三天。

這個標題其實一個字就能答完:「不。」但只答這個字有兩個問題——第一,這篇會變廢文;第二,世界上存在一整批專案,這個問題對它們根本不成立,而分辨出「你的專案是不是那批」才是選型會議上真正值錢的能力。今天把 Day 25–27 的證據壓成一個可以直接帶進會議的框架。

結論先講:

SEO 是不是核心需求,這個問題要在選框架之前問,不是之後。

因為 Day 27 那三帖藥全部是體外循環——它們能止痛,但沒有一帖能把「內容不在 DOM 裡」這件事改掉。

Vue 怎麼做

先定錨:Vue 陣營對 SEO 導向專案的答案是一條完整光譜。Nuxt 的 routeRules 讓 SSR、SSG、ISR、CSR 在同一個專案裡按路由混用,內容頁全靜態、商品頁增量再生、後台純 CSR——全是設定檔等級的決策(Day 25)。爬蟲在第一關就拿到完整 HTML,路由級 meta 是框架原生功能(Day 26 的 useSeoMeta)。

所以框架的第零條是:當 SEO 是核心需求,Vue/Nuxt 是預設解,舉證責任在想換掉它的人身上。 這不是信仰,是這三天的技術盤點結果。

Flutter Web 怎麼做

Day 1 我給過一棵決策樹,走到 Day 28,它經過了 SEO 專題的完整檢驗,維持原判:

  1. 有 Flutter mobile app 要延伸 web → 用,唯一強理由
  2. Canvas 密集工具型產品+不需要 SEO → 可考慮
  3. 一般網站/內容站/電商 → Vue,不用懷疑

疊上 SEO 維度後,關鍵的前置問題是:SEO 對這個產品是收入管道,還是虛榮指標? 內容站、電商,自然流量就是命脈,落入分支 3,討論結束。但登入牆後的工具型產品,「SEO 需求」實際上只是一頁 landing page——那用 Day 27 的混合架構就打發了:Nuxt 寫官網,Flutter 寫 app。

function shouldUseFlutterWeb(project) {
  // 第一題是否決題,先刷掉,後面兩題不必跑
  if (project.seoIsRevenue) return 'NO —— 分支 3,回去用 Vue/Nuxt'

  if (project.hasFlutterMobileApp) return 'YES —— 分支 1,唯一強理由'
  if (project.isCanvasHeavy) return 'MAYBE —— 分支 2,往下看正面案例'
  return 'NO —— 分支 3,回去用 Vue/Nuxt'
}

注意 seoIsRevenue 的守衛擺在最前面,而不是塞在分支 2 的條件裡:就算你已經有 Flutter mobile app,只要 SEO 是收入管道,答案還是不要——那個情境的正解是 Day 27 的混合架構(Nuxt 寫官網、Flutter 寫 app),不是「因為有 app 可以複用所以整站給 Flutter」。這個守衛的位置,就是整個框架最容易被說服放棄的一行。

正面錨點案例:看盤軟體

分支 2 不是空集合。看盤/交易介面是它的教科書場景,五個條件全中:

  • Canvas 密集:K 線、深度圖、技術指標疊圖——這種需求在 Vue 你也是跳過 DOM,直接上 lightweight-charts、TradingView widget 或手寫 canvas。DOM 的優勢本來就用不到。
  • 高頻重繪:tick 級即時更新,Flutter 的 RenderObject 管線比「改 state → DOM diff → repaint」更貼近需求本質。
  • 像素級一致性:金融產品的圖表在 Safari、Chrome、Firefox 必須長得一模一樣,畫布渲染天然免疫瀏覽器差異。
  • SEO 無關:登入牆後的工具,爬蟲根本進不來。Day 26 那個最大硬傷,直接豁免。
  • 長 session 攤提首載:使用者一開盤掛一整天,1.5MB 的 bundle 攤在數小時的 session 裡無感。內容站「進來看一篇就走」的模式才會被首載殺死。

加分項:這類產品幾乎都有 mobile app 需求(看盤 app 是標配),等於同時命中分支 1——跨平台複用在這裡是真實收益,不是簡報上的口號。這也解釋了為什麼市面上真的存在用 Flutter 打造的看盤產品,這個分支不是紙上談兵。

反面清單也要誠實列:文字選取、複製報價、無障礙、i18n 排版都是模擬行為;如果產品含大量表格式資料頁(財報、公告),那部分仍該留給 DOM——用 Day 27 的 element embedding 切給 Nuxt 做。結論:看盤軟體是「Flutter Web 該不該用」這個問題的最佳反例——在這一格,它不只是能用,而且可能比 Vue 更順。這種場景很少,但它真的存在,所以第零條的舉證責任才有意義:舉證責任存在,代表舉得出來的人可以贏。

我自己這兩個 demo 落在哪一格

框架要有用,得先能判自己。把 Waypoint Air 的兩個版本丟進去跑一遍:

它是一個訂票流程——選日期、選人數、選航班、確認、付款。沒有內容頁、沒有商品目錄、沒有部落格,全部畫面都在使用者「開始訂票」之後才有意義。如果它是真產品,SEO 需求會落在哪裡? 落在首頁跟航線介紹頁,而那兩頁在我的 demo 裡根本不存在。

所以誠實的判定是:這支 demo 落在分支 2 的邊緣——工具型、流程導向、SEO 需求集中在少數幾個入口頁。真要上線,我會照 Day 27 的第三帖走混合架構:首頁和航線頁用 Nuxt,訂票流程從 /booking 開始交給 Flutter。

而它現在的樣子(Day 26 那兩個樣板值、vercel.json 只有一條 rewrite)說明了另一件事:這兩個 demo 從來沒有為 SEO 做過任何準備,而我到 Day 26 才發現這件事。 這正是這個框架要防的事——SEO 不是上線前的檢查項,是選型當下的輸入。

差異與坑

坑一:拿「Googlebot 會跑 JS」替 Flutter Web 辯護。 Day 26 驗過屍了——跑完 JS 看到的是一張圖,這個論點在 Flutter Web 上連部分成立都談不上。症狀:會議上有人講完這句,全場就過了;三個月後 Search Console 顯示產品頁全部「已檢索,尚未建立索引」。

坑二:把混合架構當免費附件。 它救得了 SEO,但兩棧並養的組織成本是真的(Day 27),評估時要進成本欄,不要放備註欄。症狀:專案排程時「加一層 Nuxt 做行銷頁」被估成兩週,實際上光是把設計系統在兩邊對齊就花掉一個月。

坑三:SEO 需求會長出來。 這是最陰險的一個。產品從工具 pivot 成內容平台、行銷說要開部落格養自然流量——Vue 專案加個 Nuxt 就有逃生門,Flutter Web 沒有。選它等於對「這個產品未來不需要 SEO」下注,下注前請確認賠率。症狀:兩年後行銷部門要求做內容行銷,工程給出的評估是「等於再開一個新專案」,而當初的選型會議紀錄裡沒有任何人提過這個風險。

坑四:選型錯誤是雙向的。 反過來,看盤類產品硬用 DOM 去畫 tick 級圖表,是另一種效能地獄。框架的意義不在護航某個陣營,在讓兩種錯都犯不下去。症狀:報價一秒跳十次,你在 DevTools 看到 layout thrashing 警告排滿整頁,而那個元件已經被三個人各自最佳化過一輪了。

坑五:框架要當會議議程跑,不要當結論貼。 順序很重要。決策樹告訴你「落在哪一格」,但會議上你真正需要的是「多快能刷掉不用討論的選項」——所以實際開會請照這三個問題跑,跑完才對照決策樹。症狀:你把決策樹貼在簡報第三頁,會議上大家看完點頭,然後花四十分鐘討論「可是我們團隊比較熟哪個框架」——因為那張圖回答的是結論,沒有回答「哪些選項現在就可以不用討論」。

三個問題是:

  1. 這個頁面需要被 Google 搜到嗎? 需要 → 結束,用 Vue/Nuxt。這是否決題,不是加權題。
  2. 這個產品之後要上手機嗎? 要 → Flutter Web 立刻加分(就是分支 1 的來源)。
  3. 卡住的時候,有人踩過這個坑嗎? 注意問的不是「我會不會寫」——那題 AI 已經幫你答了(Day 1 的獨家論點)——問的是生態夠不夠厚,Day 29 會把這筆帳算完。

順序不能換,第一題一定最先問,理由是它最殘酷也最快:一旦答案是「要靠搜尋」,後面兩題連做都不用做,會議可以直接進下一個議程。反過來先問「我們有沒有 mobile app 可以複用」,等於讓一個注定出局的專案先跑完一輪加分題,開一小時得到一個第一分鐘就該有的結論。而順序整個反過來的選型會——先選好想用的框架、再回頭找理由——結論通常在投影片做完之前就內定了,這三天的所有證據都會被當成雜訊。

小結與下一篇

一句話:SEO 導向專案選 Flutter Web 的答案是「不要」,而真正的專業是在會議上分辨出你的專案到底是不是 SEO 導向——看盤軟體就不是。明天 Day 29〈生態系與工具鏈踩坑心得:套件成熟度盤點+DevTools 除錯實戰〉,從一個問題開場:畫在 canvas 上,那 console.log 去哪了?

參考資料

如果你卡在語法

深入原理


上一篇
Day 27|補救方案:預渲染、meta 標籤注入、混合架構
下一篇
Day 29|生態系與工具鏈踩坑心得:套件成熟度盤點 + DevTools 除錯實戰
系列文
Vue 前端工程師視角看 Flutter Web30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言