2012-06-01 68 views
4

我有一個網頁製作,這是90%的Javascript。所有的網站都是動態呈現的。服務器端渲染動態頁與PhantomJS在Ruby On Rails

我希望服務器也能呈現此內容,以便Google可以抓取並索引我的所有內容和鏈接。

我知道爲了不被谷歌禁止,動態頁面和服務器渲染頁面的內容必須幾乎相同。

我不想編寫兩個不同的頁面(一個來自Handlebars的客戶端,另一個來自服務器和ERB的服務器)。

所以我想到了PhantomJS。我想要的是,當我從Google獲得_escaped_fragment_ param時,我不使用PhantomJS打開該頁面,而是將它從PhantomJS呈現給HTML,並將其從服務器返回給Google。這樣,我不必爲任何東西創建兩個不同的頁面。

我知道我也可以使用Handlebars進行服務器端模板化,但我必須無論如何都要編寫兩次代碼。

有沒有人知道如何用PhantomJS來實現這一點?有沒有其他方式不重複邏輯和代碼兩次,並有谷歌索引網站?

謝謝!

回答

10

是的,你可以。

添加以下到你的Javascript密集頁面

<meta name="fragment" content="!"> 

的當谷歌機器人發現這個標籤,它會發出一個新的HTTP GET請求。這一次,它會將?_escaped_fragment_=添加到您的網址。

所以,如果用javascript你的網頁位於:

www.mysite.com/mypage 

谷歌將發佈一個新的開始使用以下網址:

www.mysite.com/mypage?_escaped_fragment_= 

在你的Ruby GET處理程序,您只需撥打PhantomJs與未轉義的URL(只是做一個字符串替換)。在您的PhantomJs JavaScript代碼中,等待頁面呈現,然後使用常規JavaScript提取HTML並將其返回到您的Ruby GET處理程序,您將只使用HTML文本字符串響應GET。

以這種方式,您不必編寫兩次代碼。該解決方案是通用的,並且會拍攝任何內容