【實作】使用 Rendertron 讓SPA專案有SEO分數
單頁應用程式(SPA)因其出色的用戶體驗而廣受歡迎,但卻面臨著搜尋引擎優化(SEO)的挑戰。由於 SPA 的內容主要由 JavaScript 動態生成,搜尋引擎爬蟲在抓取時往往只能看到一個空的 HTML 文件,導致首屏渲染內容無法被有效索引。雖然 Google 宣稱其搜尋引擎會等待虛擬 DOM 渲染完成後再抓取,但其他搜尋引擎的支援度仍有待觀察。(ex. Line, Facebook, twitter … 等)
為了改善 SPA 的 SEO,開發者通常會採用服務端渲染(SSR)的方式,將頁面在服務端渲染成完整的 HTML,再傳送給瀏覽器。然而,SSR 並非所有情況都適用,且可能增加伺服器負擔。
除了 SSR,Google Chrome 團隊開發的 rendertron 提供了另一種解決方案。它可以在伺服器端執行 headless Chrome,將 SPA 渲染成靜態 HTML,以便搜尋引擎爬取。此外,預渲染(prerendering)也是一種常見的優化方式,可以將 SPA 的關鍵頁面預先渲染成靜態 HTML。
實作流程
- clone 到雲端主機上
- Pm2 執行它
- 專案的 Nginx 設定, 讓 Nginx 判別如果是 bot 則導向 rendertron 爬網頁架構
使用 PM2 掛載 rendertron
進入雲端主機, 下載並安裝
Pm2 掛載專案
確認可以執行後, 停掉程式改用 Pm2 來執行
修改專案 Nginx
- location 設定 prender
- 檢查如果是 bot 則導到 rendertron 去爬網站架構, 一般使用者則給一般 Html
以下範例假設架好的 rendertron 網域為 www.rendertron.com
- $scheme 為 http / https
- $host 為 專案的網域/主機位置
- $request_uri 為 專案的網域/主機位置, “ / “後的內容(含” / “)
使用 Docker 掛載 rendertron
除了使用 Pm2 手動掛載專案以外, 也可以使用 Docker 開個 rendertron 容器
範例使用映像檔 ammobindotca/rendertron
執行 docker
修改專案 Nginx
基本上跟上面的 Nginx 一樣, 只需把 proxy_pass 改成 docker 位置即可, 看有沒有使用網域, 或者改用內部 IP 也行
測試
- bot
- 一般使用者
- 題外話:rendertron 使用主機的好壞會影響架構回傳的速度, 也會影響 SEO 分數。