2013-04-02 124 views
2

Sitemaps很酷。如果我想要一個我的流星的項目,我想我可以做下列之一:創建meteor.js站點地圖

  1. 硬編碼sitemap.xml的文件,並放在/公/文件夾。不是動態的,但很容易找到谷歌。對於有少量子頁面的應用來說可能就足夠了。
  2. (還沒有嘗試過)使用流星Router在/sitemap.xml(?)創建一個動態站點地圖,並將其輸出爲XML。動態的,但不會很容易找到谷歌找到它的動態加載(可能與spiderable包?)

但這兩個都不是很令人滿意。我希望它是動態的,但仍然存儲在Google很容易找到的(最好)靜態文件中。或類似的東西。

什麼是最好的方法?

回答

3

,如果有,你可以使用客戶端路由器動態生成網站地圖的方式,這可能是可能的流星路由器

你需要meteor router和流星的HTTP。流星路由器的優先級爲meteorite,它看起來像你已經擁有。

所以第一步是使路線爲sitemap.xml的與服務器端的路由:

Meteor.Router.add('sitemap.xml', function() { 
    //get sitemap data (below) 
    return generated_sitemap; 
}); 

和函數生成網站地圖:

我們需要router.js,這是很遺憾只能在客戶端上運行。所以我們需要用meteor.http來獲取它。 router.js文件基本上包含您的路由器代碼的Meteor.Router.add位。調整URL到哪裏可以存儲你的文件router.js

routerdata = Meteor.http.get("http://localhost:3000/client/router.js").content 

然後,我們需要解析路由器的數據離開那裏(確保你使用var所以作用域不會破壞實際路由器)

服務器端JS

Meteor.Router.add('/sitemap.xml', function() { 
    routerdata = Meteor.http.get("http://localhost:3000/client/router.js").content 
    var Meteor = {}; 
    Meteor.Router = {add:function(input) {return input}}; 

    //drag the data out of the routerdata, eval is quick and dirty but you could shackle it down further 
    routers = eval(routerdata); 

    //now generate the sitemap.xml data 

    xmldata = '<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; 
    for(var url in routers) { 
     xmldata+="<url>\n"; 
     xmldata+="<loc>"+url+"</loc>\n"; 
     xmldata+="<lastmod>2013-03-03</lastmod>\n"; 
     xmldata+="<changefreq>daily</changefreq>\n"; 
     xmldata+="<priority>0.8</priority>\n"; 
     xmldata+="</url>\n"; 
    } 

    xmldata+="</urlset>"; 

    return xmldata; 
}); 

您可能需要一點進一步自定義它到底你想要它。我不能說我已經試過上面我不是真的如何最優地使用站點地圖,但它可能讓你開始

+1

我真正開始寫東西類似的昨天,雖然我確實想要一個實際的文件爲sitemap.xml(感到最安全的谷歌),並得到了node.js fs模塊寫入文件和一切。感謝您的回覆,如果我能找到值得分享的內容,我會在這裏回覆。 –