2013-04-02 33 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模块写入文件和一切。感谢您的回复,如果我能找到值得分享的内容,我会在这里回复。 –