JavaScript 渲染的 SEO 挑戰:搜尋引擎如何解讀動態內容與常見索引問題

Published on: | Last updated:

先說結論

OK,直接講重點。JavaScript 網站的 SEO 問題,核心就兩個字:資源。Googlebot 雖然越來越強,號稱能跑 JS,但這件事對它來說非常「貴」。 爬完你的 HTML、再把它丟進一個隊伍裡等著渲染、再執行 JS、再看懂內容... 這整個流程又慢又耗資源。 所以,如果你網站的 JS 寫得太複雜、太慢,Googlebot 可能就沒耐心等了,結果就是你的內容沒被完整收錄,排名自然上不去。

簡單說,別給搜尋引擎添麻煩。你能讓它不費力就看懂你的網頁,它才願意把你介紹給使用者。

Google 真的看得懂 JS 嗎?看懂到什麼程度?

這個問題每年都有人問。答案是:可以,但有條件。Google 處理 JS 網站有所謂的「兩波索引流程」(Two-Wave Indexing)。

第一波:Googlebot 快速抓取你伺服器回傳的原始 HTML。這時候它看到什麼就是什麼。如果你的 HTML 裡只有一個空的 `

` 和一堆 `

第二波:抓取完後,如果 Googlebot 發現這個頁面需要執行 JS,它會把這個頁面丟進一個叫「渲染佇列」(Render Queue) 的地方排隊。 等輪到你的時候,一個叫做 Web Rendering Service (WRS) 的東西(基本上就是個無頭瀏覽器)才會真的去執行 JS,把動態內容「畫」出來。畫完之後,再把結果送回去索引。這中間的延遲,可能幾小時,也可能幾天甚至更久。

所以,問題就在這個「延遲」和「不確定性」。你最重要的內容,不應該賭在第二波處理上。特別是新聞、電商這類時效性強的網站,等它渲染完,黃花菜都涼了。

圖解:Google 的兩波索引流程示意
圖解:Google 的兩波索引流程示意

常見的 JS 渲染模式 - 到底差在哪?

好,既然知道 Google 的處理方式,那開發上我們有哪些選擇?現在主流大概就這幾種,我把它們整理成一個表,這樣比較清楚。

渲染模式 簡單講是怎麼回事 對 SEO 的影響 我的快筆記 / 適合誰用
客戶端渲染 (CSR)
Client-Side Rendering
伺服器只丟一個空殼 HTML,所有內容都靠使用者瀏覽器裡的 JS 去生出來。 像很多 React/Vue SPA 預設就是這樣。 對 SEO 最不友善。Google 必須等到第二波渲染才能看到內容,而且很容易失敗。 初始載入慢。 根本是 SEO 殺手,但開發快。適合用在不用 SEO 的後台管理介面,或是登入後才能看的會員區。
伺服器端渲染 (SSR)
Server-Side Rendering
使用者一來,伺服器先在自己家裡把完整的 HTML 頁面做好,再整個丟給瀏覽器。 SEO 的模範生。Google 在第一波抓取就能看到完整內容,最穩。 初始載入速度也快。 對伺服器壓力比較大,成本也高一點。 不過呢,內容網站、電商、企業官網,基本上都該選這個,沒得商量。
靜態網站生成 (SSG)
Static Site Generation
在「上線前」就把所有頁面都產生好,變成一個個純 HTML 檔。使用者來的時候,直接給他現成的檔案。 速度最快,因為根本不用即時運算。對 SEO 也非常好,跟 SSR 一樣棒。 CDN friendly。 缺點是只要內容一改,就要全部重新「產生」一次。適合內容不常變動的網站,像是部落格、文件網站、作品集。
動態渲染
Dynamic Rendering
這招有點像作弊... 喔不是,是聰明。它會判斷來的是真人還是爬蟲。如果是爬蟲(像 Googlebot),就給它一個預先渲染好的靜態 HTML 版本 (SSR/SSG)。 如果是真人,就給他正常的 CSR 版本,讓他有好的互動體驗。 算是個折衷方案,一個給爬蟲看的「特別版」。Google 說這不是偽裝 (Cloaking),他們接受這種作法。 但他們也說了,這只是個「臨時解決方案」(workaround)。 設定起來最麻煩,還要維護兩套東西。適合那種已經用了 CSR、但短期內沒資源改成 SSR 的大型老舊網站,拿來救急用的。
概念對比:伺服器 vs 瀏覽器,誰來完成渲染工作
概念對比:伺服器 vs 瀏覽器,誰來完成渲染工作

實際遇到的坑 - 這些問題 Google 不會告訴你

理論講完了,來講點實際的。就算你用了看起來很潮的 JS 框架,還是可能踩到一堆坑:

  • 內容被部分索引: 最常見的狀況。沒有 JS 就能顯示的頁首、頁尾被收錄了,但中間最重要的產品列表、文章內文(這些都是 JS 動態載入的)卻是空白。Googlebot 可能沒等到你 JS 跑完就走了。
  • Hydration 錯誤: 這在 SSR/SSG 網站很常見。伺服器產生的 HTML 和瀏覽器端 JS 跑完後的結果對不上,頁面就「崩」了。使用者看到可能只是閃一下,但 Googlebot 看到的就是一個壞掉的頁面,自然不會收錄。
  • 效能預算超標: Google 對每個網站的抓取和渲染是有「預算」的。 如果你的 JS 太肥大、執行太久,超過了某個隱形的門檻,Googlebot 就會直接放棄。現在 Core Web Vitals 還加入了 INP (Interaction to Next Paint),這個指標對 JS 的執行效率更敏感。 避免寫出那種會卡住主執行緒的長任務 (Long Tasks) 變得很重要。
  • 隱藏在互動後的內容: 很多內容需要使用者「點擊載入更多」或「展開」才會出現。嗯,Googlebot 通常不會去點這些按鈕。 所以這些藏起來的內容,它大概率是看不到的。

說到這個,Google 官方文件(像是 Google Search Central)會告訴你基本原則。 但很多眉眉角角的細節,還是要看國內外開發者社群的實際案例分享才會知道。例如,Google 官方說他們用的是最新版 Chrome 核心來渲染,但實際上還是有開發者發現某些新的 JS 語法支援度會有延遲。 所以,盡信書不如無書。

怎麼檢查我的 JS 網站有沒有問題?

懷疑自己的網站有 JS 渲染問題?可以自己動手做幾個簡單的檢查:

  1. 網址檢查工具 (URL Inspection Tool): 這是 Google Search Console 裡的必備工具。 把你的網址貼進去,然後看「測試線上網址」的結果。一定要點「查看測試的網頁」,然後比較「HTML」分頁和「螢幕截圖」分頁。如果螢幕截圖看起來正常,但 HTML 原始碼裡卻沒內容,那就有問題了。
  2. 複合式搜尋結果測試 (Rich Results Test): 這個工具跟上面那個很像,但更側重於結構化資料。 同樣可以看它渲染出來的 HTML,而且不用登入 GSC 就能用。
  3. Google 快取: 直接在 Google 搜尋 `cache:你的網址`,然後選「純文字版本」。如果出來的結果空空如也,那 Googlebot 看到的可能就是這樣。
  4. 終極大絕:禁用 JavaScript: 在你的 Chrome 瀏覽器裝個擴充功能,一鍵禁用 JS,然後重新整理你的網頁。你現在看到的,就是搜尋引擎第一眼看到的樣子。如果重要內容都不見了,那事情就大條了。
檢查工具示意:比對原始 HTML 與渲染後的 DOM
檢查工具示意:比對原始 HTML 與渲染後的 DOM

總之,處理 JavaScript SEO 的核心思想,就是換位思考。把自己當成那個資源有限、又沒什麼耐心的 Googlebot,想想看要怎麼讓它用最省力的方式,完整地理解你的網站。能用純 HTML 解決的,就不要沒事找事用 JS。

你的網站是用哪種渲染方式?有踩過什麼有趣的坑嗎?在下面留言分享一下吧!

Related to this topic:

Comments

  1. profile
    Guest 2025-09-13 Reply
    這篇文章真的很及時!剛好最近專案遇到SPA的SEO困境,能不能分享更多實戰經驗?我們團隊正在尋找有效的解決方案,希望能交流一下最新的技術。
  2. profile
    Guest 2025-04-12 Reply
    學長姐好~這篇整理得超詳細!不過有點好奇,像我們學校官網也是用SPA,但搜尋排名還不錯耶?是不是有些特殊情況CSR也能被爬取啊?還是說Google演算法最近有更新?🤔 求指教~