2012-05-29 39 views
15

我們大量使用骨幹來呈現我們的頁面。所有的數據都是從服務器以json形式傳遞的,而html則是在骨幹和小鬍子的客戶端上創建的。 這給SEO帶來了一個大問題。我計劃解決這個問題的一種方法是檢測請求是否來自機器人,並使用諸如HtmlUnit之類的東西來呈現服務器上的頁面並將其吐出。 會愛一些替代的想法。也想知道我打算做什麼有缺陷。骨幹js重頁面的SEO

回答

4

我不一定非要這樣做,唯一的選擇就是重做一切,以滿足廣泛的最佳實踐。有一個很好的理由可以考慮使用一種毫不鬆懈的JavaScript方法來做事,但也許有一個很好的理由是你將它作爲一個JS所需的站點。假設有。

如果你正在做一個Backbone.js的應用與動態填充客戶端模板,我能想到的做,這是在下面的鏈接的最佳途徑。基本上,這相當於告訴無頭瀏覽器運行一組導航命令來查看所有用戶/產品/頁面,並在搜索引擎優化原因的每一步保存一個靜態HTML文件。

What's the least redundant way to make a site with JavaScript-generated HTML crawlable?

+2

我覺得除了SEO的複雜性(誰在乎沒有JS的人),有一些非常吸引人的RESTful服務,其中服務器端語言不負責吐出大量意大利麪條HTML,或者甚至這是MVCed仍然將數據綁定到html的固定視圖。 –

3

在一個項目中,我是做什麼工作的我試圖涵蓋所有的基礎..骨幹驅動的客戶端,pushState的URI的,可收藏的網頁和HTML回退在可能的情況。我採用的方法是使用Mustache作爲模板,將它們分解爲用於我的骨幹視圖的漂亮的小組件,並使它們以原始格式提供給客戶端。當請求一個頁面時,可以在服務器上處理模板以產生一個完整的頁面,而主幹連接到它想要控制的元素。

這不是一個簡單的設置,但到目前爲止,我還沒有打任何路障和我沒有任何複製的模板。我不得不爲每個可用的url創建一個頁面包裝器模板,因爲Mustache不會執行「包裝器」,但我認爲我應該能夠通過服務器上的一些額外編碼消除這些模板。

的計劃是可以有一定的組件,其中所要求的接口和一些由服務器提供,而且與在期望的js增強純JS ..

+0

您是否分享模板或模板處理代碼?這個想法一段時間以來一直很有趣。如果使用node.js,看起來好像模板和邏輯可以共享。如果使用RoR,似乎可以共享模板,因爲ERB語法大多與JS模板兼容 – SimplGy

+0

我們正在服務器和客戶端之間共享模板。在服務器上運行Python,我們使用Pystache來處理模板。我們對列表中的項目使用partials,並使部分模板可用於客戶端代碼,以便在需要時將項目添加到列表中。我認爲所需的邏輯通常會有所不同,具體取決於您是在客戶端還是在服務器上,但我們在rpc處理程序和頁面處理程序之間共享服務器端邏輯,方法是讓它們在公共控制器上的權重非常輕,並且調用方法/模型對象。 – lecstor

0

有正反向使用谷歌AJAX檢索方案 - 我用了一個社交網站(http://beta.playup.com),結果好壞參半...

我寫了一個寶石透明地處理這個作爲機架中間件Ruby用戶(創業板安裝google_ajax_crawler)(https://github.com/benkitzelman/google-ajax-crawler

閱讀關於它在http://thecodeabode.blogspot.com.au/2013/03/backbonejs-and-seo-google-ajax-crawling.html

總之,儘管我成功地將呈現的dom快照發布到請求搜索引擎,並且我可以看到使用Google抓取的網站管理員工具,例如11,000個網頁,但我發現Google更傾向於將應用各種狀態(網址)作爲同一頁面的版本,而不是作爲單獨的索引。嘗試搜索beta.playup.com - 即使呈現的內容在URL之間發生根本性變化,也只列出一個索引)....

0

如果您正在使用Node.js的使用rendr

渲染在客戶端和服務器上的應用程序Backbone.js的使用Node.js的