現今的動態網站,廣泛的應用到 Javascript 及 Ajax 相關技術,但這些技術對 Google 搜尋引擎的爬蟲並不是這麼的友善,從Google 官方文件指南得知,Google 爬蟲是非常了解 HTML 結構,但在爬取 Javascript 及 Ajax 時仍會有問題,如果要提昇對 Google 爬蟲的友善度,Google 還是建議將內容指向 Html。
Rendertron 是 Google Chrome 團隊 利用 node js 及 Puppeteer 所開發的專案,可以用來解決任何 搜尋引擎無法爬取的動態網站內容。
但進階的情境,虛擬列表及 Lazy load ,及更細部的瀏覽器操作,並不支援,但有開放源原始碼,且蠻好改的,可以自己擴充。
網頁服務器,依據搜尋引擎BOT的 useragent,將請求轉向 自己架設的 rendertron server ,此時rendertron,有cache 就會使用 cache ,沒有 cache 就會去和啟動 Puppeteer 爬蟲去將網站爬回來。
https://render-tron.appspot.com/render/您的網站 https://render-tron.appspot.com/render/https://www.letgo.com.tw/
// 下載原始碼 git clone https://github.com/GoogleChrome/rendertron.git // 安裝相關模塊 npm install // 編譯程式碼 npm run build // 執行服務 npm run start
location / { try_files $uri @prerender; } location @prerender { set $prerender 0; if ($http_user_agent ~* "googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") { set $prerender 1; } if ($args ~ "_escaped_fragment_|prerender=1") { set $prerender 1; } if ($http_user_agent ~ "Prerender") { set $prerender 0; } if ($prerender = 1) { rewrite .* /render/$scheme://$host$request_uri? break; proxy_pass http://localhost:3000; #You can use our own hosted Rendertron } if ($prerender = 0) { rewrite .* /index.html break; } }