AI 爬蟲讀得到由 JavaScript 呈現的內容嗎?

發布於

簡短回答

往往讀不到。Googlebot 會在稍後的步驟中渲染 JavaScript,但多數 AI 爬蟲並未說明會這麼做,Google 自己也指出並非所有機器人都能執行 JavaScript。如果你的文字要等腳本執行後才出現,AI 爬蟲收到的可能是空白頁面。請用伺服器端渲染或靜態頁面,把主要內容放進初始 HTML。

單頁應用程式與用戶端框架隨處可見,在瀏覽器裡看起來也都正常。但只讀取伺服器所送 HTML 的爬蟲看到的卻是另一回事:一個 <div id="root"></div>、幾個 script 標籤,幾乎沒有文字。對 AI 答案來說,這樣的頁面沒有任何可引用的內容。

本頁內容
  1. AI 爬蟲為什麼會漏掉 JavaScript 內容?
  2. 如何檢查爬蟲收到什麼?
  3. 哪些頁面風險最高?
  4. 如何修正只靠 JavaScript 呈現的內容?
  5. 登入、同意與付費牆畫面也會擋住 AI 爬蟲嗎?
  6. AISeeWhy 如何偵測只靠 JavaScript 的頁面?

AI 爬蟲為什麼會漏掉 JavaScript 內容?

執行 JavaScript 的成本很高。爬蟲得下載腳本、在瀏覽器引擎中執行,還要等資料載入。Google 在 Search 中就是這麼做的:先爬取、將頁面排入渲染佇列,並在資源允許時以無頭 Chromium 渲染。即便如此,Google 仍建議使用伺服器端渲染或預先渲染,因為這對使用者與爬蟲都更快,並指出並非所有機器人都能執行 JavaScript。

OpenAI、Anthropic 與 Perplexity 在爬蟲文件中都沒有說明其代理程式會執行 JavaScript。Apple 表示 Applebot 可能在瀏覽器中渲染頁面。在沒有明確說明的情況下,對 AI 爬蟲的穩妥假設是:它們只讀取初始 HTML。

如何檢查爬蟲收到什麼?

請看原始 HTML,而不是渲染後的頁面。瀏覽器開發者工具顯示的是腳本執行後的 DOM,那不是爬蟲拿到的內容。請使用檢視原始碼,或在命令列儲存原始 HTML 後搜尋:

curl -s -o page.html \
  -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot" \
  https://example.com/page

# Is a sentence from your main text in the raw HTML?
grep -c "a sentence from your main content" page.html

結果為 0,代表該句子不在伺服器所送的 HTML 中,因此不執行腳本的爬蟲也找不到它。看一眼檔案就能知道其餘情況:伺服器端渲染的文章,全文都在裡面;用戶端的空殼則只有一個空的根元素和一串腳本。

哪些頁面風險最高?

如何修正只靠 JavaScript 呈現的內容?

解決辦法是在第一次回應就送出重要內容。請選擇你的技術堆疊所允許的最輕量方式:

你不必一次轉換整個應用程式。先從你希望被引用的頁面開始:文章、文件、產品與價格頁面。帳號區與儀表板可以維持在用戶端,因為它們本來就在登入之後。

避免依 user agent 為爬蟲提供與使用者不同的頁面。對所有人渲染相同的 HTML,維護起來更簡單,也能避免任何偽裝(cloaking)的疑慮。

登入、同意與付費牆畫面也會擋住 AI 爬蟲嗎?

會。爬蟲不會登入、不會點擊 cookie 橫幅,也不會解決驗證挑戰。Anthropic 表示其機器人不會嘗試繞過 CAPTCHA。如果同意管理工具在 HTML 中以全螢幕覆蓋層取代頁面,或把首次造訪者重新導向到同意頁面,爬蟲拿到的就是那些,而不是你的內容。

請確保公開頁面無論同意狀態為何,都會在 HTML 中呈現其內容,橫幅只是覆蓋層,而不是取代頁面。想被引用的頁面請放在登入牆之外,並確認爬蟲沒有被重新導向到登入頁面。

AISeeWhy 如何偵測只靠 JavaScript 的頁面?

AISeeWhy 會讀取各爬蟲收到的初始 HTML,而且不執行腳本。當頁面幾乎沒有可見文字,只有框架的根元素和腳本時,它會回報 P1 發現,指出內容需要 JavaScript。它也會標出把爬蟲導向別處(而非瀏覽器所得頁面)的重新導向。

常見問題

Googlebot 會渲染 JavaScript 嗎?

會。Google 先爬取 HTML,將頁面排入渲染佇列,並在資源允許時以無頭 Chromium 渲染。Google 仍然建議使用伺服器端渲染或預先渲染。

ChatGPT、Claude 與 Perplexity 的爬蟲會執行 JavaScript 嗎?

這些廠商的爬蟲文件並未說明。在廠商另有說明之前,請假設爬蟲只讀取初始 HTML,並確保你的內容就在其中。

針對機器人的動態渲染是個好主意嗎?

它可作為權宜之計,但會多出一條需要維護的渲染路徑。伺服器端渲染或靜態 HTML 對所有人提供相同的內容,是更簡單的長期解法。

由 JavaScript 加入的 JSON-LD 算數嗎?

Google 在渲染後可以讀取,但不執行腳本的爬蟲看不到。請把 JSON-LD 放在初始 HTML 中。

資料來源

更多文章